@tacuchi/agent-workflow-cli 5.17.0 → 5.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/application/hook-git-commit-advisor.d.ts +17 -0
  2. package/dist/application/hook-git-commit-advisor.d.ts.map +1 -0
  3. package/dist/application/hook-git-commit-advisor.js +106 -0
  4. package/dist/application/hook-git-commit-advisor.js.map +1 -0
  5. package/dist/application/self/plugin-cache-clear.d.ts +18 -0
  6. package/dist/application/self/plugin-cache-clear.d.ts.map +1 -0
  7. package/dist/application/self/plugin-cache-clear.js +133 -0
  8. package/dist/application/self/plugin-cache-clear.js.map +1 -0
  9. package/dist/application/self/plugin-cache-reload.d.ts +16 -0
  10. package/dist/application/self/plugin-cache-reload.d.ts.map +1 -0
  11. package/dist/application/self/plugin-cache-reload.js +171 -0
  12. package/dist/application/self/plugin-cache-reload.js.map +1 -0
  13. package/dist/cli/commands/hook.d.ts.map +1 -1
  14. package/dist/cli/commands/hook.js +15 -2
  15. package/dist/cli/commands/hook.js.map +1 -1
  16. package/dist/cli/commands/plugin-cache.d.ts +3 -0
  17. package/dist/cli/commands/plugin-cache.d.ts.map +1 -0
  18. package/dist/cli/commands/plugin-cache.js +34 -0
  19. package/dist/cli/commands/plugin-cache.js.map +1 -0
  20. package/dist/cli/help-groups.d.ts.map +1 -1
  21. package/dist/cli/help-groups.js +1 -0
  22. package/dist/cli/help-groups.js.map +1 -1
  23. package/dist/cli/main.js +2 -0
  24. package/dist/cli/main.js.map +1 -1
  25. package/dist/cli/tui/app.js +2 -2
  26. package/dist/cli/tui/app.js.map +1 -1
  27. package/dist/cli/tui/tabs/plugins-tab.d.ts.map +1 -1
  28. package/dist/cli/tui/tabs/plugins-tab.js +232 -57
  29. package/dist/cli/tui/tabs/plugins-tab.js.map +1 -1
  30. package/package.json +1 -1
@@ -0,0 +1,17 @@
1
+ import type { EnvPort } from "../ports/env.js";
2
+ import type { FileSystemPort } from "../ports/file-system.js";
3
+ import type { PathsService } from "./paths-service.js";
4
+ export interface GitCommitAdvisorResult {
5
+ exitCode: 0;
6
+ stderr?: string;
7
+ }
8
+ export interface GitCommitAdvisorInput {
9
+ stdin: string;
10
+ fs: FileSystemPort;
11
+ env: EnvPort;
12
+ paths: PathsService;
13
+ /** Display name used as message prefix (e.g., "acme-core", "agent-workflow"). */
14
+ displayName?: string;
15
+ }
16
+ export declare function runGitCommitAdvisor(input: GitCommitAdvisorInput): Promise<GitCommitAdvisorResult>;
17
+ //# sourceMappingURL=hook-git-commit-advisor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-git-commit-advisor.d.ts","sourceRoot":"","sources":["../../src/application/hook-git-commit-advisor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQvD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,CAAC,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,cAAc,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAsCjC"}
@@ -0,0 +1,106 @@
1
+ import { join } from "node:path";
2
+ import { parseProjectBlock } from "./parsers/project-block.js";
3
+ const REFERENCE_DOC = "skills/session/references/commits-policy.md";
4
+ const GIT_COMMIT_RE = /\bgit\s+commit\b/;
5
+ const COMMIT_MSG_RE = /\s-m\s+(?:"((?:[^"\\]|\\.)*)"|'((?:[^'\\]|\\.)*)')/;
6
+ const SESSION_TAG_RE = /session\d{3}/i;
7
+ const SESSION_CODE_FROM_FOLDER_RE = /^session(\d{3})/;
8
+ export async function runGitCommitAdvisor(input) {
9
+ if ((input.env.get("AW_COMMIT_ADVISOR") ?? "").toLowerCase() === "off") {
10
+ return { exitCode: 0 };
11
+ }
12
+ const payload = parsePayload(input.stdin);
13
+ if (!payload)
14
+ return { exitCode: 0 };
15
+ const toolName = typeof payload.tool_name === "string" ? payload.tool_name : "";
16
+ if (toolName !== "Bash")
17
+ return { exitCode: 0 };
18
+ const command = extractCommand(payload.tool_input);
19
+ if (!command || !GIT_COMMIT_RE.test(command))
20
+ return { exitCode: 0 };
21
+ const message = extractCommitMessage(command);
22
+ if (message === null)
23
+ return { exitCode: 0 };
24
+ const block = await readProjectBlock(input.fs, input.env.cwd(), input.paths);
25
+ if (!block)
26
+ return { exitCode: 0 };
27
+ const activeSession = block.sessions[0];
28
+ if (!activeSession)
29
+ return { exitCode: 0 };
30
+ const sessionCode = extractSessionCode(activeSession.folder);
31
+ if (!sessionCode)
32
+ return { exitCode: 0 };
33
+ if (SESSION_TAG_RE.test(message))
34
+ return { exitCode: 0 };
35
+ const display = input.displayName ?? "agent-workflow";
36
+ return {
37
+ exitCode: 0,
38
+ stderr: formatAdvisorMessage({
39
+ display,
40
+ sessionCode,
41
+ message,
42
+ sessionFolder: activeSession.folder,
43
+ }),
44
+ };
45
+ }
46
+ function parsePayload(stdin) {
47
+ const raw = stdin.trim();
48
+ if (raw.length === 0)
49
+ return null;
50
+ try {
51
+ const parsed = JSON.parse(raw);
52
+ return typeof parsed === "object" && parsed !== null
53
+ ? parsed
54
+ : null;
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ function extractCommand(toolInput) {
61
+ if (typeof toolInput !== "object" || toolInput === null)
62
+ return null;
63
+ const obj = toolInput;
64
+ const cmd = obj.command;
65
+ return typeof cmd === "string" && cmd.length > 0 ? cmd : null;
66
+ }
67
+ function extractCommitMessage(command) {
68
+ const m = command.match(COMMIT_MSG_RE);
69
+ if (!m)
70
+ return null;
71
+ const msg = m[1] ?? m[2];
72
+ if (msg === undefined)
73
+ return null;
74
+ return msg.replace(/\\(.)/g, "$1");
75
+ }
76
+ async function readProjectBlock(fs, cwd, paths) {
77
+ for (const file of [join(cwd, "CLAUDE.md"), join(cwd, "AGENTS.md")]) {
78
+ if (!(await fs.exists(file)))
79
+ continue;
80
+ const block = parseProjectBlock(await fs.readText(file), paths.blockMarkers());
81
+ if (block)
82
+ return block;
83
+ }
84
+ return null;
85
+ }
86
+ function extractSessionCode(folder) {
87
+ const m = folder.match(SESSION_CODE_FROM_FOLDER_RE);
88
+ return m?.[1] ?? null;
89
+ }
90
+ function formatAdvisorMessage(info) {
91
+ const truncMsg = info.message.length > 60 ? `${info.message.slice(0, 60)}...` : info.message;
92
+ return `${[
93
+ `[${info.display} git-commit-advisor] Sesión activa sin tag en commit message.`,
94
+ ` Sesión: session${info.sessionCode} (${info.sessionFolder})`,
95
+ ` Mensaje: "${truncMsg}"`,
96
+ ` Esperado: incluir tag \`session${info.sessionCode}\` (ej. al final: "(session${info.sessionCode})")`,
97
+ "",
98
+ "Este advisor NO bloquea — el commit procederá. Sugerencia: ajustar el mensaje",
99
+ "para incluir el tag de sesión y mantener trazabilidad con qtc:commits-policy.",
100
+ "",
101
+ "Bypass: AW_COMMIT_ADVISOR=off",
102
+ `Referencia: ${REFERENCE_DOC}`,
103
+ "",
104
+ ].join("\n")}\n`;
105
+ }
106
+ //# sourceMappingURL=hook-git-commit-advisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-git-commit-advisor.js","sourceRoot":"","sources":["../../src/application/hook-git-commit-advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ParsedArgs } from "../../cli/parser.js";
2
+ import type { CliContext } from "../../cli/types.js";
3
+ import type { CommandResult } from "../../domain/types.js";
4
+ export type CacheTarget = "claude" | "codex" | "warp" | "agents";
5
+ export declare const CACHE_TARGETS: readonly CacheTarget[];
6
+ export interface PluginCacheRemoval {
7
+ path: string;
8
+ kind: "cache" | "installed-entry" | "skill-dir";
9
+ }
10
+ export interface SelfClearPluginCacheData {
11
+ status: "removed" | "nothing" | "dry-run";
12
+ target: CacheTarget;
13
+ plugin: string;
14
+ removed: PluginCacheRemoval[];
15
+ summary: string;
16
+ }
17
+ export declare function selfClearPluginCache(args: ParsedArgs, ctx: CliContext): Promise<CommandResult<SelfClearPluginCacheData>>;
18
+ //# sourceMappingURL=plugin-cache-clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-cache-clear.d.ts","sourceRoot":"","sources":["../../../src/application/self/plugin-cache-clear.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAA0C,CAAC;AAE3F,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,WAAW,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CA2ClD"}
@@ -0,0 +1,133 @@
1
+ import { rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ export const CACHE_TARGETS = ["claude", "codex", "warp", "agents"];
4
+ export async function selfClearPluginCache(args, ctx) {
5
+ const plugin = args.values.get("plugin");
6
+ const targetArg = args.values.get("target");
7
+ const dryRun = args.flags.has("--dry-run");
8
+ if (!plugin) {
9
+ return {
10
+ ok: false,
11
+ error: { code: "INVALID_INPUT", message: "--plugin <namespace> es obligatorio." },
12
+ exitCode: 1,
13
+ };
14
+ }
15
+ if (!targetArg || !CACHE_TARGETS.includes(targetArg)) {
16
+ return {
17
+ ok: false,
18
+ error: {
19
+ code: "INVALID_INPUT",
20
+ message: `--target debe ser uno de: ${CACHE_TARGETS.join(", ")}. Recibido: '${targetArg ?? "(vacío)"}'`,
21
+ },
22
+ exitCode: 1,
23
+ };
24
+ }
25
+ const home = ctx.env.homeDir();
26
+ const removed = [];
27
+ if (targetArg === "claude" || targetArg === "codex") {
28
+ removed.push(...(await clearHostCache(ctx, home, targetArg, plugin, dryRun)));
29
+ }
30
+ else {
31
+ removed.push(...(await clearSkillDirs(ctx, home, targetArg, plugin, dryRun)));
32
+ }
33
+ const status = dryRun ? "dry-run" : removed.length === 0 ? "nothing" : "removed";
34
+ const summary = buildSummary(status, targetArg, plugin, removed.length);
35
+ return {
36
+ ok: true,
37
+ data: { status, target: targetArg, plugin, removed, summary },
38
+ exitCode: 0,
39
+ };
40
+ }
41
+ async function clearHostCache(ctx, home, target, plugin, dryRun) {
42
+ const pluginsRoot = join(home, `.${target}`, "plugins");
43
+ const cacheRemovals = await removeCacheDirs(ctx, join(pluginsRoot, "cache"), plugin, dryRun);
44
+ const installedRemoval = await removeInstalledEntry(ctx, join(pluginsRoot, "installed_plugins.json"), plugin, dryRun);
45
+ return installedRemoval ? [...cacheRemovals, installedRemoval] : cacheRemovals;
46
+ }
47
+ async function removeCacheDirs(ctx, cacheRoot, plugin, dryRun) {
48
+ if (!(await ctx.fs.exists(cacheRoot)))
49
+ return [];
50
+ const marketplaces = await listSafe(ctx, cacheRoot);
51
+ const removals = [];
52
+ for (const mp of marketplaces) {
53
+ const pluginDir = join(cacheRoot, mp.name, plugin);
54
+ if (!(await ctx.fs.exists(pluginDir)))
55
+ continue;
56
+ if (!dryRun)
57
+ await rm(pluginDir, { recursive: true, force: true });
58
+ removals.push({ path: pluginDir, kind: "cache" });
59
+ }
60
+ return removals;
61
+ }
62
+ async function removeInstalledEntry(ctx, installedPath, plugin, dryRun) {
63
+ if (!(await ctx.fs.exists(installedPath)))
64
+ return null;
65
+ let data;
66
+ try {
67
+ data = JSON.parse(await ctx.fs.readText(installedPath));
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ const plugins = (data.plugins ?? {});
73
+ const keyPattern = new RegExp(`^${escapeRegExp(plugin)}@`);
74
+ const keysToRemove = Object.keys(plugins).filter((k) => keyPattern.test(k));
75
+ if (keysToRemove.length === 0)
76
+ return null;
77
+ if (!dryRun) {
78
+ for (const k of keysToRemove)
79
+ delete plugins[k];
80
+ data.plugins = plugins;
81
+ await ctx.fs.writeText(installedPath, `${JSON.stringify(data, null, 2)}\n`);
82
+ }
83
+ return {
84
+ path: `${installedPath} (${keysToRemove.join(", ")})`,
85
+ kind: "installed-entry",
86
+ };
87
+ }
88
+ async function listSafe(ctx, path) {
89
+ try {
90
+ return await ctx.fs.list(path);
91
+ }
92
+ catch {
93
+ return [];
94
+ }
95
+ }
96
+ async function clearSkillDirs(ctx, home, target, plugin, dryRun) {
97
+ const removals = [];
98
+ const skillsRoot = join(home, `.${target}`, "skills");
99
+ if (!(await ctx.fs.exists(skillsRoot)))
100
+ return removals;
101
+ let entries = [];
102
+ try {
103
+ entries = await ctx.fs.list(skillsRoot);
104
+ }
105
+ catch {
106
+ return removals;
107
+ }
108
+ const prefix = `${plugin}-`;
109
+ for (const entry of entries) {
110
+ if (entry.type !== "dir")
111
+ continue;
112
+ if (!entry.name.startsWith(prefix))
113
+ continue;
114
+ const full = join(skillsRoot, entry.name);
115
+ if (!dryRun)
116
+ await rm(full, { recursive: true, force: true });
117
+ removals.push({ path: full, kind: "skill-dir" });
118
+ }
119
+ return removals;
120
+ }
121
+ function escapeRegExp(s) {
122
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
123
+ }
124
+ function buildSummary(status, target, plugin, count) {
125
+ if (status === "dry-run") {
126
+ return `[dry-run] se borrarían ${count} item(s) del plugin '${plugin}' en ${target}.`;
127
+ }
128
+ if (status === "nothing") {
129
+ return `Nada que limpiar para '${plugin}' en ${target}.`;
130
+ }
131
+ return `Limpiados ${count} item(s) del plugin '${plugin}' en ${target}.`;
132
+ }
133
+ //# sourceMappingURL=plugin-cache-clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-cache-clear.js","sourceRoot":"","sources":["../../../src/application/self/plugin-cache-clear.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ParsedArgs } from "../../cli/parser.js";
2
+ import type { CliContext } from "../../cli/types.js";
3
+ import type { CommandResult } from "../../domain/types.js";
4
+ import { type PluginSkillResult } from "./install-plugin-skills.js";
5
+ import { type CacheTarget, type PluginCacheRemoval } from "./plugin-cache-clear.js";
6
+ export interface SelfReloadPluginCacheData {
7
+ status: "reloaded" | "cleared-only" | "nothing" | "dry-run";
8
+ target: CacheTarget;
9
+ plugin: string;
10
+ removed: PluginCacheRemoval[];
11
+ reinstalled: PluginSkillResult[];
12
+ hint?: string;
13
+ summary: string;
14
+ }
15
+ export declare function selfReloadPluginCache(args: ParsedArgs, ctx: CliContext): Promise<CommandResult<SelfReloadPluginCacheData>>;
16
+ //# sourceMappingURL=plugin-cache-reload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-cache-reload.d.ts","sourceRoot":"","sources":["../../../src/application/self/plugin-cache-reload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,KAAK,iBAAiB,EAA2B,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EAExB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5D,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,CAyCnD"}
@@ -0,0 +1,171 @@
1
+ import { join } from "node:path";
2
+ import { selfInstallPluginSkills } from "./install-plugin-skills.js";
3
+ import { CACHE_TARGETS, selfClearPluginCache, } from "./plugin-cache-clear.js";
4
+ export async function selfReloadPluginCache(args, ctx) {
5
+ const inputError = validateInput(args);
6
+ if (inputError)
7
+ return inputError;
8
+ const plugin = args.values.get("plugin");
9
+ const targetArg = args.values.get("target");
10
+ const fromArg = args.values.get("from");
11
+ const dryRun = args.flags.has("--dry-run");
12
+ const clearResult = await selfClearPluginCache(args, ctx);
13
+ if (!clearResult.ok || !clearResult.data) {
14
+ return clearResult;
15
+ }
16
+ const removed = clearResult.data.removed;
17
+ const clearSummary = clearResult.data.summary;
18
+ if (targetArg === "claude" || targetArg === "codex") {
19
+ return buildHostReloadResult(targetArg, plugin, removed, clearSummary, dryRun);
20
+ }
21
+ const source = await resolveSource(ctx, plugin, fromArg);
22
+ if (!source) {
23
+ return buildSourceMissingResult(targetArg, plugin, removed, clearSummary);
24
+ }
25
+ if (dryRun) {
26
+ return {
27
+ ok: true,
28
+ data: {
29
+ status: "dry-run",
30
+ target: targetArg,
31
+ plugin,
32
+ removed,
33
+ reinstalled: [],
34
+ summary: `[dry-run] ${clearSummary} | se reinstalaría desde ${source}`,
35
+ },
36
+ exitCode: 0,
37
+ };
38
+ }
39
+ return await runReinstall(ctx, plugin, targetArg, source, removed, clearSummary);
40
+ }
41
+ function validateInput(args) {
42
+ const plugin = args.values.get("plugin");
43
+ if (!plugin) {
44
+ return {
45
+ ok: false,
46
+ error: { code: "INVALID_INPUT", message: "--plugin <namespace> es obligatorio." },
47
+ exitCode: 1,
48
+ };
49
+ }
50
+ const targetArg = args.values.get("target");
51
+ if (!targetArg || !CACHE_TARGETS.includes(targetArg)) {
52
+ return {
53
+ ok: false,
54
+ error: {
55
+ code: "INVALID_INPUT",
56
+ message: `--target debe ser uno de: ${CACHE_TARGETS.join(", ")}. Recibido: '${targetArg ?? "(vacío)"}'`,
57
+ },
58
+ exitCode: 1,
59
+ };
60
+ }
61
+ return null;
62
+ }
63
+ function buildHostReloadResult(target, plugin, removed, clearSummary, dryRun) {
64
+ const host = target === "claude" ? "Claude Code" : "Codex";
65
+ const hint = `Reiniciá ${host} para que el host re-clone el plugin desde el marketplace.`;
66
+ const status = dryRun ? "dry-run" : removed.length === 0 ? "nothing" : "cleared-only";
67
+ const summary = dryRun ? `[dry-run] ${clearSummary} | ${hint}` : `${clearSummary} ${hint}`;
68
+ return {
69
+ ok: true,
70
+ data: { status, target, plugin, removed, reinstalled: [], hint, summary },
71
+ exitCode: 0,
72
+ };
73
+ }
74
+ function buildSourceMissingResult(target, plugin, removed, clearSummary) {
75
+ return {
76
+ ok: false,
77
+ error: {
78
+ code: "SOURCE_NOT_FOUND",
79
+ message: `No se encontró source para reinstalar '${plugin}' en ${target}. Pasá --from <path-skills-dir> o instalá el plugin en Claude Code primero (provee cache compartido).`,
80
+ },
81
+ data: {
82
+ status: removed.length === 0 ? "nothing" : "cleared-only",
83
+ target,
84
+ plugin,
85
+ removed,
86
+ reinstalled: [],
87
+ summary: clearSummary,
88
+ },
89
+ exitCode: 1,
90
+ };
91
+ }
92
+ async function runReinstall(ctx, plugin, target, source, removed, clearSummary) {
93
+ const installArgs = {
94
+ rest: [],
95
+ plugin: {},
96
+ flags: new Set(["--force"]),
97
+ values: new Map([
98
+ ["from", source],
99
+ ["target", target],
100
+ ["namespace", plugin],
101
+ ]),
102
+ valuesMulti: new Map(),
103
+ };
104
+ const installResult = await selfInstallPluginSkills(installArgs, ctx);
105
+ const reinstalled = installResult.data?.skills ?? [];
106
+ return {
107
+ ok: installResult.ok,
108
+ data: {
109
+ status: "reloaded",
110
+ target,
111
+ plugin,
112
+ removed,
113
+ reinstalled,
114
+ summary: `${clearSummary} ${installResult.data?.summary ?? ""}`.trim(),
115
+ },
116
+ ...(installResult.error ? { error: installResult.error } : {}),
117
+ exitCode: installResult.exitCode,
118
+ };
119
+ }
120
+ async function resolveSource(ctx, plugin, fromArg) {
121
+ if (fromArg && (await ctx.fs.exists(fromArg)))
122
+ return fromArg;
123
+ const home = ctx.env.homeDir();
124
+ for (const host of ["claude", "codex"]) {
125
+ const found = await findInHostCache(ctx, join(home, `.${host}`, "plugins", "cache"), plugin);
126
+ if (found)
127
+ return found;
128
+ }
129
+ return null;
130
+ }
131
+ async function findInHostCache(ctx, cacheRoot, plugin) {
132
+ if (!(await ctx.fs.exists(cacheRoot)))
133
+ return null;
134
+ const marketplaces = await listSafe(ctx, cacheRoot);
135
+ for (const mp of marketplaces) {
136
+ const skillsDir = await findSkillsDir(ctx, join(cacheRoot, mp.name, plugin));
137
+ if (skillsDir)
138
+ return skillsDir;
139
+ }
140
+ return null;
141
+ }
142
+ async function findSkillsDir(ctx, pluginRoot) {
143
+ if (!(await ctx.fs.exists(pluginRoot)))
144
+ return null;
145
+ const versions = await listSafe(ctx, pluginRoot);
146
+ const latest = pickLatestVersion(versions.map((v) => v.name));
147
+ if (!latest)
148
+ return null;
149
+ const skillsDir = join(pluginRoot, latest, "skills");
150
+ return (await ctx.fs.exists(skillsDir)) ? skillsDir : null;
151
+ }
152
+ async function listSafe(ctx, path) {
153
+ try {
154
+ return await ctx.fs.list(path);
155
+ }
156
+ catch {
157
+ return [];
158
+ }
159
+ }
160
+ function pickLatestVersion(names) {
161
+ const semver = names.filter((n) => /^\d+\.\d+\.\d+/.test(n));
162
+ if (semver.length === 0)
163
+ return null;
164
+ semver.sort((a, b) => {
165
+ const [aMaj = 0, aMin = 0, aPatch = 0] = a.split(".").map(Number);
166
+ const [bMaj = 0, bMin = 0, bPatch = 0] = b.split(".").map(Number);
167
+ return bMaj - aMaj || bMin - aMin || bPatch - aPatch;
168
+ });
169
+ return semver[0] ?? null;
170
+ }
171
+ //# sourceMappingURL=plugin-cache-reload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-cache-reload.js","sourceRoot":"","sources":["../../../src/application/self/plugin-cache-reload.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hook.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAYjD,eAAO,MAAM,WAAW,EAAE,UAuCzB,CAAC"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hook.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAYjD,eAAO,MAAM,WAAW,EAAE,UAoDzB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { runBranchCheckHook } from "../../application/hook-branch-check.js";
2
+ import { runGitCommitAdvisor } from "../../application/hook-git-commit-advisor.js";
2
3
  import { runSqlMutationGuard } from "../../application/hook-sql-mutation-guard.js";
3
4
  import { writeStderr } from "../render.js";
4
5
  async function readStdin() {
@@ -10,7 +11,7 @@ async function readStdin() {
10
11
  }
11
12
  export const hookCommand = {
12
13
  name: "hook",
13
- describe: "PreToolUse hook target. Subcommands: branch-check, sql-mutation-guard.",
14
+ describe: "PreToolUse hook target. Subcommands: branch-check, sql-mutation-guard, git-commit-advisor.",
14
15
  async execute(args, ctx) {
15
16
  const subcommand = args.rest[0];
16
17
  if (!subcommand) {
@@ -18,7 +19,7 @@ export const hookCommand = {
18
19
  ok: false,
19
20
  error: {
20
21
  code: "INVALID_INPUT",
21
- message: "hook requires a subcommand: branch-check | sql-mutation-guard",
22
+ message: "hook requires a subcommand: branch-check | sql-mutation-guard | git-commit-advisor",
22
23
  },
23
24
  exitCode: 1,
24
25
  };
@@ -43,6 +44,18 @@ export const hookCommand = {
43
44
  writeStderr(result.stderr);
44
45
  return { ok: true, data: undefined, exitCode: result.exitCode };
45
46
  }
47
+ if (subcommand === "git-commit-advisor") {
48
+ const result = await runGitCommitAdvisor({
49
+ stdin,
50
+ fs: ctx.fs,
51
+ env: ctx.env,
52
+ paths: ctx.paths,
53
+ displayName: ctx.runtime.displayName ?? ctx.namespace.namespace,
54
+ });
55
+ if (result.stderr)
56
+ writeStderr(result.stderr);
57
+ return { ok: true, data: undefined, exitCode: result.exitCode };
58
+ }
46
59
  return {
47
60
  ok: false,
48
61
  error: { code: "INVALID_INPUT", message: `hook: unknown subcommand '${subcommand}'` },
@@ -1 +1 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/cli/commands/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAInF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,KAAK,UAAU,SAAS;IACtB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,wEAAwE;IAClF,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,GAAe;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,+DAA+D;iBACzE;gBACD,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;QAChC,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACtC,KAAK;gBACL,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS;aAChE,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,MAAM;gBAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClE,CAAC;QACD,IAAI,UAAU,KAAK,oBAAoB,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAClF,IAAI,MAAM,CAAC,MAAM;gBAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClE,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,6BAA6B,UAAU,GAAG,EAAE;YACrF,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/cli/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { QtcCommand } from "../registry.js";
2
+ export declare const pluginCacheCommand: QtcCommand;
3
+ //# sourceMappingURL=plugin-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-cache.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugin-cache.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,eAAO,MAAM,kBAAkB,EAAE,UA+BhC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { selfClearPluginCache } from "../../application/self/plugin-cache-clear.js";
2
+ import { selfReloadPluginCache } from "../../application/self/plugin-cache-reload.js";
3
+ export const pluginCacheCommand = {
4
+ name: "plugin-cache",
5
+ describe: "Limpia o recarga el cache de un plugin instalado en un host. Subcomandos: clear, reload. Flags: --plugin <ns> --target <claude|codex|warp|agents> [--from <path>] [--dry-run].",
6
+ async execute(args, ctx) {
7
+ const subcommand = args.rest[0];
8
+ if (!subcommand) {
9
+ return {
10
+ ok: false,
11
+ error: {
12
+ code: "INVALID_INPUT",
13
+ message: "plugin-cache requiere un subcomando: clear | reload",
14
+ },
15
+ exitCode: 1,
16
+ };
17
+ }
18
+ if (subcommand === "clear") {
19
+ return await selfClearPluginCache(args, ctx);
20
+ }
21
+ if (subcommand === "reload") {
22
+ return await selfReloadPluginCache(args, ctx);
23
+ }
24
+ return {
25
+ ok: false,
26
+ error: {
27
+ code: "INVALID_INPUT",
28
+ message: `plugin-cache: subcomando desconocido '${subcommand}'. Usá: clear | reload`,
29
+ },
30
+ exitCode: 1,
31
+ };
32
+ },
33
+ };
34
+ //# sourceMappingURL=plugin-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-cache.js","sourceRoot":"","sources":["../../../src/cli/commands/plugin-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAMtF,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC5C,IAAI,EAAE,cAAc;IACpB,QAAQ,EACN,gLAAgL;IAClL,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,GAAe;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,qDAAqD;iBAC/D;gBACD,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,MAAM,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,MAAM,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,yCAAyC,UAAU,wBAAwB;aACrF;YACD,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"help-groups.d.ts","sourceRoot":"","sources":["../../src/cli/help-groups.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAiED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAanE;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWzE"}
1
+ {"version":3,"file":"help-groups.d.ts","sourceRoot":"","sources":["../../src/cli/help-groups.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAkED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAanE;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWzE"}
@@ -52,6 +52,7 @@ const GROUPS = [
52
52
  name: "Doctor / Data",
53
53
  commands: [
54
54
  "plugin-doctor",
55
+ "plugin-cache",
55
56
  "history-data",
56
57
  "history-update",
57
58
  "release-data",