@jiraacp/cli 2026.405.4
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/README.md +283 -0
- package/dist/abort-GQE4OI5S.js +103 -0
- package/dist/abort-GQE4OI5S.js.map +1 -0
- package/dist/abort-VMRQOADY.js +96 -0
- package/dist/abort-VMRQOADY.js.map +1 -0
- package/dist/bot-WOTETAJY.js +13 -0
- package/dist/bot-WOTETAJY.js.map +1 -0
- package/dist/cancel-clarification-4G5S2HJZ.js +64 -0
- package/dist/cancel-clarification-4G5S2HJZ.js.map +1 -0
- package/dist/chunk-3U373M37.js +67 -0
- package/dist/chunk-3U373M37.js.map +1 -0
- package/dist/chunk-3YHD4SIN.js +97 -0
- package/dist/chunk-3YHD4SIN.js.map +1 -0
- package/dist/chunk-6IY6CRUJ.js +690 -0
- package/dist/chunk-6IY6CRUJ.js.map +1 -0
- package/dist/chunk-B6OA3XJK.js +1167 -0
- package/dist/chunk-B6OA3XJK.js.map +1 -0
- package/dist/chunk-BM4R6NST.js +191 -0
- package/dist/chunk-BM4R6NST.js.map +1 -0
- package/dist/chunk-FLPIU2QO.js +77 -0
- package/dist/chunk-FLPIU2QO.js.map +1 -0
- package/dist/chunk-H7YXX4UA.js +86 -0
- package/dist/chunk-H7YXX4UA.js.map +1 -0
- package/dist/chunk-IT74N3UH.js +19 -0
- package/dist/chunk-IT74N3UH.js.map +1 -0
- package/dist/chunk-JOT4UVSO.js +186 -0
- package/dist/chunk-JOT4UVSO.js.map +1 -0
- package/dist/chunk-KSJKCLEJ.js +222 -0
- package/dist/chunk-KSJKCLEJ.js.map +1 -0
- package/dist/chunk-LIEW4ULF.js +139 -0
- package/dist/chunk-LIEW4ULF.js.map +1 -0
- package/dist/chunk-M4V3YOCY.js +82 -0
- package/dist/chunk-M4V3YOCY.js.map +1 -0
- package/dist/chunk-MMWQHH25.js +207 -0
- package/dist/chunk-MMWQHH25.js.map +1 -0
- package/dist/chunk-OJ4CNF73.js +78 -0
- package/dist/chunk-OJ4CNF73.js.map +1 -0
- package/dist/chunk-PFJAC3RO.js +137 -0
- package/dist/chunk-PFJAC3RO.js.map +1 -0
- package/dist/chunk-PVKVCUNR.js +159 -0
- package/dist/chunk-PVKVCUNR.js.map +1 -0
- package/dist/chunk-RXT4WSIY.js +35 -0
- package/dist/chunk-RXT4WSIY.js.map +1 -0
- package/dist/chunk-RZK74PDF.js +34 -0
- package/dist/chunk-RZK74PDF.js.map +1 -0
- package/dist/chunk-UDTWVKRX.js +68 -0
- package/dist/chunk-UDTWVKRX.js.map +1 -0
- package/dist/chunk-VCEONSWJ.js +307 -0
- package/dist/chunk-VCEONSWJ.js.map +1 -0
- package/dist/chunk-VWBCDZWQ.js +119 -0
- package/dist/chunk-VWBCDZWQ.js.map +1 -0
- package/dist/chunk-WEJCTFQB.js +228 -0
- package/dist/chunk-WEJCTFQB.js.map +1 -0
- package/dist/chunk-YJK7IRPI.js +223 -0
- package/dist/chunk-YJK7IRPI.js.map +1 -0
- package/dist/claude-md-HQ6L4CRP.js +8 -0
- package/dist/claude-md-HQ6L4CRP.js.map +1 -0
- package/dist/cli.js +276 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands-RG45VBTZ.js +407 -0
- package/dist/commands-RG45VBTZ.js.map +1 -0
- package/dist/commands-WYVRVE5Z.js +400 -0
- package/dist/commands-WYVRVE5Z.js.map +1 -0
- package/dist/config-edit-G7O56HXO.js +50 -0
- package/dist/config-edit-G7O56HXO.js.map +1 -0
- package/dist/config-set-QN3JRNZL.js +63 -0
- package/dist/config-set-QN3JRNZL.js.map +1 -0
- package/dist/daemon-CGBV55JK.js +104 -0
- package/dist/daemon-CGBV55JK.js.map +1 -0
- package/dist/dashboard-YVFJ5DXR.js +143 -0
- package/dist/dashboard-YVFJ5DXR.js.map +1 -0
- package/dist/doctor-BPTLVLTD.js +98 -0
- package/dist/doctor-BPTLVLTD.js.map +1 -0
- package/dist/human-loop-RBTA2TYK.js +16 -0
- package/dist/human-loop-RBTA2TYK.js.map +1 -0
- package/dist/human-loop-XGWXUNCS.js +18 -0
- package/dist/human-loop-XGWXUNCS.js.map +1 -0
- package/dist/index.d.ts +583 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/loader-DGW7HCJ5.js +21 -0
- package/dist/loader-DGW7HCJ5.js.map +1 -0
- package/dist/logs-JUVQWN6C.js +93 -0
- package/dist/logs-JUVQWN6C.js.map +1 -0
- package/dist/mcp.js +132 -0
- package/dist/mcp.js.map +1 -0
- package/dist/orchestrator-3MGXX3QW.js +22 -0
- package/dist/orchestrator-3MGXX3QW.js.map +1 -0
- package/dist/orchestrator-BVUKN5N3.js +13 -0
- package/dist/orchestrator-BVUKN5N3.js.map +1 -0
- package/dist/pause-FLDZ3OD6.js +62 -0
- package/dist/pause-FLDZ3OD6.js.map +1 -0
- package/dist/projects-QMIGNW7U.js +129 -0
- package/dist/projects-QMIGNW7U.js.map +1 -0
- package/dist/replay-M4JEG4Z4.js +151 -0
- package/dist/replay-M4JEG4Z4.js.map +1 -0
- package/dist/schedule-CDHD77VZ.js +17 -0
- package/dist/schedule-CDHD77VZ.js.map +1 -0
- package/dist/serve-XI7JTIPZ.js +231 -0
- package/dist/serve-XI7JTIPZ.js.map +1 -0
- package/dist/sprint-KZZWVNK6.js +200 -0
- package/dist/sprint-KZZWVNK6.js.map +1 -0
- package/dist/status-I6GU2LWE.js +48 -0
- package/dist/status-I6GU2LWE.js.map +1 -0
- package/dist/topic-manager-4AMEPMFI.js +12 -0
- package/dist/topic-manager-4AMEPMFI.js.map +1 -0
- package/dist/triage-WNHGPVZQ.js +251 -0
- package/dist/triage-WNHGPVZQ.js.map +1 -0
- package/dist/usage-AWWBI37F.js +155 -0
- package/dist/usage-AWWBI37F.js.map +1 -0
- package/dist/wizard-CYEJJLNF.js +190 -0
- package/dist/wizard-CYEJJLNF.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
GlobalConfigSchema,
|
|
4
|
+
ProjectConfigSchema
|
|
5
|
+
} from "./chunk-LIEW4ULF.js";
|
|
6
|
+
|
|
7
|
+
// src/config/loader.ts
|
|
8
|
+
import fs from "fs";
|
|
9
|
+
import os from "os";
|
|
10
|
+
import path from "path";
|
|
11
|
+
import { spawnSync } from "child_process";
|
|
12
|
+
var HOME_DIR = path.join(os.homedir(), ".jira-acp");
|
|
13
|
+
var PROJECTS_DIR = path.join(HOME_DIR, "projects");
|
|
14
|
+
var RUNS_DIR = path.join(HOME_DIR, "runs");
|
|
15
|
+
function detectProjectName(cwd = process.cwd()) {
|
|
16
|
+
const result = spawnSync("git", ["remote", "get-url", "origin"], {
|
|
17
|
+
cwd,
|
|
18
|
+
encoding: "utf8"
|
|
19
|
+
});
|
|
20
|
+
if (result.status === 0 && result.stdout) {
|
|
21
|
+
const remote = result.stdout.trim();
|
|
22
|
+
const match = remote.match(/[:/]([^/]+\/[^/]+?)(?:\.git)?$/);
|
|
23
|
+
if (match) return match[1].replace("/", "-");
|
|
24
|
+
}
|
|
25
|
+
return path.basename(cwd);
|
|
26
|
+
}
|
|
27
|
+
var GLOBAL_CONFIG_FILE = path.join(HOME_DIR, "config.json");
|
|
28
|
+
function configPath(projectName) {
|
|
29
|
+
return path.join(PROJECTS_DIR, `${projectName}.json`);
|
|
30
|
+
}
|
|
31
|
+
function deepMerge(base, override) {
|
|
32
|
+
const result = { ...base };
|
|
33
|
+
for (const [key, value] of Object.entries(override)) {
|
|
34
|
+
if (value === void 0) continue;
|
|
35
|
+
const baseVal = base[key];
|
|
36
|
+
if (typeof value === "object" && value !== null && !Array.isArray(value) && typeof baseVal === "object" && baseVal !== null && !Array.isArray(baseVal)) {
|
|
37
|
+
result[key] = deepMerge(
|
|
38
|
+
baseVal,
|
|
39
|
+
value
|
|
40
|
+
);
|
|
41
|
+
} else {
|
|
42
|
+
result[key] = value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
function loadGlobalConfig() {
|
|
48
|
+
if (!fs.existsSync(GLOBAL_CONFIG_FILE)) return {};
|
|
49
|
+
try {
|
|
50
|
+
const raw = JSON.parse(
|
|
51
|
+
fs.readFileSync(GLOBAL_CONFIG_FILE, "utf8")
|
|
52
|
+
);
|
|
53
|
+
const parsed = GlobalConfigSchema.safeParse(raw);
|
|
54
|
+
if (!parsed.success) return {};
|
|
55
|
+
return parsed.data;
|
|
56
|
+
} catch {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function loadConfig(projectName) {
|
|
61
|
+
const filePath = configPath(projectName);
|
|
62
|
+
if (!fs.existsSync(filePath)) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
`No config found for project "${projectName}" at ${filePath}.
|
|
65
|
+
Run: jiraACP init --name ${projectName}`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
const projectRaw = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
69
|
+
const globalRaw = loadGlobalConfig();
|
|
70
|
+
const merged = deepMerge(globalRaw, projectRaw);
|
|
71
|
+
return ProjectConfigSchema.parse(merged);
|
|
72
|
+
}
|
|
73
|
+
function configExists(projectName) {
|
|
74
|
+
return fs.existsSync(configPath(projectName));
|
|
75
|
+
}
|
|
76
|
+
function saveConfig(projectName, config) {
|
|
77
|
+
fs.mkdirSync(PROJECTS_DIR, { recursive: true });
|
|
78
|
+
fs.writeFileSync(configPath(projectName), JSON.stringify(config, null, 2));
|
|
79
|
+
}
|
|
80
|
+
function listProjects() {
|
|
81
|
+
if (!fs.existsSync(PROJECTS_DIR)) return [];
|
|
82
|
+
return fs.readdirSync(PROJECTS_DIR).filter((f) => f.endsWith(".json")).map((f) => f.replace(/\.json$/, ""));
|
|
83
|
+
}
|
|
84
|
+
function getRunsDir(projectName) {
|
|
85
|
+
return path.join(RUNS_DIR, projectName);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export {
|
|
89
|
+
HOME_DIR,
|
|
90
|
+
detectProjectName,
|
|
91
|
+
loadConfig,
|
|
92
|
+
configExists,
|
|
93
|
+
saveConfig,
|
|
94
|
+
listProjects,
|
|
95
|
+
getRunsDir
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=chunk-3YHD4SIN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/loader.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport {\n ProjectConfigSchema,\n GlobalConfigSchema,\n type ProjectConfig,\n} from \"./schema.js\";\n\n// ~/.jira-acp/\nexport const HOME_DIR = path.join(os.homedir(), \".jira-acp\");\nconst PROJECTS_DIR = path.join(HOME_DIR, \"projects\");\nconst RUNS_DIR = path.join(HOME_DIR, \"runs\");\n\n/** Detect project name from git remote origin URL, fallback to folder name */\nexport function detectProjectName(cwd: string = process.cwd()): string {\n const result = spawnSync(\"git\", [\"remote\", \"get-url\", \"origin\"], {\n cwd,\n encoding: \"utf8\",\n });\n if (result.status === 0 && result.stdout) {\n const remote = result.stdout.trim();\n // https://github.com/owner/repo.git or git@github.com:owner/repo.git\n const match = remote.match(/[:/]([^/]+\\/[^/]+?)(?:\\.git)?$/);\n if (match) return match[1].replace(\"/\", \"-\");\n }\n return path.basename(cwd);\n}\n\nconst GLOBAL_CONFIG_FILE = path.join(HOME_DIR, \"config.json\");\n\nfunction configPath(projectName: string): string {\n return path.join(PROJECTS_DIR, `${projectName}.json`);\n}\n\nfunction deepMerge(\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(override)) {\n if (value === undefined) continue;\n const baseVal = base[key];\n if (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n typeof baseVal === \"object\" &&\n baseVal !== null &&\n !Array.isArray(baseVal)\n ) {\n result[key] = deepMerge(\n baseVal as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction loadGlobalConfig(): Record<string, unknown> {\n if (!fs.existsSync(GLOBAL_CONFIG_FILE)) return {};\n try {\n const raw = JSON.parse(\n fs.readFileSync(GLOBAL_CONFIG_FILE, \"utf8\"),\n ) as unknown;\n const parsed = GlobalConfigSchema.safeParse(raw);\n if (!parsed.success) return {};\n return parsed.data as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nexport function loadConfig(projectName: string): ProjectConfig {\n const filePath = configPath(projectName);\n\n if (!fs.existsSync(filePath)) {\n throw new Error(\n `No config found for project \"${projectName}\" at ${filePath}.\\nRun: jiraACP init --name ${projectName}`,\n );\n }\n\n const projectRaw = JSON.parse(fs.readFileSync(filePath, \"utf8\")) as Record<\n string,\n unknown\n >;\n const globalRaw = loadGlobalConfig();\n const merged = deepMerge(globalRaw, projectRaw); // project overrides global\n return ProjectConfigSchema.parse(merged);\n}\n\nexport function configExists(projectName: string): boolean {\n return fs.existsSync(configPath(projectName));\n}\n\nexport function saveConfig(projectName: string, config: unknown): void {\n fs.mkdirSync(PROJECTS_DIR, { recursive: true });\n fs.writeFileSync(configPath(projectName), JSON.stringify(config, null, 2));\n}\n\nexport function listProjects(): string[] {\n if (!fs.existsSync(PROJECTS_DIR)) return [];\n return fs\n .readdirSync(PROJECTS_DIR)\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => f.replace(/\\.json$/, \"\"));\n}\n\nexport function getRunsDir(projectName: string): string {\n return path.join(RUNS_DIR, projectName);\n}\n"],"mappings":"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","names":[]}
|