argustack 0.1.6 → 0.1.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 (72) hide show
  1. package/README.md +25 -12
  2. package/dist/adapters/git/mapper.d.ts +1 -1
  3. package/dist/adapters/git/mapper.js +1 -1
  4. package/dist/adapters/github/mapper.d.ts +1 -1
  5. package/dist/adapters/github/mapper.js +1 -1
  6. package/dist/cli/init/generators.d.ts +6 -0
  7. package/dist/cli/init/generators.d.ts.map +1 -0
  8. package/dist/cli/init/generators.js +153 -0
  9. package/dist/cli/init/generators.js.map +1 -0
  10. package/dist/cli/init/index.d.ts +4 -0
  11. package/dist/cli/init/index.d.ts.map +1 -0
  12. package/dist/cli/init/index.js +254 -0
  13. package/dist/cli/init/index.js.map +1 -0
  14. package/dist/cli/init/setup-csv.d.ts +4 -0
  15. package/dist/cli/init/setup-csv.d.ts.map +1 -0
  16. package/dist/cli/init/setup-csv.js +52 -0
  17. package/dist/cli/init/setup-csv.js.map +1 -0
  18. package/dist/cli/init/setup-db.d.ts +4 -0
  19. package/dist/cli/init/setup-db.d.ts.map +1 -0
  20. package/dist/cli/init/setup-db.js +33 -0
  21. package/dist/cli/init/setup-db.js.map +1 -0
  22. package/dist/cli/init/setup-git.d.ts +4 -0
  23. package/dist/cli/init/setup-git.d.ts.map +1 -0
  24. package/dist/cli/init/setup-git.js +244 -0
  25. package/dist/cli/init/setup-git.js.map +1 -0
  26. package/dist/cli/init/setup-github.d.ts +4 -0
  27. package/dist/cli/init/setup-github.d.ts.map +1 -0
  28. package/dist/cli/init/setup-github.js +102 -0
  29. package/dist/cli/init/setup-github.js.map +1 -0
  30. package/dist/cli/init/setup-jira.d.ts +4 -0
  31. package/dist/cli/init/setup-jira.d.ts.map +1 -0
  32. package/dist/cli/init/setup-jira.js +124 -0
  33. package/dist/cli/init/setup-jira.js.map +1 -0
  34. package/dist/cli/init/types.d.ts +59 -0
  35. package/dist/cli/init/types.d.ts.map +1 -0
  36. package/dist/cli/init/types.js +31 -0
  37. package/dist/cli/init/types.js.map +1 -0
  38. package/dist/core/types/config.js +1 -1
  39. package/dist/core/types/config.js.map +1 -1
  40. package/dist/mcp/helpers.d.ts +24 -0
  41. package/dist/mcp/helpers.d.ts.map +1 -0
  42. package/dist/mcp/helpers.js +73 -0
  43. package/dist/mcp/helpers.js.map +1 -0
  44. package/dist/mcp/server.d.ts +2 -3
  45. package/dist/mcp/server.d.ts.map +1 -1
  46. package/dist/mcp/server.js +12 -1579
  47. package/dist/mcp/server.js.map +1 -1
  48. package/dist/mcp/tools/estimate.d.ts +3 -0
  49. package/dist/mcp/tools/estimate.d.ts.map +1 -0
  50. package/dist/mcp/tools/estimate.js +478 -0
  51. package/dist/mcp/tools/estimate.js.map +1 -0
  52. package/dist/mcp/tools/issue.d.ts +3 -0
  53. package/dist/mcp/tools/issue.d.ts.map +1 -0
  54. package/dist/mcp/tools/issue.js +468 -0
  55. package/dist/mcp/tools/issue.js.map +1 -0
  56. package/dist/mcp/tools/query.d.ts +3 -0
  57. package/dist/mcp/tools/query.d.ts.map +1 -0
  58. package/dist/mcp/tools/query.js +319 -0
  59. package/dist/mcp/tools/query.js.map +1 -0
  60. package/dist/mcp/tools/search.d.ts +3 -0
  61. package/dist/mcp/tools/search.d.ts.map +1 -0
  62. package/dist/mcp/tools/search.js +61 -0
  63. package/dist/mcp/tools/search.js.map +1 -0
  64. package/dist/mcp/tools/workspace.d.ts +3 -0
  65. package/dist/mcp/tools/workspace.d.ts.map +1 -0
  66. package/dist/mcp/tools/workspace.js +86 -0
  67. package/dist/mcp/tools/workspace.js.map +1 -0
  68. package/dist/mcp/types.d.ts +157 -0
  69. package/dist/mcp/types.d.ts.map +1 -0
  70. package/dist/mcp/types.js +2 -0
  71. package/dist/mcp/types.js.map +1 -0
  72. package/package.json +1 -1
package/README.md CHANGED
@@ -41,7 +41,7 @@ Argustack builds this knowledge base from your project's sources of truth:
41
41
  > *Is this bug still relevant or already fixed in code?*
42
42
  > *Was the feature implemented as described in the ticket?*
43
43
  > *Who worked on this module and what changed last month?*
44
- > *Which commits and PRs reference ticket PAP-123?*
44
+ > *Which commits and PRs reference ticket PROJ-123?*
45
45
  > *Who approved the PR and what was the review feedback?*
46
46
 
47
47
  ## How it works
@@ -218,7 +218,7 @@ Every custom field is preserved exactly as Jira returns it. 500 custom fields? A
218
218
  | `commit_files` | Per-file changes — path, status, additions, deletions |
219
219
  | `commit_issue_refs` | Cross-reference: commit ↔ Jira issue (extracted from commit messages) |
220
220
 
221
- Commit messages mentioning issue keys like `PAP-123` or `PROJ-45` are automatically linked to Jira issues.
221
+ Commit messages mentioning issue keys like `PROJ-123` or `PROJ-45` are automatically linked to Jira issues.
222
222
 
223
223
  ### GitHub tables
224
224
 
@@ -233,7 +233,7 @@ Select "GitHub" during `argustack init` or add later with `argustack source add
233
233
  | `pr_issue_refs` | Cross-reference: PR ↔ Jira issue (extracted from PR title and body) |
234
234
  | `releases` | GitHub releases with tags, notes, and full-text search |
235
235
 
236
- PR titles and bodies mentioning issue keys like `PAP-123` are automatically linked to Jira issues — just like commits.
236
+ PR titles and bodies mentioning issue keys like `PROJ-123` are automatically linked to Jira issues — just like commits.
237
237
 
238
238
  ## MCP Tools
239
239
 
@@ -271,7 +271,7 @@ When connected to Claude, these tools are available:
271
271
  |------|-------------|
272
272
  | `issue_timeline` | Chronological timeline — changelogs + commits + PRs for one issue |
273
273
  | `semantic_search` | Find similar issues by meaning (pgvector embeddings) |
274
- | `estimate` | Predict how long a task will take for a specific developer "without bugs" (pure dev time) and "with bugs" (real cost), personal coefficient from full history |
274
+ | `estimate` | Predict task duration per developer. With effort data: "without bugs" / "with bugs" predictions. With CSV only: resolution timeline in business days (lead time, not active dev) |
275
275
 
276
276
  ### System tools
277
277
 
@@ -403,15 +403,27 @@ DB_NAME=argustack
403
403
 
404
404
  **`.env` is in `.gitignore`** — if you accidentally run `git add .`, your credentials won't be committed.
405
405
 
406
+ ## Architecture — Hexagonal (Ports & Adapters)
407
+
408
+ ```
409
+ Driving adapters (entries): cli/, mcp/
410
+ Driven adapters (external systems): adapters/jira/, adapters/git/, adapters/github/, adapters/postgres/
411
+
412
+ Dependency Rule: cli/,mcp/ → use-cases/ → core/ports ← adapters/
413
+ ```
414
+
415
+ Core has zero dependencies — only pure TypeScript types and interfaces. Adapters implement core ports and are independently replaceable.
416
+
406
417
  ## Tech Stack
407
418
 
408
- - TypeScript / Node.js
409
- - Commander.js — CLI
410
- - jira.jsJira REST API
411
- - OctokitGitHub REST API (PRs, reviews, releases)
412
- - es-gitnative Git bindings (N-API, powered by libgit2)
413
- - PostgreSQL 16 + pgvector storage + vector search
414
- - MCP SDK Claude integration
419
+ - TypeScript / Node.js — Hexagonal Architecture
420
+ - Commander.js — CLI (driving adapter)
421
+ - MCP SDK Claude integration (driving adapter)
422
+ - jira.jsJira REST API (driven adapter)
423
+ - OctokitGitHub REST API (driven adapter)
424
+ - es-git native Git bindings, N-API, powered by libgit2 (driven adapter)
425
+ - csv-parsestreaming RFC 4180 CSV parser (driven adapter)
426
+ - PostgreSQL 16 + pgvector — storage + vector search (driven adapter)
415
427
  - Docker — database infrastructure
416
428
 
417
429
  ## Roadmap
@@ -424,9 +436,10 @@ DB_NAME=argustack
424
436
  - [x] Cross-source timeline (issue_timeline: changelogs + commits + PRs)
425
437
  - [x] Multi-repo Git support (multiple repos per workspace, `GIT_REPO_PATHS`)
426
438
  - [x] Progress indicators during sync (e.g. `150/506 issues (30%)`)
439
+ - [x] CSV import (Jira export without API token)
440
+ - [x] Estimate tool — task duration prediction with data-source awareness
427
441
  - [ ] Database adapter (schema, sample data)
428
442
  - [ ] Cross-source analysis (Jira ticket vs actual code vs DB state)
429
- - [x] CSV import (Jira export without API token)
430
443
 
431
444
  ## License
432
445
 
@@ -4,7 +4,7 @@ export declare function mapCommit(esCommit: EsGitCommit, repoPath: string): Comm
4
4
  export declare function mapDiffDelta(delta: DiffDelta, commitHash: string, additions: number, deletions: number): CommitFile;
5
5
  /**
6
6
  * Extract issue references from a commit message.
7
- * Matches patterns like: PAP-123, PROJ-45, ABC-1
7
+ * Matches patterns like: PROJ-123, PROJ-45, ABC-1
8
8
  * Returns unique keys, uppercased.
9
9
  */
10
10
  export declare function extractIssueRefs(commitHash: string, message: string): CommitIssueRef[];
@@ -28,7 +28,7 @@ export function mapDiffDelta(delta, commitHash, additions, deletions) {
28
28
  }
29
29
  /**
30
30
  * Extract issue references from a commit message.
31
- * Matches patterns like: PAP-123, PROJ-45, ABC-1
31
+ * Matches patterns like: PROJ-123, PROJ-45, ABC-1
32
32
  * Returns unique keys, uppercased.
33
33
  */
34
34
  export function extractIssueRefs(commitHash, message) {
@@ -6,7 +6,7 @@ export declare function mapPrFile(raw: Record<string, unknown>, prNumber: number
6
6
  export declare function mapRelease(raw: Record<string, unknown>, repoFullName: string): Release;
7
7
  /**
8
8
  * Extract issue references from PR title and body.
9
- * Matches Jira-style keys: PAP-123, PROJ-45
9
+ * Matches Jira-style keys: PROJ-123, PROJ-45
10
10
  */
11
11
  export declare function extractPrIssueRefs(prNumber: number, repoFullName: string, title: string, body: string | null): PullRequestIssueRef[];
12
12
  //# sourceMappingURL=mapper.d.ts.map
@@ -98,7 +98,7 @@ export function mapRelease(raw, repoFullName) {
98
98
  }
99
99
  /**
100
100
  * Extract issue references from PR title and body.
101
- * Matches Jira-style keys: PAP-123, PROJ-45
101
+ * Matches Jira-style keys: PROJ-123, PROJ-45
102
102
  */
103
103
  export function extractPrIssueRefs(prNumber, repoFullName, title, body) {
104
104
  const pattern = /\b([A-Z][A-Z0-9]+-\d+)\b/g;
@@ -0,0 +1,6 @@
1
+ import type { JiraSetupResult, GitSetupResult, GitHubSetupResult, CsvSetupResult, DbSetupResult } from './types.js';
2
+ export declare function generateEnv(jira: JiraSetupResult | null, git: GitSetupResult | null, github: GitHubSetupResult | null, csv: CsvSetupResult | null, db: DbSetupResult | null, argustackDbPort: number): string;
3
+ export declare function generateDockerCompose(dbPort: number, pgwebPort: number): string;
4
+ export declare function createWorkspaceFiles(workspaceDir: string, jira: JiraSetupResult | null, git: GitSetupResult | null, github: GitHubSetupResult | null, csv: CsvSetupResult | null, db: DbSetupResult | null, dbPort: number, pgwebPort: number): void;
5
+ export declare function printSummary(workspaceDir: string, jira: JiraSetupResult | null, git: GitSetupResult | null, github: GitHubSetupResult | null, csv: CsvSetupResult | null, db: DbSetupResult | null, pgwebPort: number, willAutoStart: boolean): void;
6
+ //# sourceMappingURL=generators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/cli/init/generators.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAYpB,wBAAgB,WAAW,CACzB,IAAI,EAAE,eAAe,GAAG,IAAI,EAC5B,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAChC,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,EAAE,EAAE,aAAa,GAAG,IAAI,EACxB,eAAe,EAAE,MAAM,GACtB,MAAM,CAiER;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAmC/E;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,eAAe,GAAG,IAAI,EAC5B,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAChC,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,EAAE,EAAE,aAAa,GAAG,IAAI,EACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,IAAI,CAiDN;AAED,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,eAAe,GAAG,IAAI,EAC5B,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAChC,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,EAAE,EAAE,aAAa,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,GACrB,IAAI,CA4CN"}
@@ -0,0 +1,153 @@
1
+ import { mkdirSync, writeFileSync, copyFileSync, existsSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import chalk from 'chalk';
5
+ import { createEmptyConfig, addSource, writeConfig } from '../../workspace/config.js';
6
+ import { resolveServerPath } from '../mcp-install.js';
7
+ const currentDir = fileURLToPath(new URL('.', import.meta.url));
8
+ function getTemplatesDir() {
9
+ const templatesDir = resolve(currentDir, '..', '..', '..', 'templates');
10
+ if (!existsSync(templatesDir)) {
11
+ throw new Error(`Templates directory not found: ${templatesDir}`);
12
+ }
13
+ return templatesDir;
14
+ }
15
+ export function generateEnv(jira, git, github, csv, db, argustackDbPort) {
16
+ const lines = [];
17
+ if (jira) {
18
+ lines.push('# === Jira ===', `JIRA_URL=${jira.jiraUrl}`, `JIRA_EMAIL=${jira.jiraEmail}`, `JIRA_API_TOKEN=${jira.jiraToken}`, `JIRA_PROJECTS=${jira.jiraProjects.join(',')}`, '');
19
+ }
20
+ if (git) {
21
+ lines.push('# === Git ===', `GIT_REPO_PATHS=${git.gitRepoPaths.join(',')}`, '');
22
+ }
23
+ if (github) {
24
+ lines.push('# === GitHub ===', `GITHUB_TOKEN=${github.githubToken}`, `GITHUB_OWNER=${github.githubOwner}`, `GITHUB_REPO=${github.githubRepo}`, '');
25
+ }
26
+ if (csv) {
27
+ lines.push('# === Jira CSV ===', `CSV_FILE_PATH=${csv.csvFilePath}`, '');
28
+ }
29
+ if (db) {
30
+ lines.push('# === Target Database (project DB to analyze) ===', `TARGET_DB_HOST=${db.targetDbHost}`, `TARGET_DB_PORT=${db.targetDbPort}`, `TARGET_DB_USER=${db.targetDbUser}`, `TARGET_DB_PASSWORD=${db.targetDbPassword}`, `TARGET_DB_NAME=${db.targetDbName}`, '');
31
+ }
32
+ lines.push('# === Argustack internal PostgreSQL (match docker-compose.yml) ===', 'DB_HOST=localhost', `DB_PORT=${argustackDbPort}`, 'DB_USER=argustack', 'DB_PASSWORD=argustack_local', 'DB_NAME=argustack', '', '# === OpenAI embeddings (optional, for semantic search) ===', '# OPENAI_API_KEY=sk-...');
33
+ return lines.join('\n') + '\n';
34
+ }
35
+ export function generateDockerCompose(dbPort, pgwebPort) {
36
+ return `services:
37
+ db:
38
+ image: pgvector/pgvector:pg16
39
+ container_name: argustack-db
40
+ ports:
41
+ - "${dbPort}:5432"
42
+ environment:
43
+ POSTGRES_USER: argustack
44
+ POSTGRES_PASSWORD: argustack_local
45
+ POSTGRES_DB: argustack
46
+ volumes:
47
+ - argustack-data:/var/lib/postgresql/data
48
+ - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
49
+ healthcheck:
50
+ test: ["CMD-SHELL", "pg_isready -U argustack"]
51
+ interval: 2s
52
+ timeout: 5s
53
+ retries: 15
54
+
55
+ pgweb:
56
+ image: sosedoff/pgweb
57
+ container_name: argustack-pgweb
58
+ ports:
59
+ - "${pgwebPort}:8081"
60
+ environment:
61
+ PGWEB_DATABASE_URL: postgres://argustack:argustack_local@db:5432/argustack?sslmode=disable
62
+ depends_on:
63
+ db:
64
+ condition: service_healthy
65
+ restart: on-failure
66
+
67
+ volumes:
68
+ argustack-data:
69
+ `;
70
+ }
71
+ export function createWorkspaceFiles(workspaceDir, jira, git, github, csv, db, dbPort, pgwebPort) {
72
+ const templatesDir = getTemplatesDir();
73
+ mkdirSync(workspaceDir, { recursive: true });
74
+ mkdirSync(join(workspaceDir, '.argustack'), { recursive: true });
75
+ mkdirSync(join(workspaceDir, 'db'), { recursive: true });
76
+ mkdirSync(join(workspaceDir, 'data'), { recursive: true });
77
+ let config = createEmptyConfig();
78
+ if (jira) {
79
+ config = addSource(config, 'jira');
80
+ }
81
+ if (git) {
82
+ config = addSource(config, 'git');
83
+ }
84
+ if (github) {
85
+ config = addSource(config, 'github');
86
+ }
87
+ if (csv) {
88
+ config = addSource(config, 'csv');
89
+ }
90
+ if (db) {
91
+ config = addSource(config, 'db');
92
+ }
93
+ writeConfig(workspaceDir, config);
94
+ writeFileSync(join(workspaceDir, '.env'), generateEnv(jira, git, github, csv, db, dbPort));
95
+ writeFileSync(join(workspaceDir, 'docker-compose.yml'), generateDockerCompose(dbPort, pgwebPort));
96
+ copyFileSync(join(templatesDir, 'init.sql'), join(workspaceDir, 'db', 'init.sql'));
97
+ copyFileSync(join(templatesDir, 'gitignore'), join(workspaceDir, '.gitignore'));
98
+ try {
99
+ const serverPath = resolveServerPath();
100
+ const mcpConfig = {
101
+ mcpServers: {
102
+ argustack: {
103
+ command: 'node',
104
+ args: [serverPath],
105
+ },
106
+ },
107
+ };
108
+ writeFileSync(join(workspaceDir, '.mcp.json'), JSON.stringify(mcpConfig, null, 2) + '\n');
109
+ }
110
+ catch { /* optional file, ignore */ }
111
+ }
112
+ export function printSummary(workspaceDir, jira, git, github, csv, db, pgwebPort, willAutoStart) {
113
+ console.log('');
114
+ console.log(chalk.green.bold(' Done! Your workspace is ready.'));
115
+ console.log('');
116
+ console.log(chalk.dim(' Sources configured:'));
117
+ if (jira) {
118
+ console.log(` ${chalk.green('✓')} Jira — ${jira.jiraUrl}`);
119
+ }
120
+ if (git) {
121
+ for (const p of git.gitRepoPaths) {
122
+ console.log(` ${chalk.green('✓')} Git — ${p}`);
123
+ }
124
+ }
125
+ if (github) {
126
+ console.log(` ${chalk.green('✓')} GitHub — ${github.githubOwner}/${github.githubRepo}`);
127
+ }
128
+ if (csv) {
129
+ console.log(` ${chalk.green('✓')} Jira CSV — ${csv.csvFilePath}`);
130
+ }
131
+ if (db) {
132
+ console.log(` ${chalk.green('✓')} Database — ${db.targetDbHost}:${db.targetDbPort}`);
133
+ }
134
+ if (!jira && !git && !github && !csv && !db) {
135
+ console.log(` ${chalk.yellow('—')} None yet. Use ${chalk.cyan('argustack source add <type>')}`);
136
+ }
137
+ if (!willAutoStart) {
138
+ console.log('');
139
+ console.log(chalk.dim(' Next steps:'));
140
+ console.log(` ${chalk.cyan('cd')} ${workspaceDir}`);
141
+ console.log(` ${chalk.cyan('docker compose up -d')} # start database`);
142
+ if (jira) {
143
+ console.log(` ${chalk.cyan('argustack sync jira')} # sync from Jira`);
144
+ }
145
+ console.log(` ${chalk.cyan(`http://localhost:${pgwebPort}`)} # browse data in pgweb`);
146
+ console.log('');
147
+ console.log(chalk.dim(' Claude integration:'));
148
+ console.log(` Claude Code: ${chalk.green('Open this folder — MCP tools ready!')}`);
149
+ console.log(` Claude Desktop: ${chalk.cyan('argustack mcp install')}`);
150
+ }
151
+ console.log('');
152
+ }
153
+ //# sourceMappingURL=generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/cli/init/generators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { InitFlags } from './types.js';
2
+ export type { InitFlags } from './types.js';
3
+ export declare function runInit(flags?: InitFlags): Promise<void>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/init/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EAMV,MAAM,YAAY,CAAC;AASpB,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmQ5C,wBAAsB,OAAO,CAAC,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlE"}
@@ -0,0 +1,254 @@
1
+ import { input, confirm, checkbox } from '@inquirer/prompts';
2
+ import { execSync } from 'node:child_process';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import { isWorkspace } from '../../workspace/resolver.js';
6
+ import { ALL_SOURCES, SOURCE_META } from '../../core/types/index.js';
7
+ import { DEFAULT_DB_PORT, DEFAULT_PGWEB_PORT, resolvePath, validatePort, getErrorMsg } from './types.js';
8
+ import { setupJiraInteractive, setupJiraFromFlags } from './setup-jira.js';
9
+ import { setupGitInteractive, setupGitFromFlags } from './setup-git.js';
10
+ import { setupGithubInteractive, setupGithubFromFlags } from './setup-github.js';
11
+ import { setupCsvInteractive, setupCsvFromFlags } from './setup-csv.js';
12
+ import { setupDbInteractive, setupDbFromFlags } from './setup-db.js';
13
+ import { createWorkspaceFiles, printSummary } from './generators.js';
14
+ async function startAndSync(workspaceDir, hasJira, hasGit, hasGithub, csv, pgwebPort) {
15
+ const spinnerDb = ora('Starting Docker containers...').start();
16
+ try {
17
+ execSync('docker compose up -d', { cwd: workspaceDir, stdio: 'pipe' });
18
+ spinnerDb.succeed('Database running!');
19
+ }
20
+ catch (err) {
21
+ spinnerDb.fail('Failed to start Docker');
22
+ console.log(chalk.red(` Error: ${getErrorMsg(err)}`));
23
+ console.log(chalk.dim(' Make sure Docker Desktop is running, then:'));
24
+ console.log(chalk.cyan(` cd ${workspaceDir} && docker compose up -d`));
25
+ return;
26
+ }
27
+ const spinnerWait = ora('Waiting for PostgreSQL...').start();
28
+ const MAX_WAIT_SECONDS = 30;
29
+ for (let i = 0; i < MAX_WAIT_SECONDS; i++) {
30
+ try {
31
+ execSync('docker compose exec -T db pg_isready -U argustack', { cwd: workspaceDir, stdio: 'pipe' });
32
+ spinnerWait.succeed('PostgreSQL ready!');
33
+ break;
34
+ }
35
+ catch {
36
+ if (i === MAX_WAIT_SECONDS - 1) {
37
+ spinnerWait.fail('PostgreSQL not ready after 30s');
38
+ console.log(chalk.dim(' Try manually: docker compose logs db'));
39
+ return;
40
+ }
41
+ await new Promise((r) => setTimeout(r, 1000));
42
+ }
43
+ }
44
+ if (hasJira) {
45
+ console.log('');
46
+ try {
47
+ const { syncJiraFromInit } = await import('../sync.js');
48
+ await syncJiraFromInit(workspaceDir);
49
+ }
50
+ catch (err) {
51
+ console.log(chalk.red(` Jira sync failed: ${getErrorMsg(err)}`));
52
+ console.log(chalk.dim(` Try manually: cd ${workspaceDir} && argustack sync jira`));
53
+ }
54
+ }
55
+ if (hasGit) {
56
+ console.log('');
57
+ try {
58
+ const { syncGitFromInit } = await import('../sync.js');
59
+ await syncGitFromInit(workspaceDir);
60
+ }
61
+ catch (err) {
62
+ console.log(chalk.red(` Git sync failed: ${getErrorMsg(err)}`));
63
+ console.log(chalk.dim(` Try manually: cd ${workspaceDir} && argustack sync git`));
64
+ }
65
+ }
66
+ if (hasGithub) {
67
+ console.log('');
68
+ try {
69
+ const { syncGithubFromInit } = await import('../sync.js');
70
+ await syncGithubFromInit(workspaceDir);
71
+ }
72
+ catch (err) {
73
+ console.log(chalk.red(` GitHub sync failed: ${getErrorMsg(err)}`));
74
+ console.log(chalk.dim(` Try manually: cd ${workspaceDir} && argustack sync github`));
75
+ }
76
+ }
77
+ if (csv) {
78
+ console.log('');
79
+ try {
80
+ const { syncCsvFromInit } = await import('../sync.js');
81
+ await syncCsvFromInit(workspaceDir, csv.csvFilePath);
82
+ }
83
+ catch (err) {
84
+ console.log(chalk.red(` CSV import failed: ${getErrorMsg(err)}`));
85
+ console.log(chalk.dim(` Try manually: cd ${workspaceDir} && argustack sync csv`));
86
+ }
87
+ }
88
+ console.log(chalk.dim(' What\'s next:'));
89
+ console.log(` ${chalk.cyan(`http://localhost:${pgwebPort}`)} # browse data in pgweb`);
90
+ console.log('');
91
+ console.log(chalk.dim(' Claude integration:'));
92
+ console.log(` Claude Code: ${chalk.green('Open this folder — MCP tools ready!')}`);
93
+ console.log(` Claude Desktop: ${chalk.cyan('argustack mcp install')}`);
94
+ console.log('');
95
+ }
96
+ async function runInitNonInteractive(flags) {
97
+ console.log(chalk.bold('\n Argustack — non-interactive setup\n'));
98
+ const workspaceDir = resolvePath(flags.dir ?? process.cwd());
99
+ const selectedSources = flags.source
100
+ ? flags.source.split(',').map((s) => s.trim().toLowerCase())
101
+ : [];
102
+ for (const s of selectedSources) {
103
+ if (!ALL_SOURCES.includes(s)) {
104
+ throw new Error(`Unknown source: ${s}. Available: ${ALL_SOURCES.join(', ')}`);
105
+ }
106
+ }
107
+ let jiraResult = null;
108
+ let gitResult = null;
109
+ let githubResult = null;
110
+ let csvResult = null;
111
+ let dbResult = null;
112
+ for (const source of selectedSources) {
113
+ switch (source) {
114
+ case 'jira':
115
+ jiraResult = await setupJiraFromFlags(flags);
116
+ break;
117
+ case 'git':
118
+ gitResult = setupGitFromFlags(flags);
119
+ break;
120
+ case 'github':
121
+ githubResult = setupGithubFromFlags(flags);
122
+ break;
123
+ case 'csv':
124
+ csvResult = setupCsvFromFlags(flags);
125
+ break;
126
+ case 'db':
127
+ dbResult = setupDbFromFlags(flags);
128
+ break;
129
+ }
130
+ }
131
+ const dbPort = parseInt(flags.dbPort ?? String(DEFAULT_DB_PORT), 10);
132
+ const pgwebPort = parseInt(flags.pgwebPort ?? String(DEFAULT_PGWEB_PORT), 10);
133
+ const spinner = ora('Creating workspace...').start();
134
+ try {
135
+ createWorkspaceFiles(workspaceDir, jiraResult, gitResult, githubResult, csvResult, dbResult, dbPort, pgwebPort);
136
+ spinner.succeed('Workspace created!');
137
+ }
138
+ catch (err) {
139
+ spinner.fail('Failed');
140
+ throw err;
141
+ }
142
+ printSummary(workspaceDir, jiraResult, gitResult, githubResult, csvResult, dbResult, pgwebPort, false);
143
+ }
144
+ async function runInitInteractive(flags) {
145
+ console.log('');
146
+ console.log(chalk.bold(' Argustack — workspace setup'));
147
+ console.log(chalk.dim(' Cross-reference Jira + Git + DB to analyze your project.\n'));
148
+ const targetDir = await input({
149
+ message: 'Workspace directory:',
150
+ default: flags.dir ?? process.cwd(),
151
+ validate: (val) => {
152
+ if (!val.trim()) {
153
+ return 'Directory path is required';
154
+ }
155
+ return true;
156
+ },
157
+ });
158
+ const workspaceDir = resolvePath(targetDir);
159
+ if (isWorkspace(workspaceDir)) {
160
+ console.log(chalk.yellow(`\n Already an Argustack workspace: ${workspaceDir}`));
161
+ const proceed = await confirm({ message: 'Reinitialize this workspace?', default: false });
162
+ if (!proceed) {
163
+ console.log(chalk.dim(' Cancelled.'));
164
+ return;
165
+ }
166
+ }
167
+ console.log('');
168
+ const selectedSources = await checkbox({
169
+ message: 'Which sources do you have access to?',
170
+ choices: ALL_SOURCES.map((s) => ({
171
+ value: s,
172
+ name: SOURCE_META[s].label,
173
+ description: SOURCE_META[s].description,
174
+ })),
175
+ });
176
+ if (selectedSources.length === 0) {
177
+ console.log(chalk.yellow('\n No sources selected. You can add them later with:'));
178
+ console.log(chalk.cyan(' argustack source add jira'));
179
+ console.log(chalk.cyan(' argustack source add git'));
180
+ console.log(chalk.cyan(' argustack source add github'));
181
+ console.log(chalk.cyan(' argustack source add db'));
182
+ const continueAnyway = await confirm({
183
+ message: 'Create workspace without sources?',
184
+ default: true,
185
+ });
186
+ if (!continueAnyway) {
187
+ console.log(chalk.dim(' Cancelled.'));
188
+ return;
189
+ }
190
+ }
191
+ let jiraResult = null;
192
+ let gitResult = null;
193
+ let githubResult = null;
194
+ let csvResult = null;
195
+ let dbResult = null;
196
+ for (const source of selectedSources) {
197
+ switch (source) {
198
+ case 'jira':
199
+ jiraResult = await setupJiraInteractive();
200
+ break;
201
+ case 'git':
202
+ gitResult = await setupGitInteractive();
203
+ break;
204
+ case 'github':
205
+ githubResult = await setupGithubInteractive(gitResult?.githubToken, gitResult?.githubRepos);
206
+ break;
207
+ case 'csv':
208
+ csvResult = await setupCsvInteractive();
209
+ break;
210
+ case 'db':
211
+ dbResult = await setupDbInteractive();
212
+ break;
213
+ }
214
+ }
215
+ console.log('');
216
+ console.log(chalk.dim(' Argustack internal database (Docker):'));
217
+ const dbPortStr = await input({
218
+ message: 'PostgreSQL port:', default: flags.dbPort ?? String(DEFAULT_DB_PORT),
219
+ validate: (val) => validatePort(val, 1024),
220
+ });
221
+ const pgwebPortStr = await input({
222
+ message: 'pgweb UI port:', default: flags.pgwebPort ?? String(DEFAULT_PGWEB_PORT),
223
+ validate: (val) => validatePort(val, 1024),
224
+ });
225
+ const dbPort = parseInt(dbPortStr, 10);
226
+ const pgwebPort = parseInt(pgwebPortStr, 10);
227
+ const spinner = ora('Creating workspace...').start();
228
+ try {
229
+ createWorkspaceFiles(workspaceDir, jiraResult, gitResult, githubResult, csvResult, dbResult, dbPort, pgwebPort);
230
+ spinner.succeed('Workspace created!');
231
+ }
232
+ catch (err) {
233
+ spinner.fail('Failed to create workspace');
234
+ console.log(chalk.red(`\n Error: ${getErrorMsg(err)}`));
235
+ return;
236
+ }
237
+ const autoStart = await confirm({
238
+ message: 'Start database and sync now?',
239
+ default: true,
240
+ });
241
+ printSummary(workspaceDir, jiraResult, gitResult, githubResult, csvResult, dbResult, pgwebPort, autoStart);
242
+ if (autoStart) {
243
+ await startAndSync(workspaceDir, jiraResult !== null, gitResult !== null, githubResult !== null, csvResult, pgwebPort);
244
+ }
245
+ }
246
+ export async function runInit(flags = {}) {
247
+ if (flags.interactive === false) {
248
+ await runInitNonInteractive(flags);
249
+ }
250
+ else {
251
+ await runInitInteractive(flags);
252
+ }
253
+ }
254
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/init/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { InitFlags, CsvSetupResult } from './types.js';
2
+ export declare function setupCsvInteractive(): Promise<CsvSetupResult>;
3
+ export declare function setupCsvFromFlags(flags: InitFlags): CsvSetupResult | null;
4
+ //# sourceMappingURL=setup-csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-csv.d.ts","sourceRoot":"","sources":["../../../src/cli/init/setup-csv.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgB5D,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC,CA+BnE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,cAAc,GAAG,IAAI,CAKzE"}
@@ -0,0 +1,52 @@
1
+ import { input } from '@inquirer/prompts';
2
+ import { readdirSync } from 'node:fs';
3
+ import { join, resolve } from 'node:path';
4
+ import chalk from 'chalk';
5
+ import { resolvePath } from './types.js';
6
+ async function promptCsvPath() {
7
+ const raw = await input({
8
+ message: 'Path to Jira CSV file:',
9
+ validate: (val) => {
10
+ if (!val.trim()) {
11
+ return 'CSV file path is required';
12
+ }
13
+ return true;
14
+ },
15
+ });
16
+ return resolvePath(raw);
17
+ }
18
+ export async function setupCsvInteractive() {
19
+ console.log('');
20
+ console.log(chalk.bold(' Jira CSV Import setup'));
21
+ console.log(chalk.dim(' Import issues from a Jira CSV export file.\n'));
22
+ const cwd = process.cwd();
23
+ const csvFiles = readdirSync(cwd).filter((f) => f.toLowerCase().endsWith('.csv'));
24
+ let csvFilePath;
25
+ if (csvFiles.length > 0) {
26
+ const { select } = await import('@inquirer/prompts');
27
+ const MANUAL_ENTRY = '__manual__';
28
+ const selected = await select({
29
+ message: csvFiles.length === 1
30
+ ? `Found CSV file in current directory:`
31
+ : `Found ${csvFiles.length} CSV files in current directory:`,
32
+ choices: [
33
+ ...csvFiles.map((f) => ({ value: join(cwd, f), name: f })),
34
+ { value: MANUAL_ENTRY, name: 'Enter path manually…' },
35
+ ],
36
+ });
37
+ csvFilePath = selected === MANUAL_ENTRY ? await promptCsvPath() : selected;
38
+ }
39
+ else {
40
+ csvFilePath = await promptCsvPath();
41
+ }
42
+ const resolved = resolve(csvFilePath);
43
+ console.log(chalk.green(` CSV file: ${resolved}`));
44
+ return { csvFilePath: resolved };
45
+ }
46
+ export function setupCsvFromFlags(flags) {
47
+ if (!flags.csvFile) {
48
+ throw new Error('CSV requires: --csv-file');
49
+ }
50
+ return { csvFilePath: flags.csvFile };
51
+ }
52
+ //# sourceMappingURL=setup-csv.js.map