argustack 0.1.19 → 0.1.20
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/dist/adapters/jira/provider.d.ts +3 -1
- package/dist/adapters/jira/provider.d.ts.map +1 -1
- package/dist/adapters/jira/provider.js +16 -9
- package/dist/adapters/jira/provider.js.map +1 -1
- package/dist/adapters/jira-proxy/client.d.ts +11 -0
- package/dist/adapters/jira-proxy/client.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/client.js +87 -0
- package/dist/adapters/jira-proxy/client.js.map +1 -0
- package/dist/adapters/jira-proxy/config-loader.d.ts +5 -0
- package/dist/adapters/jira-proxy/config-loader.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/config-loader.js +133 -0
- package/dist/adapters/jira-proxy/config-loader.js.map +1 -0
- package/dist/adapters/jira-proxy/index.d.ts +5 -0
- package/dist/adapters/jira-proxy/index.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/index.js +5 -0
- package/dist/adapters/jira-proxy/index.js.map +1 -0
- package/dist/adapters/jira-proxy/mapper.d.ts +5 -0
- package/dist/adapters/jira-proxy/mapper.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/mapper.js +115 -0
- package/dist/adapters/jira-proxy/mapper.js.map +1 -0
- package/dist/adapters/jira-proxy/provider.d.ts +16 -0
- package/dist/adapters/jira-proxy/provider.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/provider.js +147 -0
- package/dist/adapters/jira-proxy/provider.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/generators.d.ts +4 -4
- package/dist/cli/init/generators.d.ts.map +1 -1
- package/dist/cli/init/generators.js +26 -9
- package/dist/cli/init/generators.js.map +1 -1
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +13 -9
- package/dist/cli/init/index.js.map +1 -1
- package/dist/cli/init/setup-jira.d.ts +6 -2
- package/dist/cli/init/setup-jira.d.ts.map +1 -1
- package/dist/cli/init/setup-jira.js +188 -3
- package/dist/cli/init/setup-jira.js.map +1 -1
- package/dist/cli/init/types.d.ts +9 -0
- package/dist/cli/init/types.d.ts.map +1 -1
- package/dist/cli/init/types.js.map +1 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +26 -12
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/workspaces.d.ts +3 -0
- package/dist/cli/workspaces.d.ts.map +1 -0
- package/dist/cli/workspaces.js +34 -0
- package/dist/cli/workspaces.js.map +1 -0
- package/dist/core/types/config.d.ts +1 -0
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/proxy-config.d.ts +28 -0
- package/dist/core/types/proxy-config.d.ts.map +1 -0
- package/dist/core/types/proxy-config.js +2 -0
- package/dist/core/types/proxy-config.js.map +1 -0
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +32 -7
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/mcp/tools/workspace.js +9 -4
- package/dist/mcp/tools/workspace.js.map +1 -1
- package/dist/workspace/registry.d.ts +11 -0
- package/dist/workspace/registry.d.ts.map +1 -0
- package/dist/workspace/registry.js +80 -0
- package/dist/workspace/registry.js.map +1 -0
- package/package.json +1 -1
- package/templates/env.example +3 -0
- package/templates/proxy-config-example.json +61 -0
package/dist/mcp/helpers.js
CHANGED
|
@@ -3,6 +3,7 @@ import { readdirSync, existsSync, statSync } from 'node:fs';
|
|
|
3
3
|
import { join, dirname, basename } from 'node:path';
|
|
4
4
|
import { findWorkspaceRoot } from '../workspace/resolver.js';
|
|
5
5
|
import { readConfig, getEnabledSources } from '../workspace/config.js';
|
|
6
|
+
import { listRegisteredWorkspaces } from '../workspace/registry.js';
|
|
6
7
|
let activeStorage = null;
|
|
7
8
|
export function loadWorkspace() {
|
|
8
9
|
const envVar = process.env['ARGUSTACK_WORKSPACE'];
|
|
@@ -28,12 +29,22 @@ export function loadWorkspace() {
|
|
|
28
29
|
*/
|
|
29
30
|
export async function switchWorkspace(name) {
|
|
30
31
|
const currentRoot = process.env['ARGUSTACK_WORKSPACE'];
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
let targetDir = null;
|
|
33
|
+
if (currentRoot) {
|
|
34
|
+
const parentDir = dirname(currentRoot);
|
|
35
|
+
const siblingDir = join(parentDir, name);
|
|
36
|
+
if (existsSync(join(siblingDir, '.argustack'))) {
|
|
37
|
+
targetDir = siblingDir;
|
|
38
|
+
}
|
|
33
39
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
40
|
+
if (!targetDir) {
|
|
41
|
+
const registered = listRegisteredWorkspaces(currentRoot ?? undefined);
|
|
42
|
+
const match = registered.find((w) => w.name === name || basename(w.path) === name);
|
|
43
|
+
if (match) {
|
|
44
|
+
targetDir = match.path;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (!targetDir) {
|
|
37
48
|
const available = listSiblingWorkspaces();
|
|
38
49
|
const names = available.map((w) => w.name).join(', ');
|
|
39
50
|
return {
|
|
@@ -103,6 +114,13 @@ export function listSiblingWorkspaces() {
|
|
|
103
114
|
active: name === currentName,
|
|
104
115
|
});
|
|
105
116
|
}
|
|
117
|
+
const registered = listRegisteredWorkspaces(currentRoot);
|
|
118
|
+
for (const rw of registered) {
|
|
119
|
+
const alreadyListed = workspaces.some((w) => w.path === rw.path);
|
|
120
|
+
if (!alreadyListed) {
|
|
121
|
+
workspaces.push(rw);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
106
124
|
return workspaces;
|
|
107
125
|
}
|
|
108
126
|
export function setActiveStorage(storage) {
|
|
@@ -116,13 +134,20 @@ export async function createAdapters(workspaceRoot) {
|
|
|
116
134
|
const { JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN } = process.env;
|
|
117
135
|
const { DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME } = process.env;
|
|
118
136
|
let source = null;
|
|
119
|
-
|
|
137
|
+
const wsConfig = readConfig(workspaceRoot);
|
|
138
|
+
const issueTypes = wsConfig?.sources.jira?.issueTypes;
|
|
139
|
+
const { proxyConfigExists, loadProxyConfig, ProxyJiraProvider } = await import('../adapters/jira-proxy/index.js');
|
|
140
|
+
if (proxyConfigExists(workspaceRoot)) {
|
|
141
|
+
const proxyConfig = loadProxyConfig(workspaceRoot);
|
|
142
|
+
source = new ProxyJiraProvider(proxyConfig, issueTypes);
|
|
143
|
+
}
|
|
144
|
+
else if (JIRA_URL && JIRA_EMAIL && JIRA_API_TOKEN) {
|
|
120
145
|
const { JiraProvider } = await import('../adapters/jira/index.js');
|
|
121
146
|
source = new JiraProvider({
|
|
122
147
|
host: JIRA_URL,
|
|
123
148
|
email: JIRA_EMAIL,
|
|
124
149
|
apiToken: JIRA_API_TOKEN,
|
|
125
|
-
});
|
|
150
|
+
}, issueTypes);
|
|
126
151
|
}
|
|
127
152
|
const { PostgresStorage } = await import('../adapters/postgres/index.js');
|
|
128
153
|
const storage = new PostgresStorage({
|
package/dist/mcp/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwK9D"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod/v4';
|
|
2
2
|
import { SOURCE_META } from '../../core/types/index.js';
|
|
3
3
|
import { loadWorkspace, createAdapters, getEnabledSources, switchWorkspace, listSiblingWorkspaces, textResponse, errorResponse, getErrorMessage, } from '../helpers.js';
|
|
4
|
+
import { registerWorkspace } from '../../workspace/registry.js';
|
|
4
5
|
export function registerWorkspaceTools(server) {
|
|
5
6
|
server.registerTool('workspace_info', {
|
|
6
7
|
description: 'Get information about the current Argustack workspace — configured sources, paths, database connection',
|
|
@@ -65,14 +66,18 @@ export function registerWorkspaceTools(server) {
|
|
|
65
66
|
server.registerTool('list_workspaces', {
|
|
66
67
|
description: 'List all available Argustack workspaces. Shows which workspace is currently active.',
|
|
67
68
|
}, () => {
|
|
69
|
+
const ws = loadWorkspace();
|
|
70
|
+
if (ws.ok) {
|
|
71
|
+
registerWorkspace(ws.root, ws.config.name);
|
|
72
|
+
}
|
|
68
73
|
const workspaces = listSiblingWorkspaces();
|
|
69
74
|
if (workspaces.length === 0) {
|
|
70
75
|
return textResponse('No workspaces found. Run `argustack init <name>` to create one.');
|
|
71
76
|
}
|
|
72
|
-
const lines = workspaces.map((
|
|
73
|
-
const sources =
|
|
74
|
-
const marker =
|
|
75
|
-
return ` ${
|
|
77
|
+
const lines = workspaces.map((w) => {
|
|
78
|
+
const sources = w.sources.map((s) => SOURCE_META[s].label).join(', ') || 'no sources';
|
|
79
|
+
const marker = w.active ? ' (active)' : '';
|
|
80
|
+
return ` ${w.active ? '●' : '○'} ${w.name}${marker} — ${sources}`;
|
|
76
81
|
});
|
|
77
82
|
return textResponse(`Workspaces (${String(workspaces.length)}):\n${lines.join('\n')}`);
|
|
78
83
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SourceType } from '../core/types/index.js';
|
|
2
|
+
export interface WorkspaceInfo {
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
sources: SourceType[];
|
|
6
|
+
active: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function registerWorkspace(workspacePath: string, name?: string): void;
|
|
9
|
+
export declare function listRegisteredWorkspaces(activeRoot?: string): WorkspaceInfo[];
|
|
10
|
+
export declare function pruneDeadWorkspaces(): void;
|
|
11
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/workspace/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgBzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAkB5E;AAED,wBAAgB,wBAAwB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CA4B7E;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { readConfig, getEnabledSources } from './config.js';
|
|
5
|
+
function registryDir() {
|
|
6
|
+
return join(homedir(), '.argustack');
|
|
7
|
+
}
|
|
8
|
+
function registryFile() {
|
|
9
|
+
return join(registryDir(), 'workspaces.json');
|
|
10
|
+
}
|
|
11
|
+
export function registerWorkspace(workspacePath, name) {
|
|
12
|
+
try {
|
|
13
|
+
const entries = readRegistry();
|
|
14
|
+
const existing = entries.find((e) => e.path === workspacePath);
|
|
15
|
+
if (existing) {
|
|
16
|
+
if (name && existing.name !== name) {
|
|
17
|
+
existing.name = name;
|
|
18
|
+
writeRegistry(entries);
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const wsName = name ?? workspacePath.split('/').pop() ?? 'unknown';
|
|
23
|
+
entries.push({ name: wsName, path: workspacePath, createdAt: new Date().toISOString() });
|
|
24
|
+
writeRegistry(entries);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
/* registry is best-effort — don't fail init/sync */
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function listRegisteredWorkspaces(activeRoot) {
|
|
31
|
+
const entries = readRegistry();
|
|
32
|
+
const live = [];
|
|
33
|
+
const workspaces = [];
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
if (!existsSync(join(entry.path, '.argustack'))) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
live.push(entry);
|
|
39
|
+
const config = readConfig(entry.path);
|
|
40
|
+
const sources = config ? getEnabledSources(config) : [];
|
|
41
|
+
const displayName = config?.name ?? entry.name;
|
|
42
|
+
workspaces.push({
|
|
43
|
+
name: displayName,
|
|
44
|
+
path: entry.path,
|
|
45
|
+
sources,
|
|
46
|
+
active: entry.path === activeRoot,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (live.length !== entries.length) {
|
|
50
|
+
writeRegistry(live);
|
|
51
|
+
}
|
|
52
|
+
return workspaces;
|
|
53
|
+
}
|
|
54
|
+
export function pruneDeadWorkspaces() {
|
|
55
|
+
const entries = readRegistry();
|
|
56
|
+
const live = entries.filter((e) => existsSync(join(e.path, '.argustack')));
|
|
57
|
+
if (live.length !== entries.length) {
|
|
58
|
+
writeRegistry(live);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function readRegistry() {
|
|
62
|
+
if (!existsSync(registryFile())) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const raw = readFileSync(registryFile(), 'utf-8');
|
|
67
|
+
const parsed = JSON.parse(raw);
|
|
68
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function writeRegistry(entries) {
|
|
75
|
+
if (!existsSync(registryDir())) {
|
|
76
|
+
mkdirSync(registryDir(), { recursive: true });
|
|
77
|
+
}
|
|
78
|
+
writeFileSync(registryFile(), JSON.stringify(entries, null, 2) + '\n');
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/workspace/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/templates/env.example
CHANGED
|
@@ -6,6 +6,9 @@ JIRA_API_TOKEN=your_jira_api_token
|
|
|
6
6
|
# Projects to pull (comma-separated)
|
|
7
7
|
JIRA_PROJECTS=PROJ,ANOTHER
|
|
8
8
|
|
|
9
|
+
# === Jira Proxy (alternative to direct Jira API) ===
|
|
10
|
+
# JIRA_PROXY_TOKEN=your-service-token
|
|
11
|
+
|
|
9
12
|
# === PostgreSQL (defaults — no need to change) ===
|
|
10
13
|
DB_HOST=localhost
|
|
11
14
|
DB_PORT=5434
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Example Jira Proxy",
|
|
3
|
+
"description": "Example config for a Jira proxy server that sanitizes responses and enforces read-only access. Customize for your proxy.",
|
|
4
|
+
"base_url": "https://your-proxy.example.com/service/jira",
|
|
5
|
+
"auth": {
|
|
6
|
+
"type": "bearer_exchange",
|
|
7
|
+
"token_endpoint": "/service/auth/exchange",
|
|
8
|
+
"service_token_env": "JIRA_PROXY_TOKEN",
|
|
9
|
+
"ttl_minutes": 15
|
|
10
|
+
},
|
|
11
|
+
"endpoints": {
|
|
12
|
+
"search": {
|
|
13
|
+
"path": "/search",
|
|
14
|
+
"method": "GET",
|
|
15
|
+
"params": ["jql", "fields", "maxResults", "startAt"]
|
|
16
|
+
},
|
|
17
|
+
"issue": {
|
|
18
|
+
"path": "/issue/{key}",
|
|
19
|
+
"method": "GET"
|
|
20
|
+
},
|
|
21
|
+
"projects": {
|
|
22
|
+
"path": "/project/search",
|
|
23
|
+
"method": "GET",
|
|
24
|
+
"params": ["maxResults", "startAt", "query"]
|
|
25
|
+
},
|
|
26
|
+
"fields": {
|
|
27
|
+
"path": "/field",
|
|
28
|
+
"method": "GET"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"response_mapping": {
|
|
32
|
+
"issue_key": "key",
|
|
33
|
+
"summary": "fields.summary",
|
|
34
|
+
"description": "fields.description",
|
|
35
|
+
"status": "fields.status.name",
|
|
36
|
+
"status_category": "fields.status.statusCategory.name",
|
|
37
|
+
"issue_type": "fields.issuetype.name",
|
|
38
|
+
"priority": "fields.priority.name",
|
|
39
|
+
"resolution": "fields.resolution.name",
|
|
40
|
+
"assignee": "fields.assignee.displayName",
|
|
41
|
+
"assignee_id": "fields.assignee.accountId",
|
|
42
|
+
"reporter": "fields.reporter.displayName",
|
|
43
|
+
"reporter_id": "fields.reporter.accountId",
|
|
44
|
+
"created": "fields.created",
|
|
45
|
+
"updated": "fields.updated",
|
|
46
|
+
"resolved": "fields.resolutiondate",
|
|
47
|
+
"due_date": "fields.duedate",
|
|
48
|
+
"labels": "fields.labels",
|
|
49
|
+
"components": "fields.components[].name",
|
|
50
|
+
"fix_versions": "fields.fixVersions[].name",
|
|
51
|
+
"parent_key": "fields.parent.key",
|
|
52
|
+
"sprint": "fields.sprint.name",
|
|
53
|
+
"story_points": "fields.story_points"
|
|
54
|
+
},
|
|
55
|
+
"notes": {
|
|
56
|
+
"how_to_use": "1. Copy this file to .argustack/proxy.json in your workspace. 2. Set JIRA_PROXY_TOKEN in .env. 3. Update base_url to your proxy. 4. Adjust response_mapping if your proxy returns different field paths.",
|
|
57
|
+
"how_to_generate": "Give your proxy's OpenAPI spec (or API docs) and this template to any LLM. Ask it to generate a proxy.json config that maps your proxy's response format to these fields.",
|
|
58
|
+
"search_note": "Some proxies strip description from search results for performance. Use the issue endpoint to get full descriptions.",
|
|
59
|
+
"auth_types": "bearer = static token from env var. bearer_exchange = exchange long-lived service token for short-lived access token (recommended)."
|
|
60
|
+
}
|
|
61
|
+
}
|