@hasna/hooks 0.7.10 → 0.9.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 (96) hide show
  1. package/README.md +32 -6
  2. package/bin/index.js +2640 -1820
  3. package/bin/serve.js +742 -551
  4. package/dist/config.d.ts +25 -19
  5. package/dist/index.d.ts +3 -2
  6. package/dist/index.js +1251 -717
  7. package/dist/lib/app-home.d.ts +9 -0
  8. package/dist/lib/installer.d.ts +40 -10
  9. package/dist/lib/local-opt-in.d.ts +80 -0
  10. package/dist/lib/profiles.d.ts +10 -0
  11. package/dist/lib/registration.d.ts +75 -0
  12. package/dist/lib/registry.d.ts +14 -0
  13. package/dist/lib/resolver-types.d.ts +45 -0
  14. package/dist/lib/sync.d.ts +13 -8
  15. package/dist/lib/transport.d.ts +87 -0
  16. package/dist/openapi.d.ts +1 -1
  17. package/dist/storage.js +54 -63
  18. package/hooks/hook-affected-tests/package.json +1 -1
  19. package/hooks/hook-agent-rules-version-check/README.md +1 -1
  20. package/hooks/hook-agent-rules-version-check/package.json +1 -1
  21. package/hooks/hook-agentmessages/package.json +1 -1
  22. package/hooks/hook-announce-start/package.json +1 -1
  23. package/hooks/hook-announce-stop/package.json +1 -1
  24. package/hooks/hook-autoformat/package.json +1 -1
  25. package/hooks/hook-branchprotect/package.json +1 -1
  26. package/hooks/hook-checkbugs/package.json +1 -1
  27. package/hooks/hook-checkdocs/package.json +1 -1
  28. package/hooks/hook-checkfiles/package.json +1 -1
  29. package/hooks/hook-checklint/package.json +1 -1
  30. package/hooks/hook-checkpoint/package.json +1 -1
  31. package/hooks/hook-checksecurity/package.json +1 -1
  32. package/hooks/hook-checktasks/package.json +1 -1
  33. package/hooks/hook-checktests/package.json +1 -1
  34. package/hooks/hook-conflict-detect/package.json +1 -1
  35. package/hooks/hook-contextrefresh/package.json +1 -1
  36. package/hooks/hook-desktopnotify/package.json +1 -1
  37. package/hooks/hook-dm-inject/package.json +1 -1
  38. package/hooks/hook-envsetup/package.json +1 -1
  39. package/hooks/hook-failure-to-task/package.json +1 -1
  40. package/hooks/hook-filelock/package.json +1 -1
  41. package/hooks/hook-fleet-blockers-gate/package.json +1 -1
  42. package/hooks/hook-fleet-catchup/package.json +1 -1
  43. package/hooks/hook-gitguard/package.json +1 -1
  44. package/hooks/hook-packageage/package.json +1 -1
  45. package/hooks/hook-permissionguard/package.json +1 -1
  46. package/hooks/hook-phonenotify/package.json +1 -1
  47. package/hooks/hook-precompact/package.json +1 -1
  48. package/hooks/hook-protectfiles/package.json +1 -1
  49. package/hooks/hook-stylescheck/package.json +1 -1
  50. package/hooks/hook-trash-guard/README.md +132 -0
  51. package/hooks/hook-trash-guard/package.json +12 -0
  52. package/hooks/hook-trash-guard/src/hook.ts +1114 -0
  53. package/hooks/hook-typecheck-gate/package.json +1 -1
  54. package/package.json +7 -10
  55. package/scripts/ensure-profiles-dir.mjs +52 -1
  56. package/hooks/codewith-native-common.test.ts +0 -1935
  57. package/hooks/hook-affected-tests/tsconfig.json +0 -25
  58. package/hooks/hook-agent-rules-version-check/src/hook.test.ts +0 -104
  59. package/hooks/hook-agent-rules-version-check/tsconfig.json +0 -25
  60. package/hooks/hook-announce-start/tsconfig.json +0 -25
  61. package/hooks/hook-announce-stop/tsconfig.json +0 -25
  62. package/hooks/hook-autoformat/tsconfig.json +0 -25
  63. package/hooks/hook-branchprotect/tsconfig.json +0 -25
  64. package/hooks/hook-checkbugs/tsconfig.json +0 -15
  65. package/hooks/hook-checkdocs/tsconfig.json +0 -15
  66. package/hooks/hook-checkfiles/tsconfig.json +0 -15
  67. package/hooks/hook-checklint/tsconfig.json +0 -15
  68. package/hooks/hook-checkpoint/tsconfig.json +0 -25
  69. package/hooks/hook-checksecurity/tsconfig.json +0 -15
  70. package/hooks/hook-checktasks/tsconfig.json +0 -20
  71. package/hooks/hook-checktests/tsconfig.json +0 -15
  72. package/hooks/hook-conflict-detect/tsconfig.json +0 -25
  73. package/hooks/hook-contextrefresh/tsconfig.json +0 -25
  74. package/hooks/hook-desktopnotify/tsconfig.json +0 -25
  75. package/hooks/hook-dm-inject/tsconfig.json +0 -25
  76. package/hooks/hook-envsetup/tsconfig.json +0 -25
  77. package/hooks/hook-failure-to-task/tsconfig.json +0 -25
  78. package/hooks/hook-filelock/tsconfig.json +0 -25
  79. package/hooks/hook-fleet-blockers-gate/src/hook.test.ts +0 -302
  80. package/hooks/hook-fleet-blockers-gate/tsconfig.json +0 -25
  81. package/hooks/hook-fleet-catchup/src/hook.test.ts +0 -156
  82. package/hooks/hook-fleet-catchup/tsconfig.json +0 -25
  83. package/hooks/hook-gitguard/tsconfig.json +0 -25
  84. package/hooks/hook-knowledge-context/src/hook.test.ts +0 -379
  85. package/hooks/hook-packageage/tsconfig.json +0 -25
  86. package/hooks/hook-permissionguard/tsconfig.json +0 -25
  87. package/hooks/hook-phonenotify/tsconfig.json +0 -25
  88. package/hooks/hook-precompact/tsconfig.json +0 -25
  89. package/hooks/hook-protectfiles/tsconfig.json +0 -25
  90. package/hooks/hook-scanoutput/src/hook.test.ts +0 -217
  91. package/hooks/hook-spiral-detector/src/hook.test.ts +0 -72
  92. package/hooks/hook-stylescheck/tsconfig.json +0 -25
  93. package/hooks/hook-typecheck-gate/tsconfig.json +0 -25
  94. package/hooks/hook-workspace-repos-guard/src/hook.test.ts +0 -466
  95. package/hooks/hook-workspace-repos-guard/tsconfig.json +0 -21
  96. package/hooks/mention-context/src/hook.test.ts +0 -68
@@ -43,7 +43,7 @@
43
43
  "bun": ">=1.0"
44
44
  },
45
45
  "devDependencies": {
46
- "@types/bun": "^1.3.8",
46
+ "@types/bun": "1.3.14",
47
47
  "@types/node": "^20",
48
48
  "typescript": "^5.0.0"
49
49
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/hooks",
3
- "version": "0.7.10",
3
+ "version": "0.9.0",
4
4
  "description": "Open source hooks library for AI coding agents - Install safety, quality, and automation hooks with a single command",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,9 +27,6 @@
27
27
  "typecheck": "tsc --noEmit",
28
28
  "validate:package": "bun run build && bun scripts/validate-package.ts",
29
29
  "prepublishOnly": "bun run validate:package",
30
- "dashboard:dev": "cd dashboard && bun run dev",
31
- "dashboard:build": "cd dashboard && bun run build",
32
- "dashboard:preview": "cd dashboard && bun run preview",
33
30
  "postinstall": "node scripts/ensure-profiles-dir.mjs",
34
31
  "scan:artifact": "bun scripts/artifact-scan.ts",
35
32
  "prepack": "bun run build && bun run scan:artifact"
@@ -47,16 +44,15 @@
47
44
  "author": "Hasna",
48
45
  "license": "Apache-2.0",
49
46
  "devDependencies": {
50
- "@types/bun": "latest",
47
+ "@types/bun": "1.3.14",
51
48
  "@types/pg": "^8.15.6",
52
49
  "@types/react": "^18.2.0",
53
50
  "typescript": "^5",
54
51
  "bun-types": "1.3.14",
55
- "@hasna/contracts": "0.14.1"
52
+ "@hasna/contracts": "1.0.2"
56
53
  },
57
54
  "dependencies": {
58
55
  "@hasna/events": "^0.1.16",
59
- "@hasna/paths": "0.1.0",
60
56
  "@hasna/secrets": "0.3.10",
61
57
  "@modelcontextprotocol/sdk": "^1.26.0",
62
58
  "chalk": "^5.3.0",
@@ -68,8 +64,7 @@
68
64
  "ink-text-input": "^6.0.0",
69
65
  "pg": "^8.16.3",
70
66
  "react": "^18.2.0",
71
- "zod": "3.25.76",
72
- "@hasna/contracts": "0.14.1"
67
+ "zod": "3.25.76"
73
68
  },
74
69
  "engines": {
75
70
  "bun": ">=1.0.0"
@@ -85,7 +80,9 @@
85
80
  "!hooks/*/dist/",
86
81
  "scripts/",
87
82
  "README.md",
88
- "LICENSE"
83
+ "LICENSE",
84
+ "!hooks/**/*.test.ts",
85
+ "!hooks/**/tsconfig.json"
89
86
  ],
90
87
  "homepage": "https://github.com/hasna/hooks#readme",
91
88
  "bugs": {
@@ -6,6 +6,57 @@
6
6
  // present there), then the legacy ~/.hasna/hooks default. Best-effort — the
7
7
  // package must never fail to install because this script cannot run.
8
8
  import { existsSync, mkdirSync } from "node:fs";
9
+ // --- Local path resolver -------------------------------------------------
10
+ // @hasna/paths was deleted (hasna/apps#1535, 2026-09-03); this in-package
11
+ // implementation preserves the resolver contract (XDG / macOS home layout
12
+ // honoring HASNA_{CONFIG,DATA,STATE,CACHE}_HOME, with the same env-override
13
+ // and home-override semantics the deleted package had).
14
+ import { homedir as pathsResolverHomedir } from "node:os";
15
+ import { join as pathsResolverJoin } from "node:path";
16
+
17
+ const PATHS_RESOLVER_KIND_ENV = {
18
+ config: "HASNA_CONFIG_HOME",
19
+ data: "HASNA_DATA_HOME",
20
+ state: "HASNA_STATE_HOME",
21
+ cache: "HASNA_CACHE_HOME",
22
+ };
23
+
24
+ function pathsResolverBaseDir(kind, options) {
25
+ const env = options.env ?? process.env;
26
+ const override = env[PATHS_RESOLVER_KIND_ENV[kind]];
27
+ if (typeof override === "string" && override.length > 0) return override;
28
+ const home = options.home ?? pathsResolverHomedir();
29
+ const platform = options.platform ?? process.platform;
30
+ if (platform === "darwin") {
31
+ switch (kind) {
32
+ case "config":
33
+ case "data":
34
+ return pathsResolverJoin(home, "Library", "Application Support", "Hasna");
35
+ case "cache":
36
+ return pathsResolverJoin(home, "Library", "Caches", "Hasna");
37
+ case "state":
38
+ return pathsResolverJoin(home, "Library", "Logs", "Hasna");
39
+ }
40
+ }
41
+ switch (kind) {
42
+ case "config":
43
+ return pathsResolverJoin(home, ".config", "hasna");
44
+ case "data":
45
+ return pathsResolverJoin(home, ".local", "share", "hasna");
46
+ case "state":
47
+ return pathsResolverJoin(home, ".local", "state", "hasna");
48
+ case "cache":
49
+ return pathsResolverJoin(home, ".cache", "hasna");
50
+ }
51
+ }
52
+
53
+ function pathsResolverResolve(kind, options) {
54
+ const appSegment = options.internal === true ? pathsResolverJoin("internal", options.app) : options.app;
55
+ return pathsResolverJoin(pathsResolverBaseDir(kind, options), appSegment);
56
+ }
57
+ function dataDir(options) {
58
+ return pathsResolverResolve("data", options);
59
+ }
9
60
  import { homedir } from "node:os";
10
61
  import { join, resolve } from "node:path";
11
62
 
@@ -30,7 +81,7 @@ async function effectiveDataRoot() {
30
81
 
31
82
  let resolved = null;
32
83
  try {
33
- const { dataDir } = await import("@hasna/paths");
84
+ // (local resolver — @hasna/paths deleted, hasna/apps#1535)
34
85
  resolved = dataDir({ app: "hooks", home: HOME });
35
86
  } catch {
36
87
  // @hasna/paths unavailable — fall back to the legacy root.