@thebushidocollective/han 1.18.1 → 1.18.2
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 +1 -0
- package/dist/bundle.js +1 -1
- package/package.json +6 -6
- package/dist/lib/align-progress.d.ts +0 -9
- package/dist/lib/align-progress.d.ts.map +0 -1
- package/dist/lib/align-progress.js +0 -58
- package/dist/lib/align-progress.js.map +0 -1
- package/dist/lib/align.d.ts +0 -11
- package/dist/lib/align.d.ts.map +0 -1
- package/dist/lib/align.js +0 -116
- package/dist/lib/align.js.map +0 -1
- package/dist/lib/detect-plugins-prompt.d.ts +0 -5
- package/dist/lib/detect-plugins-prompt.d.ts.map +0 -1
- package/dist/lib/detect-plugins-prompt.js +0 -68
- package/dist/lib/detect-plugins-prompt.js.map +0 -1
package/README.md
CHANGED
package/dist/bundle.js
CHANGED
|
@@ -456,7 +456,7 @@ Failed when trying to run \`${u}\` in directory: \`${I}\`
|
|
|
456
456
|
`);for(let c of r){console.error(` ${c.plugin}:`);for(let o of c.errors)console.error(` - ${o}`)}console.log(),process.exit(1)}let u=Object.keys(a);u.length===0&&(console.log("No hooks configured in any installed plugins"),process.exit(0)),console.log(`
|
|
457
457
|
Found hooks:`);for(let c of u.sort()){let o=a[c].length,h=[...new Set(a[c].map(E=>E.plugin))].join(", ");console.log(` ${c}: ${o} hook(s) from ${h}`)}console.log(),console.log("\u2705 All hooks validated successfully"),console.log(`
|
|
458
458
|
Tip: Run with --execute to test hook execution
|
|
459
|
-
`),process.exit(0)}var XB,RD,r$,BH=Ue(async()=>{"use strict";XB=mt(hH(),1);await Ec();RD=mt(Fn(),1);await gH();r$=["Notification","PostToolUse","PreCompact","PreToolUse","SessionEnd","SessionStart","Stop","SubagentStop","UserPromptSubmit"]});import{readFileSync as c$}from"node:fs";import{dirname as f$,join as d$}from"node:path";import{fileURLToPath as h$}from"node:url";var Ob=mt(Nb(),1),{program:I$,createCommand:Q$,createArgument:S$,createOption:_$,CommanderError:F$,InvalidArgumentError:b$,InvalidOptionArgumentError:x$,Command:Mb,Argument:R$,Option:w$,Help:T$}=Ob.default;var g$="1.18.
|
|
459
|
+
`),process.exit(0)}var XB,RD,r$,BH=Ue(async()=>{"use strict";XB=mt(hH(),1);await Ec();RD=mt(Fn(),1);await gH();r$=["Notification","PostToolUse","PreCompact","PreToolUse","SessionEnd","SessionStart","Stop","SubagentStop","UserPromptSubmit"]});import{readFileSync as c$}from"node:fs";import{dirname as f$,join as d$}from"node:path";import{fileURLToPath as h$}from"node:url";var Ob=mt(Nb(),1),{program:I$,createCommand:Q$,createArgument:S$,createOption:_$,CommanderError:F$,InvalidArgumentError:b$,InvalidOptionArgumentError:x$,Command:Mb,Argument:R$,Option:w$,Help:T$}=Ob.default;var g$="1.18.2",wd=new Mb;wd.name("han").description("Utilities for The Bushido Collective's Han Code Marketplace").version(g$);var G2=wd.command("plugin").description("Manage Han plugins");G2.command("install [plugin-names...]").description("Install plugins interactively, or use --auto to auto-detect").option("--auto","Auto-detect and install recommended plugins").option("--scope <scope>",'Installation scope: "project" (.claude/settings.json) or "local" (.claude/settings.local.json)',"project").action(async(e,t)=>{try{let a=t.scope||"project";if(a!=="project"&&a!=="local"&&(console.error('Error: --scope must be either "project" or "local"'),process.exit(1)),t.auto){let{install:r}=await sB().then(()=>iB);await r(a)}else if(e.length>0){let{installPlugins:r}=await Promise.resolve().then(()=>(cO(),AO));await r(e,a)}else{let{installInteractive:r}=await sB().then(()=>iB);await r(a)}process.exit(0)}catch(a){console.error("Error during plugin installation:",a instanceof Error?a.message:a),process.exit(1)}});G2.command("uninstall <plugin-names...>").description("Uninstall one or more plugins").option("--scope <scope>",'Installation scope: "project" (.claude/settings.json) or "local" (.claude/settings.local.json)',"project").action(async(e,t)=>{try{let a=t.scope||"project";a!=="project"&&a!=="local"&&(console.error('Error: --scope must be either "project" or "local"'),process.exit(1));let{uninstallPlugins:r}=await Promise.resolve().then(()=>(hO(),dO));await r(e,a),process.exit(0)}catch(a){console.error("Error during plugin uninstallation:",a instanceof Error?a.message:a),process.exit(1)}});G2.command("search [query]").description("Search for plugins in the Han marketplace").action(async e=>{try{let{searchPlugins:t}=await Promise.resolve().then(()=>(E8(),m8));await t(e),process.exit(0)}catch(t){console.error("Error during plugin search:",t instanceof Error?t.message:t),process.exit(1)}});wd.command("uninstall").description("Remove Han marketplace and plugins").action(async()=>{let{uninstall:e}=await Promise.resolve().then(()=>(B8(),y8));e(),process.exit(0)});var vH=wd.command("hook").description("Hook utilities");vH.command("run [ignored...]").description("Run a command across directories. Requires -- before command (e.g., han hook run --dirs-with package.json -- npm test)").option("--fail-fast","Stop on first failure").option("--dirs-with <file>","Only run in directories containing the specified file").option("--test-dir <command>","Only include directories where this command exits 0 (runs silently)").option("--stdin","Read stdin and pass it to each subcommand").allowUnknownOption().action(async(e,t)=>{let a=process.argv.indexOf("--");a===-1&&(console.error(`Error: Command must be specified after -- separator
|
|
460
460
|
|
|
461
461
|
Example: han hook run --dirs-with package.json -- npm test`),process.exit(1));let r=process.argv.slice(a+1);r.length===0&&(console.error(`Error: No command specified after --
|
|
462
462
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thebushidocollective/han",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.2",
|
|
4
4
|
"description": "CLI for installing and managing curated Claude Code plugins from the Han marketplace",
|
|
5
5
|
"main": "dist/lib/main.js",
|
|
6
6
|
"types": "dist/lib/main.d.ts",
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
"README.md"
|
|
52
52
|
],
|
|
53
53
|
"optionalDependencies": {
|
|
54
|
-
"@thebushidocollective/han-darwin-arm64": "1.18.
|
|
55
|
-
"@thebushidocollective/han-darwin-x64": "1.18.
|
|
56
|
-
"@thebushidocollective/han-linux-x64": "1.18.
|
|
57
|
-
"@thebushidocollective/han-linux-arm64": "1.18.
|
|
58
|
-
"@thebushidocollective/han-win32-x64": "1.18.
|
|
54
|
+
"@thebushidocollective/han-darwin-arm64": "1.18.2",
|
|
55
|
+
"@thebushidocollective/han-darwin-x64": "1.18.2",
|
|
56
|
+
"@thebushidocollective/han-linux-x64": "1.18.2",
|
|
57
|
+
"@thebushidocollective/han-linux-arm64": "1.18.2",
|
|
58
|
+
"@thebushidocollective/han-win32-x64": "1.18.2"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@anthropic-ai/claude-agent-sdk": "0.1.50",
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { DetectPluginsCallbacks } from "./shared.js";
|
|
2
|
-
interface AlignProgressProps {
|
|
3
|
-
detectPlugins: (callbacks: DetectPluginsCallbacks) => Promise<void>;
|
|
4
|
-
onAlignComplete: (plugins: string[]) => void;
|
|
5
|
-
onAlignError: (error: Error) => void;
|
|
6
|
-
}
|
|
7
|
-
export declare const AlignProgress: React.FC<AlignProgressProps>;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=align-progress.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"align-progress.d.ts","sourceRoot":"","sources":["../../lib/align-progress.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAe,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEvE,UAAU,kBAAkB;IAC3B,aAAa,EAAE,CAAC,SAAS,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA+MtD,CAAC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text } from "ink";
|
|
3
|
-
import Spinner from "ink-spinner";
|
|
4
|
-
import { useEffect, useState } from "react";
|
|
5
|
-
import { MarkdownWrapper } from "./markdown-wrapper.js";
|
|
6
|
-
export const AlignProgress = ({ detectPlugins, onAlignComplete, onAlignError, }) => {
|
|
7
|
-
const [phase, setPhase] = useState("analyzing");
|
|
8
|
-
const [plugins, setPlugins] = useState([]);
|
|
9
|
-
const [fullText, setFullText] = useState("");
|
|
10
|
-
const [currentTool, setCurrentTool] = useState(null);
|
|
11
|
-
const [error, setError] = useState(null);
|
|
12
|
-
const [toolsUsed, setToolsUsed] = useState(new Set());
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
const callbacks = {
|
|
15
|
-
onUpdate: (update) => {
|
|
16
|
-
if (update.type === "text") {
|
|
17
|
-
setFullText((prev) => prev + update.content);
|
|
18
|
-
}
|
|
19
|
-
else if (update.type === "tool" && update.toolName) {
|
|
20
|
-
setCurrentTool(update.toolName);
|
|
21
|
-
setToolsUsed((prev) => new Set([...prev, update.toolName]));
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
onComplete: (detectedPlugins, analysisText) => {
|
|
25
|
-
setPlugins(detectedPlugins);
|
|
26
|
-
setFullText(analysisText);
|
|
27
|
-
setCurrentTool(null);
|
|
28
|
-
setPhase("analyzed");
|
|
29
|
-
setTimeout(() => {
|
|
30
|
-
setPhase("aligning");
|
|
31
|
-
setTimeout(() => {
|
|
32
|
-
setPhase("complete");
|
|
33
|
-
onAlignComplete(detectedPlugins);
|
|
34
|
-
}, 500);
|
|
35
|
-
}, 1000);
|
|
36
|
-
},
|
|
37
|
-
onError: (err) => {
|
|
38
|
-
setError(err.message);
|
|
39
|
-
setPhase("error");
|
|
40
|
-
onAlignError(err);
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
detectPlugins(callbacks);
|
|
44
|
-
}, [detectPlugins, onAlignComplete, onAlignError]);
|
|
45
|
-
const getToolEmoji = (toolName) => {
|
|
46
|
-
const emojiMap = {
|
|
47
|
-
web_fetch: "🌐",
|
|
48
|
-
read_file: "📄",
|
|
49
|
-
glob: "🔍",
|
|
50
|
-
grep: "🔎",
|
|
51
|
-
};
|
|
52
|
-
return emojiMap[toolName] || "🔧";
|
|
53
|
-
};
|
|
54
|
-
return (_jsxs(Box, { flexDirection: "column", paddingY: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "\uD83E\uDD16 Han Plugin Alignment" }) }), phase === "analyzing" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "yellow", children: [_jsx(Spinner, { type: "dots" }), " Analyzing codebase..."] }) }), currentTool && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "blue", children: [getToolEmoji(currentTool), " ", currentTool] }) })), toolsUsed.size > 0 && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: ["Tools used: ", Array.from(toolsUsed).join(", ")] }) })), fullText && (_jsxs(Box, { marginTop: 1, paddingX: 1, borderStyle: "round", borderColor: "gray", flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, bold: true, children: [_jsx(Spinner, { type: "star" }), " Agent thinking:"] }) }), _jsx(MarkdownWrapper, { children: fullText })] }))] })), (phase === "analyzed" ||
|
|
55
|
-
phase === "aligning" ||
|
|
56
|
-
phase === "complete") && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "green", children: "\u2705 Analysis complete" }) }), fullText && (_jsxs(Box, { marginBottom: 1, paddingX: 1, borderStyle: "round", borderColor: "cyan", flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: "cyan", children: "\uD83D\uDCCB Agent Analysis:" }) }), _jsx(MarkdownWrapper, { children: fullText })] })), plugins.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, color: "green", children: "\u2728 Recommended plugins:" }), plugins.sort().map((plugin) => (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { children: ["\u2022 ", plugin] }) }, plugin)))] })), phase === "aligning" && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "yellow", children: [_jsx(Spinner, { type: "dots" }), " Aligning plugins in Claude Code settings..."] }) })), phase === "complete" && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "green", children: "\u2705 Updated Claude Code settings" }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "green", bold: true, children: "\u2705 Alignment complete!" }) }), _jsx(Box, { children: _jsx(Text, { color: "blue", children: "\uD83D\uDCA1 Restart Claude Code to load plugin changes." }) })] }))] })), phase === "error" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "red", bold: true, children: "\u274C Error" }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "red", children: error }) }), fullText && (_jsxs(Box, { marginBottom: 1, paddingX: 1, borderStyle: "round", borderColor: "red", flexDirection: "column", children: [_jsx(Text, { bold: true, color: "red", children: "Partial Analysis:" }), _jsx(Box, { children: _jsx(MarkdownWrapper, { children: fullText }) })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "\u26A0\uFE0F Could not complete alignment, leaving plugins unchanged" }) })] }))] }));
|
|
57
|
-
};
|
|
58
|
-
//# sourceMappingURL=align-progress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"align-progress.js","sourceRoot":"","sources":["../../lib/align-progress.tsx"],"names":[],"mappings":"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"}
|
package/dist/lib/align.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface AlignResult {
|
|
2
|
-
added: string[];
|
|
3
|
-
removed: string[];
|
|
4
|
-
unchanged: string[];
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* SDK-based align command with Ink UI
|
|
8
|
-
* If scope is not provided, auto-detects which scope(s) have Han installed
|
|
9
|
-
*/
|
|
10
|
-
export declare function align(scope?: "project" | "local"): Promise<void>;
|
|
11
|
-
//# sourceMappingURL=align.d.ts.map
|
package/dist/lib/align.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"align.d.ts","sourceRoot":"","sources":["../../lib/align.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB;AAuDD;;;GAGG;AACH,wBAAsB,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtE"}
|
package/dist/lib/align.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { render } from "ink";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { detectHanScopes, detectPluginsWithAgent, ensureClaudeDirectory, getInstalledPlugins, HAN_MARKETPLACE_REPO, readOrCreateSettings, writeSettings, } from "./shared.js";
|
|
4
|
-
/**
|
|
5
|
-
* Compare current plugins with recommended plugins and update settings
|
|
6
|
-
*/
|
|
7
|
-
function alignPluginsInSettings(recommendedPlugins, scope = "project") {
|
|
8
|
-
ensureClaudeDirectory();
|
|
9
|
-
const settings = readOrCreateSettings(scope);
|
|
10
|
-
const currentPlugins = getInstalledPlugins(scope);
|
|
11
|
-
// Calculate differences
|
|
12
|
-
const added = [];
|
|
13
|
-
const removed = [];
|
|
14
|
-
const unchanged = [];
|
|
15
|
-
// Add Han marketplace if not present
|
|
16
|
-
if (!settings?.extraKnownMarketplaces?.han) {
|
|
17
|
-
settings.extraKnownMarketplaces = {
|
|
18
|
-
...settings.extraKnownMarketplaces,
|
|
19
|
-
han: { source: { source: "github", repo: HAN_MARKETPLACE_REPO } },
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
// Initialize enabledPlugins if needed
|
|
23
|
-
if (!settings.enabledPlugins) {
|
|
24
|
-
settings.enabledPlugins = {};
|
|
25
|
-
}
|
|
26
|
-
// Find plugins to add (in recommended but not in current)
|
|
27
|
-
for (const plugin of recommendedPlugins) {
|
|
28
|
-
if (!currentPlugins.includes(plugin)) {
|
|
29
|
-
added.push(plugin);
|
|
30
|
-
settings.enabledPlugins[`${plugin}@han`] = true;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
unchanged.push(plugin);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// Find plugins to remove (in current but not in recommended)
|
|
37
|
-
for (const plugin of currentPlugins) {
|
|
38
|
-
if (!recommendedPlugins.includes(plugin)) {
|
|
39
|
-
removed.push(plugin);
|
|
40
|
-
delete settings.enabledPlugins[`${plugin}@han`];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
writeSettings(settings, scope);
|
|
44
|
-
return { added, removed, unchanged };
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* SDK-based align command with Ink UI
|
|
48
|
-
* If scope is not provided, auto-detects which scope(s) have Han installed
|
|
49
|
-
*/
|
|
50
|
-
export async function align(scope) {
|
|
51
|
-
// Auto-detect scopes if not explicitly provided
|
|
52
|
-
let scopesToAlign;
|
|
53
|
-
if (scope) {
|
|
54
|
-
scopesToAlign = [scope];
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
scopesToAlign = detectHanScopes();
|
|
58
|
-
// Default to project if Han not installed anywhere
|
|
59
|
-
if (scopesToAlign.length === 0) {
|
|
60
|
-
scopesToAlign = ["project"];
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Align each detected scope
|
|
64
|
-
for (const currentScope of scopesToAlign) {
|
|
65
|
-
await alignSingleScope(currentScope);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Align plugins for a single scope
|
|
70
|
-
*/
|
|
71
|
-
async function alignSingleScope(scope) {
|
|
72
|
-
// Import Ink UI component dynamically
|
|
73
|
-
const { AlignProgress } = await import("./align-progress.js");
|
|
74
|
-
let resolveCompletion;
|
|
75
|
-
let rejectCompletion;
|
|
76
|
-
const completionPromise = new Promise((resolve, reject) => {
|
|
77
|
-
resolveCompletion = resolve;
|
|
78
|
-
rejectCompletion = reject;
|
|
79
|
-
});
|
|
80
|
-
const filename = scope === "local" ? "settings.local.json" : "settings.json";
|
|
81
|
-
console.log(`Aligning plugins in ./.claude/${filename}...\n`);
|
|
82
|
-
const { unmount } = render(React.createElement(AlignProgress, {
|
|
83
|
-
detectPlugins: detectPluginsWithAgent,
|
|
84
|
-
onAlignComplete: (plugins) => {
|
|
85
|
-
const result = alignPluginsInSettings(plugins, scope);
|
|
86
|
-
// Report changes
|
|
87
|
-
if (result.added.length > 0) {
|
|
88
|
-
console.log(`\n✓ Added ${result.added.length} plugin(s): ${result.added.join(", ")}`);
|
|
89
|
-
}
|
|
90
|
-
if (result.removed.length > 0) {
|
|
91
|
-
console.log(`\n✓ Removed ${result.removed.length} plugin(s): ${result.removed.join(", ")}`);
|
|
92
|
-
}
|
|
93
|
-
if (result.added.length === 0 && result.removed.length === 0) {
|
|
94
|
-
console.log("\n✓ No changes needed - plugins are already aligned");
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
console.log("\n⚠️ Please restart Claude Code to load the plugin changes");
|
|
98
|
-
}
|
|
99
|
-
if (resolveCompletion)
|
|
100
|
-
resolveCompletion();
|
|
101
|
-
},
|
|
102
|
-
onAlignError: (error) => {
|
|
103
|
-
if (rejectCompletion)
|
|
104
|
-
rejectCompletion(error);
|
|
105
|
-
},
|
|
106
|
-
}));
|
|
107
|
-
try {
|
|
108
|
-
await completionPromise;
|
|
109
|
-
// Wait a moment for the UI to show completion message
|
|
110
|
-
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
111
|
-
}
|
|
112
|
-
finally {
|
|
113
|
-
unmount();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=align.js.map
|
package/dist/lib/align.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"align.js","sourceRoot":"","sources":["../../lib/align.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACN,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,GACb,MAAM,aAAa,CAAC;AAQrB;;GAEG;AACH,SAAS,sBAAsB,CAC9B,kBAA4B,EAC5B,QAA6B,SAAS;IAEtC,qBAAqB,EAAE,CAAC;IAExB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAElD,wBAAwB;IACxB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,qCAAqC;IACrC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,EAAE,GAAG,EAAE,CAAC;QAC5C,QAAQ,CAAC,sBAAsB,GAAG;YACjC,GAAG,QAAQ,CAAC,sBAAsB;YAClC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE;SACjE,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC9B,QAAQ,CAAC,cAAc,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,0DAA0D;IAC1D,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC;QACjD,CAAC;aAAM,CAAC;YACP,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,6DAA6D;IAC7D,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO,QAAQ,CAAC,cAAc,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE/B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,KAA2B;IACtD,gDAAgD;IAChD,IAAI,aAAyC,CAAC;IAC9C,IAAI,KAAK,EAAE,CAAC;QACX,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,eAAe,EAAE,CAAC;QAClC,mDAAmD;QACnD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,aAAa,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAED,4BAA4B;IAC5B,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QAC1C,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,KAA0B;IACzD,sCAAsC;IACtC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAE9D,IAAI,iBAA2C,CAAC;IAChD,IAAI,gBAAsD,CAAC;IAE3D,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/D,iBAAiB,GAAG,OAAO,CAAC;QAC5B,gBAAgB,GAAG,MAAM,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,eAAe,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,OAAO,CAAC,CAAC;IAE9D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CACzB,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE;QAClC,aAAa,EAAE,sBAAsB;QACrC,eAAe,EAAE,CAAC,OAAiB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAEtD,iBAAiB;YACjB,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CACV,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,eAAe,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CACV,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,eAAe,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9E,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CACV,6DAA6D,CAC7D,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB;gBAAE,iBAAiB,EAAE,CAAC;QAC5C,CAAC;QACD,YAAY,EAAE,CAAC,KAAY,EAAE,EAAE;YAC9B,IAAI,gBAAgB;gBAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;KACD,CAAC,CACF,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,iBAAiB,CAAC;QACxB,sDAAsD;QACtD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACV,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared agent prompt for detecting and recommending Han plugins
|
|
3
|
-
*/
|
|
4
|
-
export declare const detectPluginsPrompt = "You are a Han plugin installer assistant. Your goal is to analyze the current codebase and recommend appropriate Claude Code plugins from the Han marketplace.\n\nThe available plugins from the marketplace are provided below. ONLY recommend plugins from this list.\n\nPlugin Categories:\n- buki-* (\u6B66\u5668 weapons): Skills for specific technologies and frameworks\n- do-* (\u9053 disciplines): Specialized agents for development practices and workflows\n- sensei-* (\u5148\u751F teachers): MCP servers for external integrations\n- bushido: Core quality principles (ALWAYS recommend this)\n\nYour Analysis Process:\n\nSTEP 1: Review pre-computed codebase statistics (if provided)\n- Check if CODEBASE STATISTICS section is provided in the prompt\n- If provided, you have:\n * File extension counts (e.g., .ts: 456, .py: 123) - interpret these as technologies\n - .ts, .tsx, .jsx = TypeScript/JavaScript\n - .py = Python\n - .rs = Rust\n - .go = Go\n - .rb = Ruby\n - .ex, .exs = Elixir\n - .vue = Vue.js\n - etc.\n * Config file names (e.g., package.json, Cargo.toml, go.mod) - these reveal frameworks and tools\n- If statistics are NOT provided, use Glob to discover file types\n * Example: glob(\"**/*.ts\") to find TypeScript files\n * Example: glob(\"**/*.py\") to find Python files\n\nSTEP 2: Examine key configuration files\n- Config files are already identified in the statistics (if provided)\n- Use Read tool to examine important config files:\n * package.json - reveals Node.js frameworks, dependencies\n * Cargo.toml - reveals Rust dependencies\n * go.mod - reveals Go dependencies\n * requirements.txt, pyproject.toml - reveals Python dependencies\n * mix.exs - reveals Elixir dependencies\n- Use Grep to search for framework-specific patterns\n * Example: grep(\"import.*react\") to confirm React usage\n * Example: grep(\"from django\") to confirm Django usage\n\nSTEP 3: Identify technologies and patterns\n- Programming languages (TypeScript, Python, Go, Rust, Ruby, etc.)\n- Frameworks and libraries (React, Vue, Django, Rails, etc.)\n- Testing frameworks (Jest, Pytest, RSpec, etc.)\n- Build tools and infrastructure (Docker, Kubernetes, etc.)\n- Development practices (API development, frontend development, mobile, etc.)\n- Content patterns (blog posts, documentation, CMS usage)\n- CI/CD configurations\n- Accessibility tooling\n\nSTEP 4: Match findings to available plugins\n- Look at the plugin descriptions and keywords below\n- Cross-reference detected technologies with available buki-* plugins\n- Cross-reference development practices with available do-* plugins\n- Cross-reference integrations with available sensei-* plugins\n- ONLY recommend plugins from the list provided\n- Aim for 3-8 total plugins that best match the codebase\n- Always include \"bushido\" as it's the core plugin\n\nReturn ONLY a JSON array of recommended plugin names from the available plugins list:\n[\"bushido\", \"buki-typescript\", \"buki-react\", \"do-frontend-development\"]\n\nCRITICAL: Only recommend plugins that appear in the AVAILABLE PLUGINS list below. Never recommend plugins not in the list.";
|
|
5
|
-
//# sourceMappingURL=detect-plugins-prompt.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detect-plugins-prompt.d.ts","sourceRoot":"","sources":["../../lib/detect-plugins-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,mBAAmB,ilGA+D2F,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared agent prompt for detecting and recommending Han plugins
|
|
3
|
-
*/
|
|
4
|
-
export const detectPluginsPrompt = `You are a Han plugin installer assistant. Your goal is to analyze the current codebase and recommend appropriate Claude Code plugins from the Han marketplace.
|
|
5
|
-
|
|
6
|
-
The available plugins from the marketplace are provided below. ONLY recommend plugins from this list.
|
|
7
|
-
|
|
8
|
-
Plugin Categories:
|
|
9
|
-
- buki-* (武器 weapons): Skills for specific technologies and frameworks
|
|
10
|
-
- do-* (道 disciplines): Specialized agents for development practices and workflows
|
|
11
|
-
- sensei-* (先生 teachers): MCP servers for external integrations
|
|
12
|
-
- bushido: Core quality principles (ALWAYS recommend this)
|
|
13
|
-
|
|
14
|
-
Your Analysis Process:
|
|
15
|
-
|
|
16
|
-
STEP 1: Review pre-computed codebase statistics (if provided)
|
|
17
|
-
- Check if CODEBASE STATISTICS section is provided in the prompt
|
|
18
|
-
- If provided, you have:
|
|
19
|
-
* File extension counts (e.g., .ts: 456, .py: 123) - interpret these as technologies
|
|
20
|
-
- .ts, .tsx, .jsx = TypeScript/JavaScript
|
|
21
|
-
- .py = Python
|
|
22
|
-
- .rs = Rust
|
|
23
|
-
- .go = Go
|
|
24
|
-
- .rb = Ruby
|
|
25
|
-
- .ex, .exs = Elixir
|
|
26
|
-
- .vue = Vue.js
|
|
27
|
-
- etc.
|
|
28
|
-
* Config file names (e.g., package.json, Cargo.toml, go.mod) - these reveal frameworks and tools
|
|
29
|
-
- If statistics are NOT provided, use Glob to discover file types
|
|
30
|
-
* Example: glob("**/*.ts") to find TypeScript files
|
|
31
|
-
* Example: glob("**/*.py") to find Python files
|
|
32
|
-
|
|
33
|
-
STEP 2: Examine key configuration files
|
|
34
|
-
- Config files are already identified in the statistics (if provided)
|
|
35
|
-
- Use Read tool to examine important config files:
|
|
36
|
-
* package.json - reveals Node.js frameworks, dependencies
|
|
37
|
-
* Cargo.toml - reveals Rust dependencies
|
|
38
|
-
* go.mod - reveals Go dependencies
|
|
39
|
-
* requirements.txt, pyproject.toml - reveals Python dependencies
|
|
40
|
-
* mix.exs - reveals Elixir dependencies
|
|
41
|
-
- Use Grep to search for framework-specific patterns
|
|
42
|
-
* Example: grep("import.*react") to confirm React usage
|
|
43
|
-
* Example: grep("from django") to confirm Django usage
|
|
44
|
-
|
|
45
|
-
STEP 3: Identify technologies and patterns
|
|
46
|
-
- Programming languages (TypeScript, Python, Go, Rust, Ruby, etc.)
|
|
47
|
-
- Frameworks and libraries (React, Vue, Django, Rails, etc.)
|
|
48
|
-
- Testing frameworks (Jest, Pytest, RSpec, etc.)
|
|
49
|
-
- Build tools and infrastructure (Docker, Kubernetes, etc.)
|
|
50
|
-
- Development practices (API development, frontend development, mobile, etc.)
|
|
51
|
-
- Content patterns (blog posts, documentation, CMS usage)
|
|
52
|
-
- CI/CD configurations
|
|
53
|
-
- Accessibility tooling
|
|
54
|
-
|
|
55
|
-
STEP 4: Match findings to available plugins
|
|
56
|
-
- Look at the plugin descriptions and keywords below
|
|
57
|
-
- Cross-reference detected technologies with available buki-* plugins
|
|
58
|
-
- Cross-reference development practices with available do-* plugins
|
|
59
|
-
- Cross-reference integrations with available sensei-* plugins
|
|
60
|
-
- ONLY recommend plugins from the list provided
|
|
61
|
-
- Aim for 3-8 total plugins that best match the codebase
|
|
62
|
-
- Always include "bushido" as it's the core plugin
|
|
63
|
-
|
|
64
|
-
Return ONLY a JSON array of recommended plugin names from the available plugins list:
|
|
65
|
-
["bushido", "buki-typescript", "buki-react", "do-frontend-development"]
|
|
66
|
-
|
|
67
|
-
CRITICAL: Only recommend plugins that appear in the AVAILABLE PLUGINS list below. Never recommend plugins not in the list.`;
|
|
68
|
-
//# sourceMappingURL=detect-plugins-prompt.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detect-plugins-prompt.js","sourceRoot":"","sources":["../../lib/detect-plugins-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2HA+DwF,CAAC"}
|