@nemus-cli/nemus 0.2.1
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/CHANGELOG.md +86 -0
- package/LICENSE +21 -0
- package/README.md +275 -0
- package/assets/README.md +53 -0
- package/assets/banner.png +0 -0
- package/assets/banner.svg +66 -0
- package/assets/favicon-32.png +0 -0
- package/assets/favicon-64.png +0 -0
- package/assets/icon-256.png +0 -0
- package/assets/icon.svg +23 -0
- package/assets/logo-256.png +0 -0
- package/assets/logo-512.png +0 -0
- package/assets/logo-wordmark.svg +35 -0
- package/assets/logo.svg +32 -0
- package/bin/workspace.js +130 -0
- package/dist/cli/ai-prompt.js +421 -0
- package/dist/cli/dashboard/AgentList.js +61 -0
- package/dist/cli/dashboard/DashboardSidebar.js +280 -0
- package/dist/cli/dashboard/HelpFooter.js +73 -0
- package/dist/cli/dashboard/StatusBadge.js +50 -0
- package/dist/cli/dashboard/index.js +11 -0
- package/dist/cli/dashboard/types.js +2 -0
- package/dist/cli/tui.js +48 -0
- package/dist/commands/ai-prompt.js +22 -0
- package/dist/commands/analyze-deps.js +138 -0
- package/dist/commands/archive.js +113 -0
- package/dist/commands/branch/create.js +119 -0
- package/dist/commands/branch/index.js +104 -0
- package/dist/commands/branch/merge.js +90 -0
- package/dist/commands/branch/rebase.js +84 -0
- package/dist/commands/branch/switch.js +165 -0
- package/dist/commands/cache/index.js +80 -0
- package/dist/commands/cache/manager.js +198 -0
- package/dist/commands/cleanup.js +153 -0
- package/dist/commands/configure-claude.js +55 -0
- package/dist/commands/configure.js +231 -0
- package/dist/commands/create.js +204 -0
- package/dist/commands/dashboard/hook-handler.js +162 -0
- package/dist/commands/dashboard/index.js +258 -0
- package/dist/commands/dashboard/launcher.js +40 -0
- package/dist/commands/dashboard/session-picker.js +106 -0
- package/dist/commands/dashboard/sidebar.js +39 -0
- package/dist/commands/dashboard/workspace-picker.js +95 -0
- package/dist/commands/delete.js +194 -0
- package/dist/commands/deprecated-aliases.js +44 -0
- package/dist/commands/diff.js +129 -0
- package/dist/commands/doctor.js +141 -0
- package/dist/commands/generate-docs.js +77 -0
- package/dist/commands/ghq-status.js +72 -0
- package/dist/commands/go.js +154 -0
- package/dist/commands/history.js +124 -0
- package/dist/commands/list.js +191 -0
- package/dist/commands/mcp/index.js +69 -0
- package/dist/commands/migrate.js +296 -0
- package/dist/commands/remove-repo.js +217 -0
- package/dist/commands/report-bug.js +112 -0
- package/dist/commands/run.js +147 -0
- package/dist/commands/save-context.js +171 -0
- package/dist/commands/sessions.js +129 -0
- package/dist/commands/status.js +138 -0
- package/dist/commands/suite/create.js +212 -0
- package/dist/commands/suite/delete.js +64 -0
- package/dist/commands/suite/export.js +126 -0
- package/dist/commands/suite/import.js +128 -0
- package/dist/commands/suite/index.js +94 -0
- package/dist/commands/suite/list.js +49 -0
- package/dist/commands/suite/use.js +227 -0
- package/dist/commands/sync.js +117 -0
- package/dist/commands/update.js +203 -0
- package/dist/mcp/install.js +550 -0
- package/dist/mcp/server.js +398 -0
- package/dist/mcp/tools.js +922 -0
- package/dist/pi-extensions/permission-sync.ts.template +41 -0
- package/dist/pi-extensions/permissions-gate.ts.template +69 -0
- package/dist/pi-extensions/pr-fix-trigger.ts.template +124 -0
- package/dist/pi-extensions/review-reminder.ts.template +58 -0
- package/dist/pi-extensions/workspace-input-status.ts.template +919 -0
- package/dist/program.js +136 -0
- package/dist/scripts/workspace-table.py +394 -0
- package/dist/types/dashboard.js +11 -0
- package/dist/types/index.js +2 -0
- package/dist/utils/agent-config.js +263 -0
- package/dist/utils/agent-state.js +178 -0
- package/dist/utils/banner.js +24 -0
- package/dist/utils/branch-operations.js +232 -0
- package/dist/utils/bug-report.js +355 -0
- package/dist/utils/cache.js +168 -0
- package/dist/utils/claude-integration.js +617 -0
- package/dist/utils/claude-sessions.js +260 -0
- package/dist/utils/cleanup-operations.js +120 -0
- package/dist/utils/colors.js +26 -0
- package/dist/utils/command-helpers.js +44 -0
- package/dist/utils/config.js +150 -0
- package/dist/utils/context-file.js +33 -0
- package/dist/utils/dashboard-hooks.js +172 -0
- package/dist/utils/dependency-analyzer.js +234 -0
- package/dist/utils/diff-operations.js +80 -0
- package/dist/utils/doc-generator.js +184 -0
- package/dist/utils/ghq-integration.js +332 -0
- package/dist/utils/git-operations.js +237 -0
- package/dist/utils/git-status.js +187 -0
- package/dist/utils/github.js +68 -0
- package/dist/utils/health-checks.js +345 -0
- package/dist/utils/history.js +150 -0
- package/dist/utils/hooks.js +100 -0
- package/dist/utils/logger.js +40 -0
- package/dist/utils/permission-sync.js +681 -0
- package/dist/utils/pi-extensions.js +224 -0
- package/dist/utils/progress.js +92 -0
- package/dist/utils/prompts.js +279 -0
- package/dist/utils/repo-resolver.js +260 -0
- package/dist/utils/retry.js +65 -0
- package/dist/utils/run-operations.js +30 -0
- package/dist/utils/suite.js +159 -0
- package/dist/utils/sync-operations.js +107 -0
- package/dist/utils/tmux-dashboard.js +184 -0
- package/dist/utils/validation.js +153 -0
- package/dist/utils/version-check.js +121 -0
- package/dist/utils/workspace-meta.js +185 -0
- package/install-shell-integration.sh +532 -0
- package/install.sh +401 -0
- package/package.json +90 -0
- package/remove-shell-block.awk +44 -0
- package/scripts/postinstall.js +85 -0
- package/skills/analyze-deps.md +23 -0
- package/skills/archive-workspace.md +26 -0
- package/skills/branch-create.md +18 -0
- package/skills/create-workspace.md +39 -0
- package/skills/delete-workspace.md +37 -0
- package/skills/list-org-repos.md +26 -0
- package/skills/list-suites.md +24 -0
- package/skills/list-workspaces.md +27 -0
- package/skills/refresh-workspace-docs.md +89 -0
- package/skills/remove-repo.md +25 -0
- package/skills/run-command.md +23 -0
- package/skills/save-context.md +68 -0
- package/skills/search-repos.md +31 -0
- package/skills/snapshot-list.md +18 -0
- package/skills/snapshot-save.md +12 -0
- package/skills/switch-branch.md +18 -0
- package/skills/update-cache.md +21 -0
- package/skills/update-workspace.md +66 -0
- package/skills/workspace-cleanup.md +18 -0
- package/skills/workspace-diff.md +23 -0
- package/skills/workspace-doctor.md +23 -0
- package/skills/workspace-info.md +45 -0
- package/skills/workspace-manager/SKILL.md +201 -0
- package/skills/workspace-manager/references/ai-prompt.md +44 -0
- package/skills/workspace-manager/references/analyze-deps.md +45 -0
- package/skills/workspace-manager/references/archive-workspace.md +38 -0
- package/skills/workspace-manager/references/branch-create.md +31 -0
- package/skills/workspace-manager/references/branch-merge.md +22 -0
- package/skills/workspace-manager/references/branch-rebase.md +22 -0
- package/skills/workspace-manager/references/cache-clear.md +18 -0
- package/skills/workspace-manager/references/cache-info.md +22 -0
- package/skills/workspace-manager/references/configure-claude.md +31 -0
- package/skills/workspace-manager/references/configure.md +35 -0
- package/skills/workspace-manager/references/create-workspace.md +45 -0
- package/skills/workspace-manager/references/dashboard.md +61 -0
- package/skills/workspace-manager/references/delete-workspace.md +33 -0
- package/skills/workspace-manager/references/generate-docs.md +36 -0
- package/skills/workspace-manager/references/ghq-status.md +28 -0
- package/skills/workspace-manager/references/go.md +33 -0
- package/skills/workspace-manager/references/history.md +41 -0
- package/skills/workspace-manager/references/list-org-repos.md +26 -0
- package/skills/workspace-manager/references/list-suites.md +21 -0
- package/skills/workspace-manager/references/list-workspaces.md +27 -0
- package/skills/workspace-manager/references/mcp.md +49 -0
- package/skills/workspace-manager/references/remove-repo.md +26 -0
- package/skills/workspace-manager/references/run-command.md +44 -0
- package/skills/workspace-manager/references/search-repos.md +24 -0
- package/skills/workspace-manager/references/sessions.md +27 -0
- package/skills/workspace-manager/references/suite-create.md +22 -0
- package/skills/workspace-manager/references/suite-delete.md +21 -0
- package/skills/workspace-manager/references/suite-export.md +19 -0
- package/skills/workspace-manager/references/suite-import.md +19 -0
- package/skills/workspace-manager/references/suite-use.md +27 -0
- package/skills/workspace-manager/references/switch-branch.md +25 -0
- package/skills/workspace-manager/references/update-cache.md +22 -0
- package/skills/workspace-manager/references/update-workspace.md +50 -0
- package/skills/workspace-manager/references/workspace-cleanup.md +33 -0
- package/skills/workspace-manager/references/workspace-diff.md +27 -0
- package/skills/workspace-manager/references/workspace-doctor.md +27 -0
- package/skills/workspace-manager/references/workspace-info.md +33 -0
- package/skills/workspace-manager/references/workspace-status.md +43 -0
- package/skills/workspace-manager/references/workspace-sync.md +26 -0
- package/skills/workspace-status.md +26 -0
- package/skills/workspace-sync.md +23 -0
- package/src/cli/ai-prompt.test.ts +667 -0
- package/src/cli/ai-prompt.ts +421 -0
- package/src/cli/dashboard/AgentList.tsx +44 -0
- package/src/cli/dashboard/DashboardSidebar.tsx +291 -0
- package/src/cli/dashboard/HelpFooter.tsx +22 -0
- package/src/cli/dashboard/StatusBadge.tsx +23 -0
- package/src/cli/dashboard/index.ts +5 -0
- package/src/cli/dashboard/types.ts +16 -0
- package/src/cli/tui.tsx +51 -0
- package/src/cli/workspace-cli.test.ts +30 -0
- package/src/commands/ai-prompt.ts +21 -0
- package/src/commands/analyze-deps.ts +119 -0
- package/src/commands/archive.ts +114 -0
- package/src/commands/branch/create.ts +94 -0
- package/src/commands/branch/index.ts +74 -0
- package/src/commands/branch/merge.ts +61 -0
- package/src/commands/branch/rebase.ts +54 -0
- package/src/commands/branch/switch.ts +150 -0
- package/src/commands/cache/index.ts +51 -0
- package/src/commands/cache/manager.ts +168 -0
- package/src/commands/cleanup.ts +132 -0
- package/src/commands/configure-claude.ts +55 -0
- package/src/commands/configure.ts +204 -0
- package/src/commands/create.ts +196 -0
- package/src/commands/dashboard/hook-handler.ts +138 -0
- package/src/commands/dashboard/index.ts +248 -0
- package/src/commands/dashboard/launcher.ts +42 -0
- package/src/commands/dashboard/session-picker.ts +73 -0
- package/src/commands/dashboard/sidebar.js +39 -0
- package/src/commands/dashboard/workspace-picker.ts +62 -0
- package/src/commands/delete.test.ts +250 -0
- package/src/commands/delete.ts +171 -0
- package/src/commands/deprecated-aliases.ts +55 -0
- package/src/commands/diff.ts +106 -0
- package/src/commands/doctor.ts +110 -0
- package/src/commands/generate-docs.ts +45 -0
- package/src/commands/ghq-status.ts +70 -0
- package/src/commands/go.ts +125 -0
- package/src/commands/history.ts +136 -0
- package/src/commands/list.test.ts +219 -0
- package/src/commands/list.ts +176 -0
- package/src/commands/mcp/index.ts +39 -0
- package/src/commands/migrate.ts +277 -0
- package/src/commands/remove-repo.ts +194 -0
- package/src/commands/report-bug.ts +88 -0
- package/src/commands/run.ts +125 -0
- package/src/commands/save-context.test.ts +113 -0
- package/src/commands/save-context.ts +141 -0
- package/src/commands/sessions.ts +99 -0
- package/src/commands/status.ts +111 -0
- package/src/commands/suite/create.ts +240 -0
- package/src/commands/suite/delete.ts +65 -0
- package/src/commands/suite/export.ts +97 -0
- package/src/commands/suite/import.ts +100 -0
- package/src/commands/suite/index.ts +66 -0
- package/src/commands/suite/list.ts +54 -0
- package/src/commands/suite/use.ts +232 -0
- package/src/commands/sync.ts +97 -0
- package/src/commands/update.ts +197 -0
- package/src/mcp/install.ts +529 -0
- package/src/mcp/server.ts +579 -0
- package/src/mcp/tools.test.ts +545 -0
- package/src/mcp/tools.ts +1019 -0
- package/src/mcp/update-workspace.test.ts +220 -0
- package/src/pi-extensions/permission-sync.ts.template +41 -0
- package/src/pi-extensions/permissions-gate.ts.template +69 -0
- package/src/pi-extensions/pr-fix-trigger.ts.template +124 -0
- package/src/pi-extensions/review-reminder.ts.template +58 -0
- package/src/pi-extensions/workspace-input-status.ts.template +919 -0
- package/src/program.ts +112 -0
- package/src/scripts/workspace-table.py +394 -0
- package/src/types/dashboard.ts +29 -0
- package/src/types/index.ts +109 -0
- package/src/types/ink.d.ts +171 -0
- package/src/utils/agent-config.test.ts +303 -0
- package/src/utils/agent-config.ts +264 -0
- package/src/utils/agent-state.test.ts +166 -0
- package/src/utils/agent-state.ts +135 -0
- package/src/utils/banner.ts +24 -0
- package/src/utils/branch-operations.ts +237 -0
- package/src/utils/bug-report.test.ts +174 -0
- package/src/utils/bug-report.ts +355 -0
- package/src/utils/cache.ts +150 -0
- package/src/utils/claude-integration.test.ts +381 -0
- package/src/utils/claude-integration.ts +649 -0
- package/src/utils/claude-sessions.test.ts +262 -0
- package/src/utils/claude-sessions.ts +251 -0
- package/src/utils/cleanup-operations.ts +94 -0
- package/src/utils/colors.ts +25 -0
- package/src/utils/command-helpers.ts +46 -0
- package/src/utils/config.test.ts +203 -0
- package/src/utils/config.ts +133 -0
- package/src/utils/context-file.ts +36 -0
- package/src/utils/dashboard-hooks.test.ts +168 -0
- package/src/utils/dashboard-hooks.ts +163 -0
- package/src/utils/dependency-analyzer.ts +243 -0
- package/src/utils/diff-operations.ts +59 -0
- package/src/utils/doc-generator.ts +187 -0
- package/src/utils/ghq-integration.test.ts +195 -0
- package/src/utils/ghq-integration.ts +317 -0
- package/src/utils/git-operations.test.ts +265 -0
- package/src/utils/git-operations.ts +233 -0
- package/src/utils/git-status.ts +171 -0
- package/src/utils/github.ts +74 -0
- package/src/utils/health-checks.ts +359 -0
- package/src/utils/history.ts +140 -0
- package/src/utils/hooks.ts +92 -0
- package/src/utils/logger.ts +37 -0
- package/src/utils/permission-sync.test.ts +593 -0
- package/src/utils/permission-sync.ts +720 -0
- package/src/utils/pi-extensions.test.ts +182 -0
- package/src/utils/pi-extensions.ts +226 -0
- package/src/utils/progress.ts +73 -0
- package/src/utils/prompts.test.ts +169 -0
- package/src/utils/prompts.ts +296 -0
- package/src/utils/repo-resolver.test.ts +313 -0
- package/src/utils/repo-resolver.ts +294 -0
- package/src/utils/retry.test.ts +124 -0
- package/src/utils/retry.ts +85 -0
- package/src/utils/run-operations.ts +38 -0
- package/src/utils/suite.test.ts +256 -0
- package/src/utils/suite.ts +144 -0
- package/src/utils/sync-operations.ts +87 -0
- package/src/utils/tmux-dashboard.ts +193 -0
- package/src/utils/validation.test.ts +139 -0
- package/src/utils/validation.ts +128 -0
- package/src/utils/version-check.test.ts +108 -0
- package/src/utils/version-check.ts +96 -0
- package/src/utils/workspace-meta.ts +173 -0
- package/sync-permissions.sh +137 -0
- package/tsconfig.json +20 -0
- package/uninstall.sh +162 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerGoCommand = registerGoCommand;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const config_1 = require("../utils/config");
|
|
42
|
+
const fs = __importStar(require("fs/promises"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const workspace_meta_1 = require("../utils/workspace-meta");
|
|
45
|
+
const claude_sessions_1 = require("../utils/claude-sessions");
|
|
46
|
+
const logger_1 = require("../utils/logger");
|
|
47
|
+
const colors_1 = require("../utils/colors");
|
|
48
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
49
|
+
const inquirer_autocomplete_prompt_1 = __importDefault(require("inquirer-autocomplete-prompt"));
|
|
50
|
+
const fuzzy = __importStar(require("fuzzy"));
|
|
51
|
+
inquirer_1.default.registerPrompt('autocomplete', inquirer_autocomplete_prompt_1.default);
|
|
52
|
+
const TEMP_FILE = path.join(os.homedir(), '.workspace-last-go');
|
|
53
|
+
const RESUME_FLAG_FILE = path.join(os.homedir(), '.workspace-resume-session');
|
|
54
|
+
function registerGoCommand(parent) {
|
|
55
|
+
parent
|
|
56
|
+
.command('go')
|
|
57
|
+
.description('Quick navigate to workspace')
|
|
58
|
+
.argument('[workspace]', 'Workspace name')
|
|
59
|
+
.action(async (workspace) => {
|
|
60
|
+
await handleGo(workspace);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async function handleGo(workspaceArg) {
|
|
64
|
+
try {
|
|
65
|
+
let selectedWorkspace;
|
|
66
|
+
if (workspaceArg) {
|
|
67
|
+
selectedWorkspace = workspaceArg;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const [workspaces, sessions] = await Promise.all([
|
|
71
|
+
(0, workspace_meta_1.listWorkspaces)(),
|
|
72
|
+
(0, claude_sessions_1.getWorkspaceSessions)(),
|
|
73
|
+
]);
|
|
74
|
+
if (workspaces.length === 0) {
|
|
75
|
+
(0, logger_1.logError)('No workspaces found');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Build session map, keeping most-recent session per workspace
|
|
80
|
+
// (sessions are sorted most-recent-first, so first entry wins)
|
|
81
|
+
const sessionMap = new Map();
|
|
82
|
+
for (const session of sessions) {
|
|
83
|
+
if (!sessionMap.has(session.workspaceName)) {
|
|
84
|
+
sessionMap.set(session.workspaceName, session);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const items = workspaces.map(ws => ({
|
|
88
|
+
name: ws.name,
|
|
89
|
+
repoCount: ws.metadata?.repositories?.length ?? 0,
|
|
90
|
+
lastActiveLabel: sessionMap.get(ws.name)?.lastActiveLabel ?? null,
|
|
91
|
+
lastActiveAt: sessionMap.get(ws.name)?.lastActiveAt.getTime() ?? 0,
|
|
92
|
+
hasSession: sessionMap.has(ws.name),
|
|
93
|
+
}));
|
|
94
|
+
items.sort((a, b) => {
|
|
95
|
+
if (a.hasSession && b.hasSession)
|
|
96
|
+
return b.lastActiveAt - a.lastActiveAt;
|
|
97
|
+
if (a.hasSession)
|
|
98
|
+
return -1;
|
|
99
|
+
if (b.hasSession)
|
|
100
|
+
return 1;
|
|
101
|
+
return 0;
|
|
102
|
+
});
|
|
103
|
+
const { workspaceName } = await inquirer_1.default.prompt([
|
|
104
|
+
{
|
|
105
|
+
type: 'autocomplete',
|
|
106
|
+
name: 'workspaceName',
|
|
107
|
+
message: 'Select workspace to navigate to:',
|
|
108
|
+
source: async (_answersSoFar, input) => {
|
|
109
|
+
const searchInput = input || '';
|
|
110
|
+
const source = items.map(item => ({
|
|
111
|
+
name: `${item.name} ${item.lastActiveLabel ? (0, colors_1.colorize)(item.lastActiveLabel, 'dim') : (0, colors_1.colorize)('no session', 'dim')} ${(0, colors_1.colorize)(`${item.repoCount} repos`, 'dim')}`,
|
|
112
|
+
value: item.name,
|
|
113
|
+
}));
|
|
114
|
+
if (!searchInput)
|
|
115
|
+
return source;
|
|
116
|
+
const results = fuzzy.filter(searchInput, items, { extract: (item) => item.name });
|
|
117
|
+
return results.map(result => ({
|
|
118
|
+
name: `${result.original.name} ${result.original.lastActiveLabel ? (0, colors_1.colorize)(result.original.lastActiveLabel, 'dim') : (0, colors_1.colorize)('no session', 'dim')} ${(0, colors_1.colorize)(`${result.original.repoCount} repos`, 'dim')}`,
|
|
119
|
+
value: result.original.name,
|
|
120
|
+
}));
|
|
121
|
+
},
|
|
122
|
+
pageSize: 15,
|
|
123
|
+
},
|
|
124
|
+
]);
|
|
125
|
+
selectedWorkspace = workspaceName;
|
|
126
|
+
}
|
|
127
|
+
const workspacePath = path.join(config_1.WORKSPACES_DIR, selectedWorkspace);
|
|
128
|
+
try {
|
|
129
|
+
await fs.access(workspacePath);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
(0, logger_1.logError)(`Workspace not found: ${selectedWorkspace}`);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
await fs.writeFile(TEMP_FILE, workspacePath, 'utf-8');
|
|
136
|
+
const sessions = await (0, claude_sessions_1.getWorkspaceSessions)();
|
|
137
|
+
const session = sessions.find(s => s.workspaceName === selectedWorkspace);
|
|
138
|
+
if (session) {
|
|
139
|
+
// Write JSON with session ID and agent type for correct resume
|
|
140
|
+
await fs.writeFile(RESUME_FLAG_FILE, JSON.stringify({
|
|
141
|
+
sessionId: session.sessionId,
|
|
142
|
+
agentType: session.agentType,
|
|
143
|
+
}), 'utf-8');
|
|
144
|
+
}
|
|
145
|
+
console.log(workspacePath);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
(0, logger_1.logError)('Failed to navigate to workspace');
|
|
149
|
+
if (error instanceof Error) {
|
|
150
|
+
(0, logger_1.logError)(error.message);
|
|
151
|
+
}
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerHistoryCommand = registerHistoryCommand;
|
|
7
|
+
const history_1 = require("../utils/history");
|
|
8
|
+
const logger_1 = require("../utils/logger");
|
|
9
|
+
const colors_1 = require("../utils/colors");
|
|
10
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
11
|
+
const command_helpers_1 = require("../utils/command-helpers");
|
|
12
|
+
const displayHistoryTable = (records) => {
|
|
13
|
+
if (records.length === 0) {
|
|
14
|
+
(0, logger_1.logInfo)('No operation history found');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
console.log('\n' + (0, colors_1.colorize)('═'.repeat(120), 'gray'));
|
|
18
|
+
console.log((0, colors_1.colorize)('Time', 'bright').padEnd(25) +
|
|
19
|
+
(0, colors_1.colorize)('Command', 'bright').padEnd(25) +
|
|
20
|
+
(0, colors_1.colorize)('Workspace', 'bright').padEnd(25) +
|
|
21
|
+
(0, colors_1.colorize)('Duration', 'bright').padEnd(15) +
|
|
22
|
+
(0, colors_1.colorize)('Status', 'bright'));
|
|
23
|
+
console.log((0, colors_1.colorize)('─'.repeat(120), 'gray'));
|
|
24
|
+
for (const record of records) {
|
|
25
|
+
const time = new Date(record.timestamp).toLocaleString().padEnd(15);
|
|
26
|
+
const command = record.command.padEnd(15);
|
|
27
|
+
const workspace = (record.workspace || '-').padEnd(15);
|
|
28
|
+
const duration = `${(record.duration / 1000).toFixed(1)}s`.padEnd(10);
|
|
29
|
+
const status = record.success
|
|
30
|
+
? (0, colors_1.colorize)('✓ Success', 'green')
|
|
31
|
+
: (0, colors_1.colorize)('✗ Failed', 'red') + (record.error ? ` (${record.error})` : '');
|
|
32
|
+
console.log(`${time} ${command} ${workspace} ${duration} ${status}`);
|
|
33
|
+
}
|
|
34
|
+
console.log((0, colors_1.colorize)('═'.repeat(120), 'gray') + '\n');
|
|
35
|
+
};
|
|
36
|
+
const displayStats = (stats) => {
|
|
37
|
+
console.log((0, colors_1.colorize)('Operation Statistics', 'bright'));
|
|
38
|
+
console.log((0, colors_1.colorize)('─'.repeat(60), 'gray'));
|
|
39
|
+
console.log(`Total Operations: ${(0, colors_1.colorize)(String(stats.totalOperations), 'cyan')}`);
|
|
40
|
+
console.log(`Success Rate: ${(0, colors_1.colorize)(`${stats.successRate.toFixed(1)}%`, 'green')}`);
|
|
41
|
+
console.log(`Average Duration: ${(0, colors_1.colorize)(`${(stats.avgDuration / 1000).toFixed(1)}s`, 'yellow')}`);
|
|
42
|
+
console.log(`\n${(0, colors_1.colorize)('Command Usage', 'bright')}`);
|
|
43
|
+
const sortedCommands = Object.entries(stats.commandCounts).sort((a, b) => b[1] - a[1]);
|
|
44
|
+
for (const [command, count] of sortedCommands) {
|
|
45
|
+
console.log(` ${command.padEnd(20)} ${(0, colors_1.colorize)(String(count), 'cyan')} times`);
|
|
46
|
+
}
|
|
47
|
+
console.log('');
|
|
48
|
+
};
|
|
49
|
+
function registerHistoryCommand(parent) {
|
|
50
|
+
const history = parent
|
|
51
|
+
.command('history')
|
|
52
|
+
.alias('h')
|
|
53
|
+
.description('View operation history');
|
|
54
|
+
history
|
|
55
|
+
.command('show', { isDefault: true })
|
|
56
|
+
.description('Show recent operations')
|
|
57
|
+
.argument('[limit]', 'Number of records to show', '20')
|
|
58
|
+
.option('--command <cmd>', 'Filter by command')
|
|
59
|
+
.option('--workspace <name>', 'Filter by workspace')
|
|
60
|
+
.action(async (limit, opts) => {
|
|
61
|
+
await handleHistoryShow(parseInt(limit) || 20, opts);
|
|
62
|
+
});
|
|
63
|
+
history
|
|
64
|
+
.command('stats')
|
|
65
|
+
.description('Show detailed statistics')
|
|
66
|
+
.action(async () => {
|
|
67
|
+
(0, logger_1.logStep)('Calculating statistics...');
|
|
68
|
+
const stats = await (0, history_1.getOperationStats)();
|
|
69
|
+
displayStats(stats);
|
|
70
|
+
});
|
|
71
|
+
history
|
|
72
|
+
.command('clear')
|
|
73
|
+
.description('Clear all history')
|
|
74
|
+
.action(async (opts, cmd) => {
|
|
75
|
+
const globalOpts = (0, command_helpers_1.getGlobalOpts)(cmd);
|
|
76
|
+
if (globalOpts.yes) {
|
|
77
|
+
await (0, history_1.clearHistory)();
|
|
78
|
+
(0, logger_1.logSuccess)('Operation history cleared');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
82
|
+
{
|
|
83
|
+
type: 'confirm',
|
|
84
|
+
name: 'confirm',
|
|
85
|
+
message: 'Are you sure you want to clear operation history?',
|
|
86
|
+
default: false,
|
|
87
|
+
},
|
|
88
|
+
]);
|
|
89
|
+
if (confirm) {
|
|
90
|
+
await (0, history_1.clearHistory)();
|
|
91
|
+
(0, logger_1.logSuccess)('Operation history cleared');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
(0, logger_1.logInfo)('Operation cancelled');
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function handleHistoryShow(limit, opts) {
|
|
99
|
+
try {
|
|
100
|
+
(0, logger_1.logStep)(`Fetching operation history (last ${limit} records)...`);
|
|
101
|
+
let records;
|
|
102
|
+
if (opts.command || opts.workspace) {
|
|
103
|
+
records = await (0, history_1.filterHistory)(opts.command, opts.workspace);
|
|
104
|
+
records = records.slice(0, limit);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
records = await (0, history_1.readHistory)(limit);
|
|
108
|
+
}
|
|
109
|
+
displayHistoryTable(records);
|
|
110
|
+
const stats = await (0, history_1.getOperationStats)();
|
|
111
|
+
console.log((0, colors_1.colorize)('Quick Stats:', 'bright'));
|
|
112
|
+
console.log(` Total Operations: ${stats.totalOperations}`);
|
|
113
|
+
console.log(` Success Rate: ${stats.successRate.toFixed(1)}%`);
|
|
114
|
+
console.log(` Average Duration: ${(stats.avgDuration / 1000).toFixed(1)}s`);
|
|
115
|
+
console.log('');
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
(0, logger_1.logError)('Failed to retrieve history');
|
|
119
|
+
if (error instanceof Error) {
|
|
120
|
+
(0, logger_1.logError)(error.message);
|
|
121
|
+
}
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerListCommand = registerListCommand;
|
|
40
|
+
exports.main = main;
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const fsPromises = __importStar(require("fs/promises"));
|
|
44
|
+
const workspace_meta_1 = require("../utils/workspace-meta");
|
|
45
|
+
const claude_sessions_1 = require("../utils/claude-sessions");
|
|
46
|
+
const logger_1 = require("../utils/logger");
|
|
47
|
+
const colors_1 = require("../utils/colors");
|
|
48
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
49
|
+
const inquirer_autocomplete_prompt_1 = __importDefault(require("inquirer-autocomplete-prompt"));
|
|
50
|
+
const fuzzy = __importStar(require("fuzzy"));
|
|
51
|
+
inquirer_1.default.registerPrompt('autocomplete', inquirer_autocomplete_prompt_1.default);
|
|
52
|
+
const TEMP_FILE = path.join(os.homedir(), '.workspace-last-go');
|
|
53
|
+
const RESUME_FLAG_FILE = path.join(os.homedir(), '.workspace-resume-session');
|
|
54
|
+
function registerListCommand(parent) {
|
|
55
|
+
parent
|
|
56
|
+
.command('list')
|
|
57
|
+
.alias('l')
|
|
58
|
+
.description('List workspaces and navigate to one')
|
|
59
|
+
.option('-a, --archived', 'Show archived workspaces')
|
|
60
|
+
.action(async (opts) => {
|
|
61
|
+
await handleList(opts);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async function handleList(opts) {
|
|
65
|
+
const showArchived = opts.archived ?? false;
|
|
66
|
+
const title = showArchived ? 'Archived Workspaces' : 'Existing Workspaces';
|
|
67
|
+
try {
|
|
68
|
+
const [workspaces, sessions] = await Promise.all([
|
|
69
|
+
showArchived
|
|
70
|
+
? (0, workspace_meta_1.listWorkspaces)(true).then(ws => ws.filter(w => w.metadata?.archivedAt))
|
|
71
|
+
: (0, workspace_meta_1.listWorkspaces)(false),
|
|
72
|
+
(0, claude_sessions_1.getWorkspaceSessions)(),
|
|
73
|
+
]);
|
|
74
|
+
if (workspaces.length === 0) {
|
|
75
|
+
console.log('\n' + '='.repeat(60));
|
|
76
|
+
console.log((0, colors_1.colorize)(title, 'bright'));
|
|
77
|
+
console.log('='.repeat(60) + '\n');
|
|
78
|
+
if (showArchived) {
|
|
79
|
+
(0, logger_1.logInfo)('No archived workspaces found');
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
(0, logger_1.logInfo)('No workspaces found');
|
|
83
|
+
console.log('\nCreate a new workspace with:');
|
|
84
|
+
console.log(' workspace create\n');
|
|
85
|
+
}
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const sessionMap = new Map(sessions.map(s => [s.workspaceName, s]));
|
|
89
|
+
const items = workspaces.map(ws => {
|
|
90
|
+
const session = sessionMap.get(ws.name);
|
|
91
|
+
const repoCount = ws.metadata?.repositories?.length ?? 0;
|
|
92
|
+
return {
|
|
93
|
+
name: ws.name,
|
|
94
|
+
wsPath: ws.path,
|
|
95
|
+
repoCount,
|
|
96
|
+
createdAt: ws.metadata?.createdAt ?? '',
|
|
97
|
+
lastActiveLabel: session?.lastActiveLabel ?? null,
|
|
98
|
+
lastActiveAt: session?.lastActiveAt.getTime() ?? 0,
|
|
99
|
+
hasSession: !!session,
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
items.sort((a, b) => {
|
|
103
|
+
if (a.hasSession && b.hasSession)
|
|
104
|
+
return b.lastActiveAt - a.lastActiveAt;
|
|
105
|
+
if (a.hasSession)
|
|
106
|
+
return -1;
|
|
107
|
+
if (b.hasSession)
|
|
108
|
+
return 1;
|
|
109
|
+
return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
|
|
110
|
+
});
|
|
111
|
+
console.log('');
|
|
112
|
+
console.log((0, colors_1.colorize)(' ' + title, 'bright') + (0, colors_1.colorize)(' (sorted by last active)', 'dim'));
|
|
113
|
+
console.log((0, colors_1.colorize)(' ' + '─'.repeat(54), 'dim'));
|
|
114
|
+
const maxNameLen = Math.max(...items.map(i => i.name.length));
|
|
115
|
+
for (const item of items) {
|
|
116
|
+
const name = item.name.padEnd(maxNameLen);
|
|
117
|
+
const active = item.lastActiveLabel
|
|
118
|
+
? (0, colors_1.colorize)(item.lastActiveLabel, 'yellow')
|
|
119
|
+
: (0, colors_1.colorize)('no session', 'dim');
|
|
120
|
+
const repos = (0, colors_1.colorize)(`${item.repoCount} repos`, 'dim');
|
|
121
|
+
if (showArchived) {
|
|
122
|
+
const ws = workspaces.find(w => w.name === item.name);
|
|
123
|
+
if (ws?.metadata?.archivedAt) {
|
|
124
|
+
const daysSinceArchive = (Date.now() - new Date(ws.metadata.archivedAt).getTime()) / (1000 * 60 * 60 * 24);
|
|
125
|
+
const daysRemaining = Math.max(0, Math.ceil(30 - daysSinceArchive));
|
|
126
|
+
const archiveLabel = (0, colors_1.colorize)(`${daysRemaining}d left`, 'red');
|
|
127
|
+
console.log(` ${(0, colors_1.colorize)(name, 'cyan')} ${active} ${repos} ${archiveLabel}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log(` ${(0, colors_1.colorize)(name, 'cyan')} ${active} ${repos}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
console.log('');
|
|
135
|
+
if (items.length > 0 && (process.stdout.isTTY || process.env.VITEST === 'true')) {
|
|
136
|
+
const { selected } = await inquirer_1.default.prompt([
|
|
137
|
+
{
|
|
138
|
+
type: 'autocomplete',
|
|
139
|
+
name: 'selected',
|
|
140
|
+
message: 'Select workspace to open:',
|
|
141
|
+
source: async (_answersSoFar, input) => {
|
|
142
|
+
const searchInput = input || '';
|
|
143
|
+
const source = items.map(item => ({
|
|
144
|
+
name: `${item.name} ${item.lastActiveLabel ? (0, colors_1.colorize)(item.lastActiveLabel, 'dim') : (0, colors_1.colorize)('no session', 'dim')} ${(0, colors_1.colorize)(`${item.repoCount} repos`, 'dim')}`,
|
|
145
|
+
value: item.name,
|
|
146
|
+
}));
|
|
147
|
+
if (!searchInput)
|
|
148
|
+
return source;
|
|
149
|
+
const results = fuzzy.filter(searchInput, items, {
|
|
150
|
+
extract: (item) => item.name,
|
|
151
|
+
});
|
|
152
|
+
return results.map(result => ({
|
|
153
|
+
name: `${result.original.name} ${result.original.lastActiveLabel ? (0, colors_1.colorize)(result.original.lastActiveLabel, 'dim') : (0, colors_1.colorize)('no session', 'dim')} ${(0, colors_1.colorize)(`${result.original.repoCount} repos`, 'dim')}`,
|
|
154
|
+
value: result.original.name,
|
|
155
|
+
}));
|
|
156
|
+
},
|
|
157
|
+
pageSize: 15,
|
|
158
|
+
},
|
|
159
|
+
]);
|
|
160
|
+
const selectedItem = items.find(i => i.name === selected);
|
|
161
|
+
if (selectedItem) {
|
|
162
|
+
await fsPromises.writeFile(TEMP_FILE, selectedItem.wsPath, 'utf-8');
|
|
163
|
+
if (selectedItem.hasSession) {
|
|
164
|
+
const session = sessionMap.get(selectedItem.name);
|
|
165
|
+
if (session) {
|
|
166
|
+
await fsPromises.writeFile(RESUME_FLAG_FILE, JSON.stringify({
|
|
167
|
+
sessionId: session.sessionId,
|
|
168
|
+
agentType: session.agentType,
|
|
169
|
+
}), 'utf-8');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
(0, logger_1.logError)('Failed to list workspaces');
|
|
177
|
+
if (error instanceof Error) {
|
|
178
|
+
(0, logger_1.logError)(error.message);
|
|
179
|
+
}
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Legacy main() for backward compatibility with tests.
|
|
185
|
+
* Reads process.argv to determine options.
|
|
186
|
+
*/
|
|
187
|
+
async function main() {
|
|
188
|
+
const args = process.argv.slice(2);
|
|
189
|
+
const archived = args.includes('--archived') || args.includes('-a');
|
|
190
|
+
await handleList({ archived });
|
|
191
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerMcpCommands = registerMcpCommands;
|
|
37
|
+
function registerMcpCommands(parent) {
|
|
38
|
+
const mcp = parent
|
|
39
|
+
.command('mcp')
|
|
40
|
+
.description('MCP server management');
|
|
41
|
+
mcp
|
|
42
|
+
.command('install')
|
|
43
|
+
.description('Register MCP server with Claude Code')
|
|
44
|
+
.action(async () => {
|
|
45
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('../../mcp/install')));
|
|
46
|
+
await main('install');
|
|
47
|
+
});
|
|
48
|
+
mcp
|
|
49
|
+
.command('uninstall')
|
|
50
|
+
.description('Unregister the MCP server')
|
|
51
|
+
.action(async () => {
|
|
52
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('../../mcp/install')));
|
|
53
|
+
await main('uninstall');
|
|
54
|
+
});
|
|
55
|
+
mcp
|
|
56
|
+
.command('upgrade')
|
|
57
|
+
.description('Update hooks and skills (no MCP re-register)')
|
|
58
|
+
.action(async () => {
|
|
59
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('../../mcp/install')));
|
|
60
|
+
await main('upgrade');
|
|
61
|
+
});
|
|
62
|
+
mcp
|
|
63
|
+
.command('status')
|
|
64
|
+
.description('Check MCP server registration')
|
|
65
|
+
.action(async () => {
|
|
66
|
+
const { main } = await Promise.resolve().then(() => __importStar(require('../../mcp/install')));
|
|
67
|
+
await main('status');
|
|
68
|
+
});
|
|
69
|
+
}
|