@hegel-dev/companion 1.0.10 → 1.0.12

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hegel Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -80,6 +80,21 @@ To recompute session states and prune stale concerns or bugs from older versions
80
80
  npx hegel-companion cleanup .
81
81
  ```
82
82
 
83
+ ### Uninstall
84
+
85
+ To completely remove Hegel from a project, run:
86
+
87
+ ```bash
88
+ npx hegel-companion uninstall .
89
+ ```
90
+
91
+ This command will:
92
+ 1. Remove `hegel.config.json` and `.hegel-state/`.
93
+ 2. Remove `.cursor/rules/hegel-companion.mdc`.
94
+ 3. Clean up `.cursor/hooks.json` and `.cursor/mcp.json` (removing them entirely if they are empty).
95
+ 4. Uninstall the VS Code extension from Cursor.
96
+ 5. Uninstall the `@hegel-dev/companion` npm package.
97
+
83
98
  ### Configure
84
99
 
85
100
  The easiest way to configure Hegel is through the **Cursor Settings UI**:
@@ -0,0 +1,3 @@
1
+ import type { SetupDeps } from "./types.js";
2
+ export declare function runUninstall(argv?: string[], deps?: SetupDeps): Promise<number>;
3
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,wBAAsB,YAAY,CAChC,IAAI,GAAE,MAAM,EAAiB,EAC7B,IAAI,GAAE,SAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAgHjB"}
@@ -0,0 +1,116 @@
1
+ import { resolve, join } from "node:path";
2
+ import { defaultDeps } from "./types.js";
3
+ import { uninstallPackage } from "../utils/package-manager.js";
4
+ import { execCommandSync, getCursorCliCandidates } from "../utils/install.js";
5
+ export async function runUninstall(argv = process.argv, deps = defaultDeps) {
6
+ const rest = argv.slice(2);
7
+ const positional = rest.filter((a) => !a.startsWith("--"));
8
+ const targetDir = positional[1] ?? ".";
9
+ const projectPath = resolve(targetDir);
10
+ const skipNpm = rest.includes("--skip-npm");
11
+ deps.log(`Uninstalling Hegel from ${projectPath}...`);
12
+ // 1. Remove files and directories
13
+ const toRemove = [
14
+ "hegel.config.json",
15
+ ".hegel-state",
16
+ join(".cursor", "rules", "hegel-companion.mdc")
17
+ ];
18
+ for (const relPath of toRemove) {
19
+ const p = join(projectPath, relPath);
20
+ try {
21
+ await deps.rm(p, { recursive: true, force: true });
22
+ deps.log(` Removed ${relPath}`);
23
+ }
24
+ catch {
25
+ // ignore
26
+ }
27
+ }
28
+ // 2. Clean up hooks.json
29
+ const hooksPath = join(projectPath, ".cursor", "hooks.json");
30
+ try {
31
+ const content = await deps.readFile(hooksPath, "utf-8");
32
+ const parsed = JSON.parse(content);
33
+ if (parsed._hegel) {
34
+ delete parsed._hegel;
35
+ // Remove Hegel hooks (we know them by command ending in dist/hook.js)
36
+ if (parsed.hooks) {
37
+ for (const event of Object.keys(parsed.hooks)) {
38
+ parsed.hooks[event] = parsed.hooks[event].filter((h) => !(h.command && h.command.includes("dist/hook.js")) && !(h.prompt && h.prompt.includes("You are Hegel")));
39
+ if (parsed.hooks[event].length === 0) {
40
+ delete parsed.hooks[event];
41
+ }
42
+ }
43
+ }
44
+ if (Object.keys(parsed.hooks || {}).length === 0) {
45
+ await deps.rm(hooksPath, { force: true });
46
+ deps.log(` Removed empty .cursor/hooks.json`);
47
+ }
48
+ else {
49
+ await deps.writeFile(hooksPath, JSON.stringify(parsed, null, 2) + "\n", "utf-8");
50
+ deps.log(` Cleaned Hegel entries from .cursor/hooks.json`);
51
+ }
52
+ }
53
+ }
54
+ catch {
55
+ // ignore
56
+ }
57
+ // 3. Clean up mcp.json
58
+ const mcpPath = join(projectPath, ".cursor", "mcp.json");
59
+ try {
60
+ const content = await deps.readFile(mcpPath, "utf-8");
61
+ const parsed = JSON.parse(content);
62
+ if (parsed.mcpServers && parsed.mcpServers["hegel-mcp"]) {
63
+ delete parsed.mcpServers["hegel-mcp"];
64
+ if (Object.keys(parsed.mcpServers).length === 0) {
65
+ await deps.rm(mcpPath, { force: true });
66
+ deps.log(` Removed empty .cursor/mcp.json`);
67
+ }
68
+ else {
69
+ await deps.writeFile(mcpPath, JSON.stringify(parsed, null, 2) + "\n", "utf-8");
70
+ deps.log(` Cleaned hegel-mcp from .cursor/mcp.json`);
71
+ }
72
+ }
73
+ }
74
+ catch {
75
+ // ignore
76
+ }
77
+ // 4. Uninstall VS Code extension
78
+ deps.log(` Uninstalling VS Code extension...`);
79
+ try {
80
+ execCommandSync("cursor", ["--uninstall-extension", "hegel.hegel-companion"], deps, { stdio: "ignore" });
81
+ deps.log(` Uninstalled extension hegel.hegel-companion`);
82
+ }
83
+ catch {
84
+ // Try fallback candidates
85
+ const candidates = getCursorCliCandidates(deps.platform, deps.env);
86
+ let uninstalled = false;
87
+ for (const cand of candidates) {
88
+ try {
89
+ await deps.access(cand);
90
+ execCommandSync(cand, ["--uninstall-extension", "hegel.hegel-companion"], deps, { stdio: "ignore" });
91
+ deps.log(` Uninstalled extension hegel.hegel-companion via ${cand}`);
92
+ uninstalled = true;
93
+ break;
94
+ }
95
+ catch {
96
+ // ignore
97
+ }
98
+ }
99
+ if (!uninstalled) {
100
+ deps.log(` Could not automatically uninstall extension. Run manually: cursor --uninstall-extension hegel.hegel-companion`);
101
+ }
102
+ }
103
+ // 5. Uninstall npm package
104
+ if (!skipNpm) {
105
+ deps.log(` Uninstalling @hegel-dev/companion package...`);
106
+ try {
107
+ await uninstallPackage("@hegel-dev/companion", projectPath, deps);
108
+ }
109
+ catch (err) {
110
+ deps.log(` Failed to uninstall package: ${err instanceof Error ? err.message : String(err)}`);
111
+ }
112
+ }
113
+ deps.log(`✅ Hegel uninstalled successfully.`);
114
+ return 0;
115
+ }
116
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAiB,OAAO,CAAC,IAAI,EAC7B,OAAkB,WAAW;IAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACvC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,CAAC,GAAG,CAAC,2BAA2B,WAAW,KAAK,CAAC,CAAC;IAEtD,kCAAkC;IAClC,MAAM,QAAQ,GAAG;QACf,mBAAmB;QACnB,cAAc;QACd,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,qBAAqB,CAAC;KAChD,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC,MAAM,CAAC;YACrB,sEAAsE;YACtE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAC9C,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CACpH,CAAC;oBACF,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACrC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;gBACjF,IAAI,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,uBAAuB;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC/E,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,eAAe,CAAC,QAAQ,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzG,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;QAC1B,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxB,eAAe,CAAC,IAAI,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrG,IAAI,CAAC,GAAG,CAAC,qDAAqD,IAAI,EAAE,CAAC,CAAC;gBACtE,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,iHAAiH,CAAC,CAAC;QAC9H,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,sBAAsB,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/format.js CHANGED
@@ -6,7 +6,7 @@ const SEVERITY_ICON = {
6
6
  export function formatConcerns(concerns) {
7
7
  if (concerns.length === 0)
8
8
  return "";
9
- const lines = ["⚖️ Hegel:"];
9
+ const lines = ["⚖️ Hegel [Layer 1]:"];
10
10
  for (const c of concerns) {
11
11
  const icon = SEVERITY_ICON[c.severity] ?? "•";
12
12
  lines.push(`${icon} [${c.category}] ${c.message}`);
@@ -22,8 +22,8 @@ export function formatBlockMessage(concerns) {
22
22
  return formatConcerns(concerns);
23
23
  const hasCritical = actionable.some((c) => c.severity === "critical");
24
24
  const header = hasCritical
25
- ? "⛔ Hegel blocked this prompt:"
26
- : "⚖️ Hegel paused this prompt — please review:";
25
+ ? "⛔ Hegel [Layer 1] blocked this prompt:"
26
+ : "⚖️ Hegel [Layer 1] paused this prompt — please review:";
27
27
  const lines = [header, ""];
28
28
  for (const c of actionable) {
29
29
  const icon = SEVERITY_ICON[c.severity] ?? "•";
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAA2B;IAC5C,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,QAAmB;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAa,CAAC,WAAW,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAmB;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAC7D,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,8BAA8B;QAChC,CAAC,CAAC,8CAA8C,CAAC;IAEnD,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kEAAkE,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAA2B;IAC5C,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,IAAI;CACX,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,QAAmB;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAa,CAAC,qBAAqB,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAmB;IACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAC7D,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7D,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,wCAAwC;QAC1C,CAAC,CAAC,wDAAwD,CAAC;IAE7D,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kEAAkE,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
package/dist/prompts.js CHANGED
@@ -31,7 +31,7 @@ ${STRICTNESS_GUIDANCE[strictness]}
31
31
  Analyze the user prompt provided in $ARGUMENTS (the "prompt" field).
32
32
 
33
33
  - If the prompt is adequate for its purpose, return ok=true.
34
- - If there are genuine concerns, return ok=false with a concise reason (1-2 sentences) explaining what's missing and how to improve it.
34
+ - If there are genuine concerns, return ok=false with a concise reason (1-2 sentences) explaining what's missing and how to improve it. Start your reason with "[Layer 2] ".
35
35
  - Do NOT be pedantic about short prompts if they are clear in context (e.g., "yes, proceed" after a detailed plan is fine).
36
36
  - Do NOT flag prompts that are questions or requests for explanation.
37
37
  - Do NOT flag follow-up directives that reference items from a previous AI response (e.g., "fix #3 and #5" referencing a numbered list the AI just provided).
@@ -59,7 +59,7 @@ ${STRICTNESS_GUIDANCE[strictness]}
59
59
  Analyze the AI assistant's response provided in $ARGUMENTS (the "text" field).
60
60
 
61
61
  - If the response appears reasonable and well-considered, return ok=true.
62
- - If there are red flags the developer should notice, return ok=false with a concise reason (1-2 sentences) describing the concern.
62
+ - If there are red flags the developer should notice, return ok=false with a concise reason (1-2 sentences) describing the concern. Start your reason with "[Layer 2] ".
63
63
  - Be practical — not every response needs a lecture. Focus on things that could lead to real problems.`;
64
64
  }
65
65
  //# sourceMappingURL=prompts.js.map
package/dist/setup.d.ts CHANGED
@@ -6,7 +6,8 @@ export * from "./utils/package-manager.js";
6
6
  export * from "./utils/path.js";
7
7
  import { runUpdate } from "./commands/update.js";
8
8
  import { runCleanup } from "./commands/cleanup.js";
9
+ import { runUninstall } from "./commands/uninstall.js";
9
10
  import { type SetupDeps } from "./commands/types.js";
10
- export { runUpdate, runCleanup };
11
+ export { runUpdate, runCleanup, runUninstall };
11
12
  export declare function runSetup(argv?: string[], deps?: SetupDeps): Promise<number>;
12
13
  //# sourceMappingURL=setup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AAKA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAIhC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAEjC,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,MAAM,EAAiB,EAC7B,IAAI,GAAE,SAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AAKA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAIhC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAE/C,wBAAsB,QAAQ,CAC5B,IAAI,GAAE,MAAM,EAAiB,EAC7B,IAAI,GAAE,SAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAyDjB"}
package/dist/setup.js CHANGED
@@ -11,8 +11,9 @@ export * from "./utils/path.js";
11
11
  import { runInit } from "./commands/init.js";
12
12
  import { runUpdate } from "./commands/update.js";
13
13
  import { runCleanup } from "./commands/cleanup.js";
14
+ import { runUninstall } from "./commands/uninstall.js";
14
15
  import { defaultDeps } from "./commands/types.js";
15
- export { runUpdate, runCleanup };
16
+ export { runUpdate, runCleanup, runUninstall };
16
17
  export async function runSetup(argv = process.argv, deps = defaultDeps) {
17
18
  const rest = argv.slice(2);
18
19
  const positional = rest.filter((a) => !a.startsWith("--"));
@@ -23,6 +24,9 @@ export async function runSetup(argv = process.argv, deps = defaultDeps) {
23
24
  if (command === "cleanup") {
24
25
  return runCleanup(argv, deps);
25
26
  }
27
+ if (command === "uninstall") {
28
+ return runUninstall(argv, deps);
29
+ }
26
30
  if (command === "init" && positional[1] === "update") {
27
31
  deps.error("Error: 'update' is a command, not a project path.");
28
32
  deps.error(" If your installed Hegel version does not know `update`, upgrade first:");
@@ -47,9 +51,10 @@ export async function runSetup(argv = process.argv, deps = defaultDeps) {
47
51
  deps.log(" update [project-path] Reinstall @hegel-dev/companion@latest, refresh config,");
48
52
  deps.log(" prune orphan dirs (default path: .)");
49
53
  deps.log(" cleanup [project-path] Prune stale concerns and recompute session states");
54
+ deps.log(" uninstall [project-path] Remove Hegel configuration, hooks, MCP, and extension");
50
55
  deps.log("");
51
56
  deps.log("Use '.' for the current directory. Pass --force on init to bypass safety checks.");
52
- deps.log("Pass --skip-npm on update to skip the dependency upgrade step.");
57
+ deps.log("Pass --skip-npm on update or uninstall to skip the dependency step.");
53
58
  deps.log("");
54
59
  deps.log("Current config:");
55
60
  const config = await deps.loadConfig();
package/dist/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { readFile, access } from "node:fs/promises";
2
+ import type { SetupDeps } from "../commands/types.js";
2
3
  /**
3
4
  * Reads the version of @hegel-dev/companion from the consumer's
4
5
  * node_modules/, returning null if not installed (e.g. source-repo mode).
@@ -8,4 +9,5 @@ export declare function readInstalledCompanionVersion(projectPath: string, readF
8
9
  * Detect the package manager used in the project by checking for lockfiles.
9
10
  */
10
11
  export declare function detectPackageManager(projectPath: string, accessFn?: typeof access): Promise<"npm" | "pnpm" | "yarn" | "bun">;
12
+ export declare function uninstallPackage(pkg: string, cwd: string, deps: Pick<SetupDeps, "execFileSync" | "platform">): Promise<void>;
11
13
  //# sourceMappingURL=package-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,OAAO,QAAmB,GACrC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,OAAO,MAAe,GAC/B,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,CAM1C"}
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,OAAO,QAAmB,GACrC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,OAAO,MAAe,GAC/B,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,CAM1C;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,UAAU,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -1,5 +1,6 @@
1
1
  import { readFile, access } from "node:fs/promises";
2
2
  import { join } from "node:path";
3
+ import { execCommandSync } from "./install.js";
3
4
  /**
4
5
  * Reads the version of @hegel-dev/companion from the consumer's
5
6
  * node_modules/, returning null if not installed (e.g. source-repo mode).
@@ -41,4 +42,9 @@ export async function detectPackageManager(projectPath, accessFn = access) {
41
42
  catch { }
42
43
  return "npm";
43
44
  }
45
+ export async function uninstallPackage(pkg, cwd, deps) {
46
+ const pm = await detectPackageManager(cwd);
47
+ const args = pm === "npm" ? ["uninstall", pkg] : ["remove", pkg];
48
+ execCommandSync(pm, args, deps, { stdio: "inherit", cwd });
49
+ }
44
50
  //# sourceMappingURL=package-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,WAAmB,EACnB,aAA8B,QAAQ;IAEtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAC7F,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,WAA0B,MAAM;IAEhC,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACpF,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC/E,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC9E,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC7E,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,WAAmB,EACnB,aAA8B,QAAQ;IAEtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAC7F,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,WAA0B,MAAM;IAEhC,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACpF,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAAC,OAAO,MAAM,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC/E,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC9E,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC7E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,GAAW,EACX,IAAkD;IAElD,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjE,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hegel-dev/companion",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "Dialectical companion for AI-assisted development — real-time critical thinking oversight for Cursor IDE sessions",
5
5
  "type": "module",
6
6
  "publishConfig": {