argustack 0.1.0
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/LICENSE +21 -0
- package/README.md +433 -0
- package/dist/adapters/csv/index.d.ts +4 -0
- package/dist/adapters/csv/index.d.ts.map +1 -0
- package/dist/adapters/csv/index.js +4 -0
- package/dist/adapters/csv/index.js.map +1 -0
- package/dist/adapters/csv/mapper.d.ts +10 -0
- package/dist/adapters/csv/mapper.d.ts.map +1 -0
- package/dist/adapters/csv/mapper.js +179 -0
- package/dist/adapters/csv/mapper.js.map +1 -0
- package/dist/adapters/csv/parser.d.ts +22 -0
- package/dist/adapters/csv/parser.d.ts.map +1 -0
- package/dist/adapters/csv/parser.js +96 -0
- package/dist/adapters/csv/parser.js.map +1 -0
- package/dist/adapters/csv/provider.d.ts +11 -0
- package/dist/adapters/csv/provider.d.ts.map +1 -0
- package/dist/adapters/csv/provider.js +98 -0
- package/dist/adapters/csv/provider.js.map +1 -0
- package/dist/adapters/git/index.d.ts +3 -0
- package/dist/adapters/git/index.d.ts.map +1 -0
- package/dist/adapters/git/index.js +3 -0
- package/dist/adapters/git/index.js.map +1 -0
- package/dist/adapters/git/mapper.d.ts +11 -0
- package/dist/adapters/git/mapper.d.ts.map +1 -0
- package/dist/adapters/git/mapper.js +47 -0
- package/dist/adapters/git/mapper.js.map +1 -0
- package/dist/adapters/git/provider.d.ts +12 -0
- package/dist/adapters/git/provider.d.ts.map +1 -0
- package/dist/adapters/git/provider.js +115 -0
- package/dist/adapters/git/provider.js.map +1 -0
- package/dist/adapters/github/client.d.ts +8 -0
- package/dist/adapters/github/client.d.ts.map +1 -0
- package/dist/adapters/github/client.js +5 -0
- package/dist/adapters/github/client.js.map +1 -0
- package/dist/adapters/github/index.d.ts +4 -0
- package/dist/adapters/github/index.d.ts.map +1 -0
- package/dist/adapters/github/index.js +4 -0
- package/dist/adapters/github/index.js.map +1 -0
- package/dist/adapters/github/mapper.d.ts +12 -0
- package/dist/adapters/github/mapper.d.ts.map +1 -0
- package/dist/adapters/github/mapper.js +117 -0
- package/dist/adapters/github/mapper.js.map +1 -0
- package/dist/adapters/github/provider.d.ts +18 -0
- package/dist/adapters/github/provider.d.ts.map +1 -0
- package/dist/adapters/github/provider.js +95 -0
- package/dist/adapters/github/provider.js.map +1 -0
- package/dist/adapters/jira/client.d.ts +11 -0
- package/dist/adapters/jira/client.d.ts.map +1 -0
- package/dist/adapters/jira/client.js +16 -0
- package/dist/adapters/jira/client.js.map +1 -0
- package/dist/adapters/jira/index.d.ts +3 -0
- package/dist/adapters/jira/index.d.ts.map +1 -0
- package/dist/adapters/jira/index.js +3 -0
- package/dist/adapters/jira/index.js.map +1 -0
- package/dist/adapters/jira/mapper.d.ts +14 -0
- package/dist/adapters/jira/mapper.d.ts.map +1 -0
- package/dist/adapters/jira/mapper.js +169 -0
- package/dist/adapters/jira/mapper.js.map +1 -0
- package/dist/adapters/jira/provider.d.ts +21 -0
- package/dist/adapters/jira/provider.d.ts.map +1 -0
- package/dist/adapters/jira/provider.js +79 -0
- package/dist/adapters/jira/provider.js.map +1 -0
- package/dist/adapters/openai/embedding-provider.d.ts +16 -0
- package/dist/adapters/openai/embedding-provider.d.ts.map +1 -0
- package/dist/adapters/openai/embedding-provider.js +34 -0
- package/dist/adapters/openai/embedding-provider.js.map +1 -0
- package/dist/adapters/openai/index.d.ts +2 -0
- package/dist/adapters/openai/index.d.ts.map +1 -0
- package/dist/adapters/openai/index.js +2 -0
- package/dist/adapters/openai/index.js.map +1 -0
- package/dist/adapters/postgres/connection.d.ts +13 -0
- package/dist/adapters/postgres/connection.d.ts.map +1 -0
- package/dist/adapters/postgres/connection.js +16 -0
- package/dist/adapters/postgres/connection.js.map +1 -0
- package/dist/adapters/postgres/index.d.ts +3 -0
- package/dist/adapters/postgres/index.d.ts.map +1 -0
- package/dist/adapters/postgres/index.js +3 -0
- package/dist/adapters/postgres/index.js.map +1 -0
- package/dist/adapters/postgres/schema.d.ts +6 -0
- package/dist/adapters/postgres/schema.d.ts.map +1 -0
- package/dist/adapters/postgres/schema.js +246 -0
- package/dist/adapters/postgres/schema.js.map +1 -0
- package/dist/adapters/postgres/storage.d.ts +32 -0
- package/dist/adapters/postgres/storage.d.ts.map +1 -0
- package/dist/adapters/postgres/storage.js +322 -0
- package/dist/adapters/postgres/storage.js.map +1 -0
- package/dist/cli/embed.d.ts +3 -0
- package/dist/cli/embed.d.ts.map +1 -0
- package/dist/cli/embed.js +52 -0
- package/dist/cli/embed.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +64 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +24 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +966 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/jira.d.ts +3 -0
- package/dist/cli/jira.d.ts.map +1 -0
- package/dist/cli/jira.js +78 -0
- package/dist/cli/jira.js.map +1 -0
- package/dist/cli/mcp-install.d.ts +10 -0
- package/dist/cli/mcp-install.d.ts.map +1 -0
- package/dist/cli/mcp-install.js +207 -0
- package/dist/cli/mcp-install.js.map +1 -0
- package/dist/cli/sources.d.ts +10 -0
- package/dist/cli/sources.d.ts.map +1 -0
- package/dist/cli/sources.js +132 -0
- package/dist/cli/sources.js.map +1 -0
- package/dist/cli/status.d.ts +6 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +93 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/sync.d.ts +21 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +321 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/core/ports/embedding-provider.d.ts +15 -0
- package/dist/core/ports/embedding-provider.d.ts.map +1 -0
- package/dist/core/ports/embedding-provider.js +2 -0
- package/dist/core/ports/embedding-provider.js.map +1 -0
- package/dist/core/ports/git-provider.d.ts +30 -0
- package/dist/core/ports/git-provider.d.ts.map +1 -0
- package/dist/core/ports/git-provider.js +2 -0
- package/dist/core/ports/git-provider.js.map +1 -0
- package/dist/core/ports/github-provider.d.ts +30 -0
- package/dist/core/ports/github-provider.d.ts.map +1 -0
- package/dist/core/ports/github-provider.js +2 -0
- package/dist/core/ports/github-provider.js.map +1 -0
- package/dist/core/ports/index.d.ts +6 -0
- package/dist/core/ports/index.d.ts.map +1 -0
- package/dist/core/ports/index.js +2 -0
- package/dist/core/ports/index.js.map +1 -0
- package/dist/core/ports/source-provider.d.ts +27 -0
- package/dist/core/ports/source-provider.d.ts.map +1 -0
- package/dist/core/ports/source-provider.js +2 -0
- package/dist/core/ports/source-provider.js.map +1 -0
- package/dist/core/ports/storage.d.ts +47 -0
- package/dist/core/ports/storage.d.ts.map +1 -0
- package/dist/core/ports/storage.js +2 -0
- package/dist/core/ports/storage.js.map +1 -0
- package/dist/core/types/config.d.ts +26 -0
- package/dist/core/types/config.d.ts.map +1 -0
- package/dist/core/types/config.js +41 -0
- package/dist/core/types/config.js.map +1 -0
- package/dist/core/types/git.d.ts +35 -0
- package/dist/core/types/git.d.ts.map +1 -0
- package/dist/core/types/git.js +6 -0
- package/dist/core/types/git.js.map +1 -0
- package/dist/core/types/github.d.ts +75 -0
- package/dist/core/types/github.d.ts.map +1 -0
- package/dist/core/types/github.js +2 -0
- package/dist/core/types/github.js.map +1 -0
- package/dist/core/types/index.d.ts +7 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +2 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/types/issue.d.ts +74 -0
- package/dist/core/types/issue.d.ts.map +1 -0
- package/dist/core/types/issue.js +7 -0
- package/dist/core/types/issue.js.map +1 -0
- package/dist/core/types/project.d.ts +9 -0
- package/dist/core/types/project.d.ts.map +1 -0
- package/dist/core/types/project.js +5 -0
- package/dist/core/types/project.js.map +1 -0
- package/dist/db/connection.d.ts +2 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +4 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/import.d.ts +2 -0
- package/dist/db/import.d.ts.map +1 -0
- package/dist/db/import.js +4 -0
- package/dist/db/import.js.map +1 -0
- package/dist/db/schema.d.ts +2 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +4 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/jira/client.d.ts +2 -0
- package/dist/jira/client.d.ts.map +1 -0
- package/dist/jira/client.js +4 -0
- package/dist/jira/client.js.map +1 -0
- package/dist/jira/pull.d.ts +2 -0
- package/dist/jira/pull.d.ts.map +1 -0
- package/dist/jira/pull.js +5 -0
- package/dist/jira/pull.js.map +1 -0
- package/dist/mcp/server.d.ts +16 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +1463 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/use-cases/embed.d.ts +23 -0
- package/dist/use-cases/embed.d.ts.map +1 -0
- package/dist/use-cases/embed.js +63 -0
- package/dist/use-cases/embed.js.map +1 -0
- package/dist/use-cases/pull-git.d.ts +25 -0
- package/dist/use-cases/pull-git.d.ts.map +1 -0
- package/dist/use-cases/pull-git.js +59 -0
- package/dist/use-cases/pull-git.js.map +1 -0
- package/dist/use-cases/pull-github.d.ts +28 -0
- package/dist/use-cases/pull-github.d.ts.map +1 -0
- package/dist/use-cases/pull-github.js +67 -0
- package/dist/use-cases/pull-github.js.map +1 -0
- package/dist/use-cases/pull.d.ts +32 -0
- package/dist/use-cases/pull.d.ts.map +1 -0
- package/dist/use-cases/pull.js +82 -0
- package/dist/use-cases/pull.js.map +1 -0
- package/dist/workspace/config.d.ts +36 -0
- package/dist/workspace/config.d.ts.map +1 -0
- package/dist/workspace/config.js +91 -0
- package/dist/workspace/config.js.map +1 -0
- package/dist/workspace/resolver.d.ts +19 -0
- package/dist/workspace/resolver.d.ts.map +1 -0
- package/dist/workspace/resolver.js +47 -0
- package/dist/workspace/resolver.js.map +1 -0
- package/package.json +71 -0
- package/templates/docker-compose.yml +26 -0
- package/templates/env.example +14 -0
- package/templates/gitignore +6 -0
- package/templates/init.sql +236 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import dotenv from 'dotenv';
|
|
3
|
+
import { requireWorkspace } from '../workspace/resolver.js';
|
|
4
|
+
import { readConfig, getEnabledSources } from '../workspace/config.js';
|
|
5
|
+
import { ALL_SOURCES, SOURCE_META } from '../core/types/index.js';
|
|
6
|
+
import { PostgresStorage } from '../adapters/postgres/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Register `argustack status` command — workspace overview.
|
|
9
|
+
*/
|
|
10
|
+
export function registerStatusCommand(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('status')
|
|
13
|
+
.description('Show workspace overview: sources, last sync, issue counts')
|
|
14
|
+
.action(async () => {
|
|
15
|
+
try {
|
|
16
|
+
const workspaceRoot = requireWorkspace();
|
|
17
|
+
const config = readConfig(workspaceRoot);
|
|
18
|
+
if (!config) {
|
|
19
|
+
console.log(chalk.red('\n No config found. Run: argustack init'));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const enabled = getEnabledSources(config);
|
|
23
|
+
console.log('');
|
|
24
|
+
console.log(chalk.bold(' Argustack Workspace'));
|
|
25
|
+
console.log('');
|
|
26
|
+
console.log(chalk.bold(' Sources:'));
|
|
27
|
+
// Try to get issue counts from DB if available
|
|
28
|
+
const issueCounts = new Map();
|
|
29
|
+
let storageAvailable = false;
|
|
30
|
+
if (enabled.length > 0) {
|
|
31
|
+
try {
|
|
32
|
+
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
33
|
+
const storage = new PostgresStorage({
|
|
34
|
+
host: process.env['DB_HOST'] ?? 'localhost',
|
|
35
|
+
port: parseInt(process.env['DB_PORT'] ?? '5434', 10),
|
|
36
|
+
user: process.env['DB_USER'] ?? 'argustack',
|
|
37
|
+
password: process.env['DB_PASSWORD'] ?? 'argustack_local',
|
|
38
|
+
database: process.env['DB_NAME'] ?? 'argustack',
|
|
39
|
+
});
|
|
40
|
+
try {
|
|
41
|
+
const result = await storage.query(`SELECT 'jira' as source, COUNT(*)::text as cnt FROM issues`, []);
|
|
42
|
+
for (const row of result.rows) {
|
|
43
|
+
const typed = row;
|
|
44
|
+
issueCounts.set(typed.source, parseInt(typed.cnt, 10));
|
|
45
|
+
}
|
|
46
|
+
storageAvailable = true;
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
await storage.close();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// DB not available — skip counts
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
for (const source of ALL_SOURCES) {
|
|
57
|
+
const meta = SOURCE_META[source];
|
|
58
|
+
const cfg = config.sources[source];
|
|
59
|
+
const isEnabled = cfg?.enabled === true;
|
|
60
|
+
if (isEnabled) {
|
|
61
|
+
const count = issueCounts.get(source);
|
|
62
|
+
const countStr = count !== undefined
|
|
63
|
+
? chalk.dim(` ${String(count)} issues`)
|
|
64
|
+
: '';
|
|
65
|
+
console.log(` ${chalk.green('✓')} ${chalk.bold(meta.label)}${countStr}`);
|
|
66
|
+
}
|
|
67
|
+
else if (cfg?.disabledAt) {
|
|
68
|
+
console.log(` ${chalk.yellow('⏸')} ${chalk.dim(meta.label)} — disabled`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.log(` ${chalk.dim('○')} ${chalk.dim(meta.label)} — not configured`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
console.log('');
|
|
75
|
+
if (storageAvailable) {
|
|
76
|
+
console.log(` ${chalk.bold('Storage:')} PostgreSQL`);
|
|
77
|
+
}
|
|
78
|
+
else if (enabled.length > 0) {
|
|
79
|
+
console.log(` ${chalk.bold('Storage:')} ${chalk.yellow('not connected')}`);
|
|
80
|
+
}
|
|
81
|
+
console.log('');
|
|
82
|
+
if (enabled.length === 0) {
|
|
83
|
+
console.log(chalk.dim(' Get started: argustack source add jira'));
|
|
84
|
+
console.log('');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error(chalk.red(`\n Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAOhE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;YAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAE1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAEtC,+CAA+C;YAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;YAC9C,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAE7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,aAAa,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC9D,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;wBAClC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;wBAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;wBACpD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;wBAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,iBAAiB;wBACzD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,WAAW;qBAChD,CAAC,CAAC;oBAEH,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAChC,4DAA4D,EAC5D,EAAE,CACH,CAAC;wBACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;4BAC9B,MAAM,KAAK,GAAG,GAA+B,CAAC;4BAC9C,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;wBACzD,CAAC;wBACD,gBAAgB,GAAG,IAAI,CAAC;oBAC1B,CAAC;4BAAS,CAAC;wBACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;YACH,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACjC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;gBAExC,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtC,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS;wBAClC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;wBACxC,CAAC,CAAC,EAAE,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;gBAC9E,CAAC;qBAAM,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC9E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAC9E,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Called from `argustack init` to run first sync immediately after workspace creation.
|
|
4
|
+
* Always passes epoch date to force a full pull — Docker volume may contain stale data
|
|
5
|
+
* from a previous workspace, making incremental pull return 0 results.
|
|
6
|
+
*/
|
|
7
|
+
export declare function syncJiraFromInit(workspaceRoot: string): Promise<void>;
|
|
8
|
+
export declare function syncGitFromInit(workspaceRoot: string): Promise<void>;
|
|
9
|
+
export declare function syncGithubFromInit(workspaceRoot: string): Promise<void>;
|
|
10
|
+
export declare function syncCsvFromInit(workspaceRoot: string, filePath?: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Register `argustack sync [type]` command.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* argustack sync — sync all enabled sources
|
|
16
|
+
* argustack sync jira — sync Jira only
|
|
17
|
+
* argustack sync jira -p KEY — sync specific project
|
|
18
|
+
* argustack sync jira --since 2024-01-01
|
|
19
|
+
*/
|
|
20
|
+
export declare function registerSyncCommand(program: Command): void;
|
|
21
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4RzC;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E;AAED,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7E;AAED,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmF1D"}
|
package/dist/cli/sync.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import dotenv from 'dotenv';
|
|
4
|
+
import { requireWorkspace } from '../workspace/resolver.js';
|
|
5
|
+
import { readConfig, getEnabledSources } from '../workspace/config.js';
|
|
6
|
+
import { JiraProvider } from '../adapters/jira/index.js';
|
|
7
|
+
import { GitProvider } from '../adapters/git/index.js';
|
|
8
|
+
import { CsvProvider } from '../adapters/csv/index.js';
|
|
9
|
+
import { PostgresStorage } from '../adapters/postgres/index.js';
|
|
10
|
+
import { PullUseCase } from '../use-cases/pull.js';
|
|
11
|
+
import { PullGitUseCase } from '../use-cases/pull-git.js';
|
|
12
|
+
import { GitHubProvider } from '../adapters/github/index.js';
|
|
13
|
+
import { PullGitHubUseCase } from '../use-cases/pull-github.js';
|
|
14
|
+
import { ALL_SOURCES, SOURCE_META } from '../core/types/index.js';
|
|
15
|
+
/**
|
|
16
|
+
* Create PostgresStorage from workspace .env.
|
|
17
|
+
*/
|
|
18
|
+
function createStorage(workspaceRoot) {
|
|
19
|
+
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
20
|
+
return new PostgresStorage({
|
|
21
|
+
host: process.env['DB_HOST'] ?? 'localhost',
|
|
22
|
+
port: parseInt(process.env['DB_PORT'] ?? '5434', 10),
|
|
23
|
+
user: process.env['DB_USER'] ?? 'argustack',
|
|
24
|
+
password: process.env['DB_PASSWORD'] ?? 'argustack_local',
|
|
25
|
+
database: process.env['DB_NAME'] ?? 'argustack',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sync Jira data → PostgreSQL.
|
|
30
|
+
*/
|
|
31
|
+
async function syncJira(workspaceRoot, options) {
|
|
32
|
+
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
33
|
+
const jiraUrl = process.env['JIRA_URL'];
|
|
34
|
+
const jiraEmail = process.env['JIRA_EMAIL'];
|
|
35
|
+
const jiraToken = process.env['JIRA_API_TOKEN'];
|
|
36
|
+
if (!jiraUrl || !jiraEmail || !jiraToken) {
|
|
37
|
+
console.log(chalk.red(' Missing Jira credentials in .env'));
|
|
38
|
+
console.log(chalk.dim(' Required: JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN'));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const configuredProjects = (process.env['JIRA_PROJECTS'] ?? '')
|
|
42
|
+
.split(',')
|
|
43
|
+
.map((p) => p.trim())
|
|
44
|
+
.filter(Boolean);
|
|
45
|
+
const source = new JiraProvider({
|
|
46
|
+
host: jiraUrl,
|
|
47
|
+
email: jiraEmail,
|
|
48
|
+
apiToken: jiraToken,
|
|
49
|
+
});
|
|
50
|
+
const storage = createStorage(workspaceRoot);
|
|
51
|
+
const spinner = ora('Syncing Jira...').start();
|
|
52
|
+
try {
|
|
53
|
+
const projectKeys = options.project
|
|
54
|
+
? [options.project]
|
|
55
|
+
: configuredProjects.length > 0
|
|
56
|
+
? configuredProjects
|
|
57
|
+
: null;
|
|
58
|
+
if (projectKeys) {
|
|
59
|
+
const allResults = [];
|
|
60
|
+
for (const projectKey of projectKeys) {
|
|
61
|
+
const pullUseCase = new PullUseCase(source, storage);
|
|
62
|
+
const results = await pullUseCase.execute({
|
|
63
|
+
projectKey,
|
|
64
|
+
...(options.since ? { since: options.since } : {}),
|
|
65
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
66
|
+
});
|
|
67
|
+
allResults.push(...results);
|
|
68
|
+
}
|
|
69
|
+
spinner.succeed('Jira sync complete!');
|
|
70
|
+
console.log('');
|
|
71
|
+
for (const r of allResults) {
|
|
72
|
+
console.log(chalk.green(` ${r.projectKey}: ${String(r.issuesCount)} issues, ${String(r.commentsCount)} comments, ${String(r.changelogsCount)} changelogs`));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const pullUseCase = new PullUseCase(source, storage);
|
|
77
|
+
const results = await pullUseCase.execute({
|
|
78
|
+
...(options.since ? { since: options.since } : {}),
|
|
79
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
80
|
+
});
|
|
81
|
+
spinner.succeed('Jira sync complete!');
|
|
82
|
+
console.log('');
|
|
83
|
+
for (const r of results) {
|
|
84
|
+
console.log(chalk.green(` ${r.projectKey}: ${String(r.issuesCount)} issues, ${String(r.commentsCount)} comments, ${String(r.changelogsCount)} changelogs`));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
console.log('');
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
await storage.close();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Sync Git data → PostgreSQL.
|
|
95
|
+
* Supports multiple repos via GIT_REPO_PATHS (comma-separated).
|
|
96
|
+
* Falls back to GIT_REPO_PATH for backwards compatibility.
|
|
97
|
+
*/
|
|
98
|
+
async function syncGit(workspaceRoot, options) {
|
|
99
|
+
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
100
|
+
const rawPaths = process.env['GIT_REPO_PATHS'] ?? process.env['GIT_REPO_PATH'];
|
|
101
|
+
if (!rawPaths) {
|
|
102
|
+
console.log(chalk.red(' Missing Git repo paths in .env'));
|
|
103
|
+
console.log(chalk.dim(' Required: GIT_REPO_PATHS'));
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const repoPaths = rawPaths.split(',').map((p) => p.trim()).filter(Boolean);
|
|
107
|
+
if (repoPaths.length === 0) {
|
|
108
|
+
console.log(chalk.red(' No Git repo paths configured in .env'));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
const storage = createStorage(workspaceRoot);
|
|
112
|
+
const spinner = ora('Syncing Git...').start();
|
|
113
|
+
try {
|
|
114
|
+
const since = options.since ? new Date(options.since) : undefined;
|
|
115
|
+
for (const repoPath of repoPaths) {
|
|
116
|
+
const repoName = repoPath.split('/').pop() ?? repoPath;
|
|
117
|
+
spinner.text = `Syncing Git: ${repoName}...`;
|
|
118
|
+
try {
|
|
119
|
+
const git = new GitProvider(repoPath);
|
|
120
|
+
const pullGit = new PullGitUseCase(git, storage);
|
|
121
|
+
const result = await pullGit.execute(repoPath, {
|
|
122
|
+
...(since ? { since } : {}),
|
|
123
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
124
|
+
});
|
|
125
|
+
console.log(chalk.green(` ✓ ${repoName}: ${String(result.commitsCount)} commits, ${String(result.filesCount)} files, ${String(result.issueRefsCount)} issue refs`));
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
console.log(chalk.red(` ✗ ${repoName}: ${err instanceof Error ? err.message : String(err)}`));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
spinner.succeed('Git sync complete!');
|
|
132
|
+
console.log('');
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
await storage.close();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Sync GitHub data → PostgreSQL.
|
|
140
|
+
*/
|
|
141
|
+
async function syncGithub(workspaceRoot, options) {
|
|
142
|
+
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
143
|
+
const githubToken = process.env['GITHUB_TOKEN'];
|
|
144
|
+
const githubOwner = process.env['GITHUB_OWNER'];
|
|
145
|
+
const githubRepo = process.env['GITHUB_REPO'];
|
|
146
|
+
if (!githubToken || !githubOwner || !githubRepo) {
|
|
147
|
+
console.log(chalk.red(' Missing GitHub credentials in .env'));
|
|
148
|
+
console.log(chalk.dim(' Required: GITHUB_TOKEN, GITHUB_OWNER, GITHUB_REPO'));
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
const github = new GitHubProvider({
|
|
152
|
+
token: githubToken,
|
|
153
|
+
owner: githubOwner,
|
|
154
|
+
repo: githubRepo,
|
|
155
|
+
});
|
|
156
|
+
const storage = createStorage(workspaceRoot);
|
|
157
|
+
const spinner = ora('Syncing GitHub PRs...').start();
|
|
158
|
+
try {
|
|
159
|
+
const pullGithub = new PullGitHubUseCase(github, storage);
|
|
160
|
+
const repoFullName = `${githubOwner}/${githubRepo}`;
|
|
161
|
+
const since = options.since ? new Date(options.since) : undefined;
|
|
162
|
+
const result = await pullGithub.execute(repoFullName, {
|
|
163
|
+
...(since ? { since } : {}),
|
|
164
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
165
|
+
});
|
|
166
|
+
spinner.succeed('GitHub sync complete!');
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log(chalk.green(` ${result.prsCount} PRs, ${result.reviewsCount} reviews, ${result.releasesCount} releases`));
|
|
169
|
+
console.log('');
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
await storage.close();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Sync Jira CSV file → PostgreSQL.
|
|
177
|
+
*/
|
|
178
|
+
async function syncCsv(workspaceRoot, options) {
|
|
179
|
+
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
180
|
+
const csvFilePath = options.file ?? process.env['CSV_FILE_PATH'];
|
|
181
|
+
if (!csvFilePath) {
|
|
182
|
+
console.log(chalk.red(' Missing CSV file path'));
|
|
183
|
+
console.log(chalk.dim(' Use --file <path> or set CSV_FILE_PATH in .env'));
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
const source = new CsvProvider(csvFilePath);
|
|
187
|
+
const storage = createStorage(workspaceRoot);
|
|
188
|
+
const spinner = ora('Importing Jira CSV...').start();
|
|
189
|
+
try {
|
|
190
|
+
const projects = await source.getProjects();
|
|
191
|
+
const projectKeys = options.project
|
|
192
|
+
? [options.project]
|
|
193
|
+
: projects.map((p) => p.key);
|
|
194
|
+
const allResults = [];
|
|
195
|
+
for (const projectKey of projectKeys) {
|
|
196
|
+
const pullUseCase = new PullUseCase(source, storage);
|
|
197
|
+
const results = await pullUseCase.execute({
|
|
198
|
+
projectKey,
|
|
199
|
+
...(options.since ? { since: options.since } : {}),
|
|
200
|
+
onProgress: (msg) => { spinner.text = msg; },
|
|
201
|
+
});
|
|
202
|
+
allResults.push(...results);
|
|
203
|
+
}
|
|
204
|
+
spinner.succeed('CSV import complete!');
|
|
205
|
+
console.log('');
|
|
206
|
+
for (const r of allResults) {
|
|
207
|
+
console.log(chalk.green(` ${r.projectKey}: ${String(r.issuesCount)} issues, ${String(r.commentsCount)} comments, ${String(r.changelogsCount)} changelogs`));
|
|
208
|
+
}
|
|
209
|
+
console.log('');
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
await storage.close();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Called from `argustack init` to run first sync immediately after workspace creation.
|
|
217
|
+
* Always passes epoch date to force a full pull — Docker volume may contain stale data
|
|
218
|
+
* from a previous workspace, making incremental pull return 0 results.
|
|
219
|
+
*/
|
|
220
|
+
export async function syncJiraFromInit(workspaceRoot) {
|
|
221
|
+
await syncJira(workspaceRoot, { since: '1970-01-01' });
|
|
222
|
+
}
|
|
223
|
+
export async function syncGitFromInit(workspaceRoot) {
|
|
224
|
+
await syncGit(workspaceRoot, { since: '1970-01-01' });
|
|
225
|
+
}
|
|
226
|
+
export async function syncGithubFromInit(workspaceRoot) {
|
|
227
|
+
await syncGithub(workspaceRoot, { since: '1970-01-01' });
|
|
228
|
+
}
|
|
229
|
+
export async function syncCsvFromInit(workspaceRoot, filePath) {
|
|
230
|
+
await syncCsv(workspaceRoot, { since: '1970-01-01', ...(filePath ? { file: filePath } : {}) });
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Register `argustack sync [type]` command.
|
|
234
|
+
*
|
|
235
|
+
* Usage:
|
|
236
|
+
* argustack sync — sync all enabled sources
|
|
237
|
+
* argustack sync jira — sync Jira only
|
|
238
|
+
* argustack sync jira -p KEY — sync specific project
|
|
239
|
+
* argustack sync jira --since 2024-01-01
|
|
240
|
+
*/
|
|
241
|
+
export function registerSyncCommand(program) {
|
|
242
|
+
program
|
|
243
|
+
.command('sync [type]')
|
|
244
|
+
.description('Sync data from sources (all enabled or specific)')
|
|
245
|
+
.option('-p, --project <key>', 'Sync specific project only')
|
|
246
|
+
.option('--since <date>', 'Sync issues updated since date (YYYY-MM-DD)')
|
|
247
|
+
.option('-f, --file <path>', 'CSV file path (for csv source)')
|
|
248
|
+
.action(async (type, options) => {
|
|
249
|
+
try {
|
|
250
|
+
const workspaceRoot = requireWorkspace();
|
|
251
|
+
const config = readConfig(workspaceRoot);
|
|
252
|
+
if (!config) {
|
|
253
|
+
console.log(chalk.red('\n No config found. Run: argustack init'));
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
// Determine which sources to sync
|
|
257
|
+
let sourcesToSync;
|
|
258
|
+
if (type) {
|
|
259
|
+
const source = type.toLowerCase();
|
|
260
|
+
if (!ALL_SOURCES.includes(source)) {
|
|
261
|
+
console.log(chalk.red(`\n Unknown source: ${type}`));
|
|
262
|
+
console.log(chalk.dim(` Available: ${ALL_SOURCES.join(', ')}`));
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
if (!config.sources[source]?.enabled) {
|
|
266
|
+
console.log(chalk.red(`\n ${SOURCE_META[source].label} is not enabled.`));
|
|
267
|
+
console.log(chalk.dim(` Enable it: ${chalk.cyan(`argustack source add ${source}`)}`));
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
sourcesToSync = [source];
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
sourcesToSync = getEnabledSources(config);
|
|
274
|
+
if (sourcesToSync.length === 0) {
|
|
275
|
+
console.log(chalk.yellow('\n No sources enabled.'));
|
|
276
|
+
console.log(chalk.dim(` Add one: ${chalk.cyan('argustack source add jira')}`));
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
console.log('');
|
|
281
|
+
// Migration hint: GitHub token exists but 'github' source not enabled
|
|
282
|
+
dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
|
|
283
|
+
const githubToken = process.env['GITHUB_TOKEN'];
|
|
284
|
+
const githubEnabled = config.sources.github?.enabled;
|
|
285
|
+
if (githubToken && !githubEnabled && !type) {
|
|
286
|
+
console.log(chalk.yellow(' ⚠ GitHub token found in .env but "github" source is not enabled.'));
|
|
287
|
+
console.log(chalk.dim(` Enable: ${chalk.cyan('argustack source add github')}\n`));
|
|
288
|
+
}
|
|
289
|
+
// Sync each source in order
|
|
290
|
+
for (const source of sourcesToSync) {
|
|
291
|
+
switch (source) {
|
|
292
|
+
case 'jira': {
|
|
293
|
+
await syncJira(workspaceRoot, options);
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
case 'git': {
|
|
297
|
+
await syncGit(workspaceRoot, options);
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
case 'github': {
|
|
301
|
+
await syncGithub(workspaceRoot, options);
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
case 'csv': {
|
|
305
|
+
await syncCsv(workspaceRoot, options);
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
case 'db': {
|
|
309
|
+
console.log(chalk.dim(` ○ Database sync — coming soon`));
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
console.error(chalk.red(`\n Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
317
|
+
process.exit(1);
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port: Embedding Provider — generates vector embeddings from text.
|
|
3
|
+
*
|
|
4
|
+
* @throws Error when API is unreachable or rate-limited
|
|
5
|
+
*/
|
|
6
|
+
export interface IEmbeddingProvider {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly dimensions: number;
|
|
9
|
+
/**
|
|
10
|
+
* Generate embeddings for a batch of texts.
|
|
11
|
+
* Returns vectors in the same order as input texts.
|
|
12
|
+
*/
|
|
13
|
+
embed(texts: string[]): Promise<number[][]>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=embedding-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/core/ports/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../../src/core/ports/embedding-provider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CommitBatch, GitRef } from '../types/git.js';
|
|
2
|
+
/**
|
|
3
|
+
* Port: Git Provider — reads commits, branches, tags from a Git repository.
|
|
4
|
+
*
|
|
5
|
+
* Implementations: GitProvider (es-git), (future) GitHubApiProvider, etc.
|
|
6
|
+
* Core doesn't know about es-git or any specific library.
|
|
7
|
+
*
|
|
8
|
+
* @throws Error if repository path is invalid or not a git repo
|
|
9
|
+
*/
|
|
10
|
+
export interface IGitProvider {
|
|
11
|
+
/** Human-readable name (e.g. "Git (local)") */
|
|
12
|
+
readonly name: string;
|
|
13
|
+
/**
|
|
14
|
+
* Pull commits from the repository.
|
|
15
|
+
* Yields batches for memory efficiency — large repos can have 100k+ commits.
|
|
16
|
+
*
|
|
17
|
+
* @param since - Only commits after this date (incremental pull)
|
|
18
|
+
*/
|
|
19
|
+
pullCommits(since?: Date): AsyncGenerator<CommitBatch>;
|
|
20
|
+
/** List all branches */
|
|
21
|
+
getBranches(): Promise<GitRef[]>;
|
|
22
|
+
/** List all tags */
|
|
23
|
+
getTags(): Promise<GitRef[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Get total commit count for progress reporting.
|
|
26
|
+
* Optional — providers that don't support this simply won't show percentages.
|
|
27
|
+
*/
|
|
28
|
+
getCommitCount?(since?: Date): Promise<number>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=git-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-provider.d.ts","sourceRoot":"","sources":["../../../src/core/ports/git-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAEvD,wBAAwB;IACxB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjC,oBAAoB;IACpB,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7B;;;OAGG;IACH,cAAc,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAChD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-provider.js","sourceRoot":"","sources":["../../../src/core/ports/git-provider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { GitHubBatch } from '../types/github.js';
|
|
2
|
+
import type { Release } from '../types/github.js';
|
|
3
|
+
/**
|
|
4
|
+
* Port: GitHub Provider — pulls PRs, reviews, and releases from a GitHub repository.
|
|
5
|
+
*
|
|
6
|
+
* Implementations: GitHubProvider (Octokit).
|
|
7
|
+
* Core doesn't know about Octokit or any specific library.
|
|
8
|
+
*
|
|
9
|
+
* @throws Error if authentication fails or repository is not accessible
|
|
10
|
+
*/
|
|
11
|
+
export interface IGitHubProvider {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
/**
|
|
14
|
+
* Pull pull requests with reviews, comments, files, and issue refs.
|
|
15
|
+
* Yields batches for memory efficiency.
|
|
16
|
+
*
|
|
17
|
+
* @param since - Only PRs updated after this date (incremental pull)
|
|
18
|
+
*/
|
|
19
|
+
pullPullRequests(since?: Date): AsyncGenerator<GitHubBatch>;
|
|
20
|
+
/**
|
|
21
|
+
* Pull releases from the repository.
|
|
22
|
+
*/
|
|
23
|
+
pullReleases(): Promise<Release[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Get total PR count for progress reporting.
|
|
26
|
+
* Optional — providers that don't support this simply won't show percentages.
|
|
27
|
+
*/
|
|
28
|
+
getPrCount?(since?: Date): Promise<number>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=github-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-provider.d.ts","sourceRoot":"","sources":["../../../src/core/ports/github-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE5D;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEnC;;;OAGG;IACH,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-provider.js","sourceRoot":"","sources":["../../../src/core/ports/github-provider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { ISourceProvider } from './source-provider.js';
|
|
2
|
+
export type { IGitProvider } from './git-provider.js';
|
|
3
|
+
export type { IGitHubProvider } from './github-provider.js';
|
|
4
|
+
export type { IStorage, QueryResult } from './storage.js';
|
|
5
|
+
export type { IEmbeddingProvider } from './embedding-provider.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/ports/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/ports/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IssueBatch, Project } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Port: Source Provider — where we pull data FROM.
|
|
4
|
+
*
|
|
5
|
+
* Implementations: JiraProvider, (future) GitHubProvider, GitLabProvider, etc.
|
|
6
|
+
* Core doesn't know about Jira or any specific API.
|
|
7
|
+
*/
|
|
8
|
+
export interface ISourceProvider {
|
|
9
|
+
/** Human-readable name of the source (e.g. "Jira", "GitHub") */
|
|
10
|
+
readonly name: string;
|
|
11
|
+
/** Test connection and return available projects */
|
|
12
|
+
getProjects(): Promise<Project[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Pull all issues for a project.
|
|
15
|
+
* Yields batches (pages) for memory efficiency — don't load 100k issues at once.
|
|
16
|
+
*
|
|
17
|
+
* @param projectKey - Project identifier
|
|
18
|
+
* @param since - Only issues updated after this date (incremental pull)
|
|
19
|
+
*/
|
|
20
|
+
pullIssues(projectKey: string, since?: string): AsyncGenerator<IssueBatch>;
|
|
21
|
+
/**
|
|
22
|
+
* Get total issue count for progress reporting.
|
|
23
|
+
* Optional — providers that don't support this simply won't show percentages.
|
|
24
|
+
*/
|
|
25
|
+
getIssueCount?(projectKey: string, since?: string): Promise<number>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=source-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-provider.d.ts","sourceRoot":"","sources":["../../../src/core/ports/source-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,oDAAoD;IACpD,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAElC;;;;;;OAMG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3E;;;OAGG;IACH,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-provider.js","sourceRoot":"","sources":["../../../src/core/ports/source-provider.ts"],"names":[],"mappings":""}
|