@compilr-dev/sdk 0.2.5 → 0.2.7

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 (33) hide show
  1. package/dist/index.d.ts +4 -1
  2. package/dist/index.js +13 -1
  3. package/dist/platform/file-anchor-service.d.ts +62 -0
  4. package/dist/platform/file-anchor-service.js +241 -0
  5. package/dist/platform/index.d.ts +2 -0
  6. package/dist/platform/index.js +2 -0
  7. package/dist/project-generator/detection.d.ts +42 -0
  8. package/dist/project-generator/detection.js +401 -0
  9. package/dist/project-generator/generator.d.ts +14 -0
  10. package/dist/project-generator/generator.js +245 -0
  11. package/dist/project-generator/index.d.ts +11 -0
  12. package/dist/project-generator/index.js +13 -0
  13. package/dist/project-generator/templates/coding-standards.d.ts +7 -0
  14. package/dist/project-generator/templates/coding-standards.js +299 -0
  15. package/dist/project-generator/templates/compilr-md-import.d.ts +8 -0
  16. package/dist/project-generator/templates/compilr-md-import.js +241 -0
  17. package/dist/project-generator/templates/compilr-md.d.ts +7 -0
  18. package/dist/project-generator/templates/compilr-md.js +141 -0
  19. package/dist/project-generator/templates/config-json.d.ts +13 -0
  20. package/dist/project-generator/templates/config-json.js +39 -0
  21. package/dist/project-generator/templates/gitignore.d.ts +7 -0
  22. package/dist/project-generator/templates/gitignore.js +85 -0
  23. package/dist/project-generator/templates/index.d.ts +11 -0
  24. package/dist/project-generator/templates/index.js +11 -0
  25. package/dist/project-generator/templates/package-json.d.ts +7 -0
  26. package/dist/project-generator/templates/package-json.js +111 -0
  27. package/dist/project-generator/templates/readme-md.d.ts +7 -0
  28. package/dist/project-generator/templates/readme-md.js +165 -0
  29. package/dist/project-generator/templates/tsconfig.d.ts +7 -0
  30. package/dist/project-generator/templates/tsconfig.js +61 -0
  31. package/dist/project-generator/types.d.ts +95 -0
  32. package/dist/project-generator/types.js +24 -0
  33. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -56,7 +56,8 @@ export type { SystemPromptContext, BuildResult, SystemPromptModule, ModuleCondit
56
56
  export type { ProjectType, ProjectStatus, RepoPattern, WorkflowMode, LifecycleState, WorkItemType, WorkItemStatus, WorkItemPriority, GuidedStep, DocumentType, PlanStatus, Project, WorkItem, ProjectDocument, Plan, PlanSummary, PlanWithWorkItem, HistoryEntry, CreateProjectInput, UpdateProjectInput, ProjectListOptions, CreateWorkItemInput, UpdateWorkItemInput, QueryWorkItemsInput, CreateDocumentInput, UpdateDocumentInput, CreatePlanInput, UpdatePlanInput, ListPlansOptions, WorkItemQueryResult, ProjectListResult, BulkCreateItem, IProjectRepository, IWorkItemRepository, IDocumentRepository, IPlanRepository, IAnchorService, IArtifactService, IEpisodeService, AnchorData, ArtifactType, ArtifactData, ArtifactSummaryData, WorkEpisode, ProjectWorkSummary, PlatformContext, PlatformToolsConfig, PlatformHooks, StepCriteria, } from './platform/index.js';
57
57
  export { createSQLiteRepositories, SQLiteProjectRepository, SQLiteWorkItemRepository, SQLiteDocumentRepository, SQLitePlanRepository, getDatabase, closeDatabase, closeAllDatabases, databaseExists, SCHEMA_VERSION, SCHEMA_SQL, } from './platform/index.js';
58
58
  export type { SQLiteRepositories, CreateSQLiteRepositoriesOptions, ProjectDeleteHooks, ProjectRecord, WorkItemRecord, ProjectDocumentRecord, } from './platform/index.js';
59
- export { createPlatformTools, createProjectTools, createWorkItemTools, createDocumentTools, createPlanTools, createBacklogTools, createAnchorTools, createArtifactTools, createEpisodeTools, } from './platform/index.js';
59
+ export { createPlatformTools, createProjectTools, createWorkItemTools, createDocumentTools, createPlanTools, createBacklogTools, createAnchorTools, createArtifactTools, createEpisodeTools, ProjectAnchorStore, } from './platform/index.js';
60
+ export type { ProjectAnchorStoreConfig } from './platform/index.js';
60
61
  export { STEP_ORDER, GUIDED_STEP_CRITERIA, getNextStep, isValidTransition, getStepCriteria, formatStepDisplay, getStepNumber, } from './platform/index.js';
61
62
  export { platformSkills, designSkill, sketchSkill, prdSkill, refineSkill, refineItemSkill, architectureSkill, sessionNotesSkill, buildSkill, scaffoldSkill, } from './skills/index.js';
62
63
  export { defineTool, createSuccessResult, createErrorResult, mergeHooks, createLoggingHooks, createClaudeProvider, createOpenAIProvider, createGeminiNativeProvider, createOllamaProvider, createTogetherProvider, createGroqProvider, createFireworksProvider, createPerplexityProvider, createOpenRouterProvider, createMockProvider, MockProvider, Agent, ContextManager, DEFAULT_CONTEXT_CONFIG, createTaskTool, createSuggestTool, defaultAgentTypes, TOOL_SETS, BUILTIN_GUARDRAILS, TOOL_NAMES, getDefaultShellManager, builtinSkills, AnchorManager, MCPManager, AgentError, ProviderError, ToolError, ToolTimeoutError, MaxIterationsError, AbortError, } from '@compilr-dev/agents';
@@ -65,5 +66,7 @@ export { DEFAULT_PERMISSION_RULES, findMatchingRule, permissionModeLabel, permis
65
66
  export type { PermissionRule, PermissionMode, PermissionLevel } from './permissions.js';
66
67
  export { readMCPConfigFile, writeMCPConfigFile, resolveServerEntry, loadMCPServers, saveMCPServerEntry, deleteMCPServerEntry, getServerNames, } from './mcp-config.js';
67
68
  export type { MCPServerEntry, MCPConfigFile, ResolvedMCPServer } from './mcp-config.js';
69
+ export { generateProject, isGitConfigured, generateCompilrMd, generateConfigJson, generateReadmeMd, generateCodingStandardsMd, generatePackageJson, generateTsconfig, generateGitignore, generateCompilrMdForImport, detectProjectInfo, detectGitInfo, prettifyName, getLanguageLabel, getFrameworkLabel, validateImportPath, isValidProjectName, projectExists, TECH_STACK_LABELS, CODING_STANDARDS_LABELS, REPO_PATTERN_LABELS, WORKFLOW_VERSION, } from './project-generator/index.js';
70
+ export type { TechStack, CodingStandards, GeneratorRepoPattern, ProjectConfig, GenerationResult, CompilrConfig, DetectedProject, GitInfo, ImportProjectConfig, } from './project-generator/index.js';
68
71
  export { readFileTool, writeFileTool, createBashTool, bashTool, bashOutputTool, killShellTool, grepTool, globTool, editTool, todoWriteTool, todoReadTool, createTodoTools, TodoStore, webFetchTool, suggestTool, } from '@compilr-dev/agents';
69
72
  export { gitStatusTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, gitStashTool, gitBlameTool, gitFileHistoryTool, detectProjectTool, findProjectRootTool, runTestsTool, runLintTool, runBuildTool, runFormatTool, findDefinitionTool, findReferencesTool, findTodosTool, checkOutdatedTool, findVulnerabilitiesTool, analyzeTestCoverageTool, getFileStructureTool, getComplexityTool, allCodingTools, unifiedTools, } from '@compilr-dev/agents-coding';
package/dist/index.js CHANGED
@@ -119,7 +119,7 @@ export { createSQLiteRepositories, SQLiteProjectRepository, SQLiteWorkItemReposi
119
119
  // =============================================================================
120
120
  // Platform Tools (runtime — createPlatformTools factory + individual factories)
121
121
  // =============================================================================
122
- export { createPlatformTools, createProjectTools, createWorkItemTools, createDocumentTools, createPlanTools, createBacklogTools, createAnchorTools, createArtifactTools, createEpisodeTools, } from './platform/index.js';
122
+ export { createPlatformTools, createProjectTools, createWorkItemTools, createDocumentTools, createPlanTools, createBacklogTools, createAnchorTools, createArtifactTools, createEpisodeTools, ProjectAnchorStore, } from './platform/index.js';
123
123
  // =============================================================================
124
124
  // Platform Workflow (pure step-criteria logic)
125
125
  // =============================================================================
@@ -165,6 +165,18 @@ export { DEFAULT_PERMISSION_RULES, findMatchingRule, permissionModeLabel, permis
165
165
  // =============================================================================
166
166
  export { readMCPConfigFile, writeMCPConfigFile, resolveServerEntry, loadMCPServers, saveMCPServerEntry, deleteMCPServerEntry, getServerNames, } from './mcp-config.js';
167
167
  // =============================================================================
168
+ // Project Generator (templates, scaffolding, detection)
169
+ // =============================================================================
170
+ export {
171
+ // Generator
172
+ generateProject, isGitConfigured,
173
+ // Templates
174
+ generateCompilrMd, generateConfigJson, generateReadmeMd, generateCodingStandardsMd, generatePackageJson, generateTsconfig, generateGitignore, generateCompilrMdForImport,
175
+ // Detection
176
+ detectProjectInfo, detectGitInfo, prettifyName, getLanguageLabel, getFrameworkLabel, validateImportPath, isValidProjectName, projectExists,
177
+ // Constants
178
+ TECH_STACK_LABELS, CODING_STANDARDS_LABELS, REPO_PATTERN_LABELS, WORKFLOW_VERSION, } from './project-generator/index.js';
179
+ // =============================================================================
168
180
  // Individual Tool Re-exports (for consumers that build custom tool registries)
169
181
  // =============================================================================
170
182
  // Base tools from @compilr-dev/agents
@@ -0,0 +1,62 @@
1
+ /**
2
+ * ProjectAnchorStore — File-based anchor management with dual-scope routing.
3
+ *
4
+ * Manages per-project and global anchors using @compilr-dev/agents AnchorManager
5
+ * with JSON file persistence. Used by both CLI and Desktop app.
6
+ *
7
+ * Storage structure:
8
+ * {anchorsDir}/
9
+ * ├── global.json # Non-project anchors (includes safety defaults)
10
+ * └── project-{id}.json # Per-project anchors
11
+ */
12
+ import { AnchorManager } from '@compilr-dev/agents';
13
+ import type { Anchor, AnchorInput, AnchorQueryOptions } from '@compilr-dev/agents';
14
+ import type { IAnchorService } from './services.js';
15
+ export interface ProjectAnchorStoreConfig {
16
+ /** Directory for anchor JSON files (e.g. ~/.compilr-dev/anchors/) */
17
+ anchorsDir: string;
18
+ /** Returns the currently active project ID, or undefined if none */
19
+ getCurrentProjectId: () => number | undefined;
20
+ /** Returns display name for a project ID (used in list results) */
21
+ getProjectName?: (id: number) => string | null;
22
+ /** Max anchors per manager (default: 50) */
23
+ maxAnchors?: number;
24
+ /** Max tokens per manager (default: 4000) */
25
+ maxTokens?: number;
26
+ }
27
+ export declare class ProjectAnchorStore {
28
+ private readonly managers;
29
+ private readonly config;
30
+ constructor(config: ProjectAnchorStoreConfig);
31
+ /** Get anchor manager for a project (or global if projectId is null). */
32
+ getManager(projectId: string | null): AnchorManager;
33
+ /** Get the global anchor manager (shorthand for getManager(null)). */
34
+ getGlobalManager(): AnchorManager;
35
+ /** Add an anchor, routing to the appropriate manager. */
36
+ addAnchor(input: AnchorInput & {
37
+ projectId?: string;
38
+ }): Anchor;
39
+ /** Get all anchors across all cached managers. */
40
+ getAllAnchors(options?: AnchorQueryOptions): Anchor[];
41
+ /** Clear all anchors for a project and delete the persistence file. */
42
+ clearProjectAnchors(projectId: string): number;
43
+ /**
44
+ * Get formatted anchor content for system prompt injection.
45
+ * Combines global anchors with project-specific anchors.
46
+ */
47
+ getFormattedAnchors(projectId?: string): string;
48
+ /** Get list of project IDs that have anchor files. */
49
+ getProjectsWithAnchors(): string[];
50
+ /** Get anchor statistics. */
51
+ getAnchorStats(): {
52
+ globalCount: number;
53
+ projectCounts: Map<string, number>;
54
+ totalTokens: number;
55
+ };
56
+ /** Clear all cached managers (useful for testing or refresh). */
57
+ clearCache(): void;
58
+ /** Create an IAnchorService implementation for use with createPlatformTools(). */
59
+ toService(): IAnchorService;
60
+ private getPersistPath;
61
+ private ensureDir;
62
+ }
@@ -0,0 +1,241 @@
1
+ /**
2
+ * ProjectAnchorStore — File-based anchor management with dual-scope routing.
3
+ *
4
+ * Manages per-project and global anchors using @compilr-dev/agents AnchorManager
5
+ * with JSON file persistence. Used by both CLI and Desktop app.
6
+ *
7
+ * Storage structure:
8
+ * {anchorsDir}/
9
+ * ├── global.json # Non-project anchors (includes safety defaults)
10
+ * └── project-{id}.json # Per-project anchors
11
+ */
12
+ import { existsSync, mkdirSync, readdirSync, unlinkSync } from 'fs';
13
+ import { join } from 'path';
14
+ import { AnchorManager } from '@compilr-dev/agents';
15
+ // =============================================================================
16
+ // ProjectAnchorStore
17
+ // =============================================================================
18
+ export class ProjectAnchorStore {
19
+ managers = new Map();
20
+ config;
21
+ constructor(config) {
22
+ this.config = config;
23
+ }
24
+ // ---------------------------------------------------------------------------
25
+ // Manager Access
26
+ // ---------------------------------------------------------------------------
27
+ /** Get anchor manager for a project (or global if projectId is null). */
28
+ getManager(projectId) {
29
+ const existing = this.managers.get(projectId);
30
+ if (existing) {
31
+ return existing;
32
+ }
33
+ this.ensureDir();
34
+ const manager = new AnchorManager({
35
+ persistPath: this.getPersistPath(projectId),
36
+ includeDefaults: projectId === null,
37
+ maxAnchors: this.config.maxAnchors ?? 50,
38
+ maxTokens: this.config.maxTokens ?? 4000,
39
+ });
40
+ this.managers.set(projectId, manager);
41
+ return manager;
42
+ }
43
+ /** Get the global anchor manager (shorthand for getManager(null)). */
44
+ getGlobalManager() {
45
+ return this.getManager(null);
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // Convenience Methods
49
+ // ---------------------------------------------------------------------------
50
+ /** Add an anchor, routing to the appropriate manager. */
51
+ addAnchor(input) {
52
+ const manager = this.getManager(input.projectId ?? null);
53
+ return manager.add(input);
54
+ }
55
+ /** Get all anchors across all cached managers. */
56
+ getAllAnchors(options) {
57
+ const all = [];
58
+ for (const manager of this.managers.values()) {
59
+ all.push(...manager.getAll(options));
60
+ }
61
+ return all;
62
+ }
63
+ /** Clear all anchors for a project and delete the persistence file. */
64
+ clearProjectAnchors(projectId) {
65
+ const manager = this.managers.get(projectId);
66
+ let removed = 0;
67
+ if (manager) {
68
+ removed = manager.clear();
69
+ this.managers.delete(projectId);
70
+ }
71
+ const filePath = this.getPersistPath(projectId);
72
+ if (existsSync(filePath)) {
73
+ unlinkSync(filePath);
74
+ }
75
+ return removed;
76
+ }
77
+ /**
78
+ * Get formatted anchor content for system prompt injection.
79
+ * Combines global anchors with project-specific anchors.
80
+ */
81
+ getFormattedAnchors(projectId) {
82
+ const parts = [];
83
+ const globalFormatted = this.getGlobalManager().format();
84
+ if (globalFormatted) {
85
+ parts.push(globalFormatted);
86
+ }
87
+ if (projectId) {
88
+ const projectFormatted = this.getManager(projectId).format();
89
+ if (projectFormatted) {
90
+ if (parts.length > 0) {
91
+ parts.push('');
92
+ parts.push(`### Project Anchors (${projectId})`);
93
+ }
94
+ parts.push(projectFormatted);
95
+ }
96
+ }
97
+ return parts.join('\n');
98
+ }
99
+ /** Get list of project IDs that have anchor files. */
100
+ getProjectsWithAnchors() {
101
+ if (!existsSync(this.config.anchorsDir)) {
102
+ return [];
103
+ }
104
+ const files = readdirSync(this.config.anchorsDir);
105
+ const projectIds = [];
106
+ for (const file of files) {
107
+ const match = /^project-(.+)\.json$/.exec(file);
108
+ if (match?.[1]) {
109
+ projectIds.push(match[1]);
110
+ }
111
+ }
112
+ return projectIds;
113
+ }
114
+ /** Get anchor statistics. */
115
+ getAnchorStats() {
116
+ const globalManager = this.getGlobalManager();
117
+ const projectCounts = new Map();
118
+ let totalTokens = globalManager.getTotalTokens();
119
+ for (const projectId of this.getProjectsWithAnchors()) {
120
+ const manager = this.getManager(projectId);
121
+ projectCounts.set(projectId, manager.size);
122
+ totalTokens += manager.getTotalTokens();
123
+ }
124
+ return {
125
+ globalCount: globalManager.size,
126
+ projectCounts,
127
+ totalTokens,
128
+ };
129
+ }
130
+ /** Clear all cached managers (useful for testing or refresh). */
131
+ clearCache() {
132
+ this.managers.clear();
133
+ }
134
+ // ---------------------------------------------------------------------------
135
+ // IAnchorService — for platform tools
136
+ // ---------------------------------------------------------------------------
137
+ /** Create an IAnchorService implementation for use with createPlatformTools(). */
138
+ toService() {
139
+ return {
140
+ add: (input) => {
141
+ const priority = input.priority ?? 'info';
142
+ const projId = this.config.getCurrentProjectId();
143
+ let scope = input.scope;
144
+ if (!scope) {
145
+ scope = projId ? 'project' : 'global';
146
+ }
147
+ if (scope === 'project' && !projId) {
148
+ throw new Error('Cannot add project-scoped anchor: no active project. Use scope: "global" instead.');
149
+ }
150
+ const projectKey = scope === 'project' && projId ? String(projId) : null;
151
+ const manager = this.getManager(projectKey);
152
+ const anchor = manager.add({
153
+ content: input.content,
154
+ priority,
155
+ scope: 'persistent',
156
+ tags: input.tags,
157
+ projectId: projectKey ?? undefined,
158
+ });
159
+ return Promise.resolve({
160
+ id: anchor.id,
161
+ content: anchor.content,
162
+ priority: anchor.priority,
163
+ scope,
164
+ tags: anchor.tags,
165
+ });
166
+ },
167
+ remove: (id) => {
168
+ let removed = false;
169
+ let scope;
170
+ const projId = this.config.getCurrentProjectId();
171
+ if (projId) {
172
+ const projectManager = this.getManager(String(projId));
173
+ if (projectManager.has(id)) {
174
+ removed = projectManager.remove(id);
175
+ scope = 'project';
176
+ }
177
+ }
178
+ if (!removed) {
179
+ const globalManager = this.getGlobalManager();
180
+ if (globalManager.has(id)) {
181
+ removed = globalManager.remove(id);
182
+ scope = 'global';
183
+ }
184
+ }
185
+ return Promise.resolve({ removed, scope });
186
+ },
187
+ list: (options) => {
188
+ const projId = this.config.getCurrentProjectId();
189
+ const scope = options?.scope ?? 'all';
190
+ const anchors = [];
191
+ if (scope === 'global' || scope === 'all') {
192
+ for (const anchor of this.getGlobalManager().getAll({ priority: options?.priority })) {
193
+ anchors.push({
194
+ id: anchor.id,
195
+ content: anchor.content,
196
+ priority: anchor.priority,
197
+ scope: 'global',
198
+ tags: anchor.tags,
199
+ });
200
+ }
201
+ }
202
+ if ((scope === 'project' || scope === 'all') && projId) {
203
+ const projectManager = this.getManager(String(projId));
204
+ for (const anchor of projectManager.getAll({ priority: options?.priority })) {
205
+ anchors.push({
206
+ id: anchor.id,
207
+ content: anchor.content,
208
+ priority: anchor.priority,
209
+ scope: 'project',
210
+ tags: anchor.tags,
211
+ });
212
+ }
213
+ }
214
+ // Sort by priority (critical first)
215
+ const priorityOrder = { critical: 0, safety: 1, info: 2 };
216
+ anchors.sort((a, b) => {
217
+ const pa = priorityOrder[a.priority] ?? 2;
218
+ const pb = priorityOrder[b.priority] ?? 2;
219
+ return pa - pb;
220
+ });
221
+ let activeProjectName = null;
222
+ if (projId && this.config.getProjectName) {
223
+ activeProjectName = this.config.getProjectName(projId);
224
+ }
225
+ return Promise.resolve({ count: anchors.length, activeProjectName, anchors });
226
+ },
227
+ };
228
+ }
229
+ // ---------------------------------------------------------------------------
230
+ // Private Helpers
231
+ // ---------------------------------------------------------------------------
232
+ getPersistPath(projectId) {
233
+ const filename = projectId ? `project-${projectId}.json` : 'global.json';
234
+ return join(this.config.anchorsDir, filename);
235
+ }
236
+ ensureDir() {
237
+ if (!existsSync(this.config.anchorsDir)) {
238
+ mkdirSync(this.config.anchorsDir, { recursive: true });
239
+ }
240
+ }
241
+ }
@@ -8,5 +8,7 @@ export type { PlatformContext, PlatformToolsConfig, PlatformHooks } from './cont
8
8
  export { createPlatformTools, createProjectTools, createWorkItemTools, createDocumentTools, createPlanTools, createBacklogTools, createAnchorTools, createArtifactTools, createEpisodeTools, } from './tools/index.js';
9
9
  export { createSQLiteRepositories, SQLiteProjectRepository, SQLiteWorkItemRepository, SQLiteDocumentRepository, SQLitePlanRepository, getDatabase, closeDatabase, closeAllDatabases, databaseExists, SCHEMA_VERSION, SCHEMA_SQL, } from './sqlite/index.js';
10
10
  export type { SQLiteRepositories, CreateSQLiteRepositoriesOptions, ProjectDeleteHooks, ProjectRecord, WorkItemRecord, ProjectDocumentRecord, } from './sqlite/index.js';
11
+ export { ProjectAnchorStore } from './file-anchor-service.js';
12
+ export type { ProjectAnchorStoreConfig } from './file-anchor-service.js';
11
13
  export { STEP_ORDER, GUIDED_STEP_CRITERIA, getNextStep, isValidTransition, getStepCriteria, formatStepDisplay, getStepNumber, } from './workflow.js';
12
14
  export type { StepCriteria } from './workflow.js';
@@ -5,5 +5,7 @@
5
5
  export { createPlatformTools, createProjectTools, createWorkItemTools, createDocumentTools, createPlanTools, createBacklogTools, createAnchorTools, createArtifactTools, createEpisodeTools, } from './tools/index.js';
6
6
  // SQLite implementations (concrete repositories)
7
7
  export { createSQLiteRepositories, SQLiteProjectRepository, SQLiteWorkItemRepository, SQLiteDocumentRepository, SQLitePlanRepository, getDatabase, closeDatabase, closeAllDatabases, databaseExists, SCHEMA_VERSION, SCHEMA_SQL, } from './sqlite/index.js';
8
+ // File-based anchor service (shared by CLI and Desktop)
9
+ export { ProjectAnchorStore } from './file-anchor-service.js';
8
10
  // Workflow (pure step-criteria logic)
9
11
  export { STEP_ORDER, GUIDED_STEP_CRITERIA, getNextStep, isValidTransition, getStepCriteria, formatStepDisplay, getStepNumber, } from './workflow.js';
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Project Detection Utilities
3
+ *
4
+ * Utilities for detecting project information from an existing directory.
5
+ * Used by the import project feature.
6
+ */
7
+ import type { DetectedProject, GitInfo } from './types.js';
8
+ /**
9
+ * Detect project information from a directory path
10
+ */
11
+ export declare function detectProjectInfo(projectPath: string): DetectedProject;
12
+ /**
13
+ * Detect git repository information
14
+ */
15
+ export declare function detectGitInfo(projectPath: string): GitInfo;
16
+ /**
17
+ * Convert kebab-case or snake_case to Title Case
18
+ */
19
+ export declare function prettifyName(name: string): string;
20
+ /**
21
+ * Get a human-readable label for detected language
22
+ */
23
+ export declare function getLanguageLabel(language: string | null): string;
24
+ /**
25
+ * Get a human-readable label for detected framework
26
+ */
27
+ export declare function getFrameworkLabel(framework: string | null): string;
28
+ /**
29
+ * Check if a path is a valid directory that can be imported
30
+ */
31
+ export declare function validateImportPath(importPath: string): {
32
+ valid: boolean;
33
+ error?: string;
34
+ };
35
+ /**
36
+ * Validate project name
37
+ */
38
+ export declare function isValidProjectName(name: string): boolean;
39
+ /**
40
+ * Check if project directory already exists
41
+ */
42
+ export declare function projectExists(name: string, basePath: string): boolean;