@ghl-ai/aw 0.1.35-beta.2 → 0.1.35-beta.3

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/commands/nuke.mjs CHANGED
@@ -16,7 +16,7 @@ const GLOBAL_AW_DIR = join(HOME, '.aw_registry');
16
16
  const MANIFEST_PATH = join(GLOBAL_AW_DIR, '.aw-manifest.json');
17
17
 
18
18
  const IDE_DIRS = ['.claude', '.cursor', '.codex', '.agents'];
19
- const CONTENT_TYPES = ['agents', 'skills', 'commands', 'evals'];
19
+ const CONTENT_TYPES = ['agents', 'skills', 'commands', 'evals', 'hooks'];
20
20
 
21
21
  function loadManifest() {
22
22
  if (!existsSync(MANIFEST_PATH)) return null;
@@ -94,7 +94,7 @@ function searchLocal(workspaceDir, query) {
94
94
  if (!nsEntry.isDirectory() || nsEntry.name.startsWith('.')) continue;
95
95
  const ns = nsEntry.name;
96
96
 
97
- for (const type of ['agents', 'skills', 'commands', 'evals']) {
97
+ for (const type of ['agents', 'skills', 'commands', 'evals', 'hooks']) {
98
98
  const typeDir = join(workspaceDir, ns, type);
99
99
  if (!existsSync(typeDir)) continue;
100
100
 
package/link.mjs CHANGED
@@ -13,7 +13,7 @@ function forceSymlink(target, linkPath) {
13
13
  const IDE_DIRS = ['.claude', '.cursor', '.codex'];
14
14
  // Per-file symlink types
15
15
  const FILE_TYPES = ['agents'];
16
- const ALL_KNOWN_TYPES = new Set([...FILE_TYPES, 'skills', 'commands', 'evals', 'docs']);
16
+ const ALL_KNOWN_TYPES = new Set([...FILE_TYPES, 'skills', 'commands', 'evals', 'hooks', 'docs']);
17
17
 
18
18
  /**
19
19
  * List namespace directories inside .aw_registry/ (skip dotfiles).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ghl-ai/aw",
3
- "version": "0.1.35-beta.2",
3
+ "version": "0.1.35-beta.3",
4
4
  "description": "Agentic Workspace CLI — pull, push & manage agents, skills and commands from the registry",
5
5
  "type": "module",
6
6
  "bin": {
package/paths.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  import { existsSync, statSync, lstatSync, readlinkSync } from 'node:fs';
4
4
  import { join, resolve, relative, basename, dirname } from 'node:path';
5
5
 
6
- const VALID_TYPES = new Set(['agents', 'skills', 'commands', 'evals']);
6
+ const VALID_TYPES = new Set(['agents', 'skills', 'commands', 'evals', 'hooks']);
7
7
 
8
8
  // IDE dirs that may contain symlinks into .aw_registry/
9
9
  const IDE_PREFIXES = ['.claude/', '.cursor/', '.codex/', '.agents/'];
package/plan.mjs CHANGED
@@ -46,8 +46,9 @@ export function computePlan(registryDirs, workspaceDir, includePatterns = [], {
46
46
  targetFilename = `${entry.namespacePath}/${entry.type}/${entry.slug}/${entry.skillRelPath}`;
47
47
  targetPath = join(workspaceDir, entry.namespacePath, entry.type, entry.slug, entry.skillRelPath);
48
48
  } else {
49
- targetFilename = `${entry.namespacePath}/${entry.type}/${entry.slug}.md`;
50
- targetPath = join(workspaceDir, entry.namespacePath, entry.type, `${entry.slug}.md`);
49
+ const fileName = entry.filename || `${entry.slug}.md`;
50
+ targetFilename = `${entry.namespacePath}/${entry.type}/${fileName}`;
51
+ targetPath = join(workspaceDir, entry.namespacePath, entry.type, fileName);
51
52
  }
52
53
 
53
54
  const manifestKey = targetFilename;
@@ -113,7 +114,7 @@ export function computePlan(registryDirs, workspaceDir, includePatterns = [], {
113
114
  const parts = manifestKey.split('/');
114
115
  let typeIdx = -1;
115
116
  for (let i = 0; i < parts.length; i++) {
116
- if (['agents', 'skills', 'commands', 'evals'].includes(parts[i])) {
117
+ if (['agents', 'skills', 'commands', 'evals', 'hooks'].includes(parts[i])) {
117
118
  typeIdx = i;
118
119
  break;
119
120
  }
package/registry.mjs CHANGED
@@ -4,7 +4,7 @@ import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs';
4
4
  import { join, relative } from 'node:path';
5
5
  import { createHash } from 'node:crypto';
6
6
 
7
- const TYPE_DIRS = new Set(['agents', 'skills', 'commands', 'evals']);
7
+ const TYPE_DIRS = new Set(['agents', 'skills', 'commands', 'evals', 'hooks']);
8
8
  const SKIP_DIRS = new Set(['docs']);
9
9
 
10
10
  export function sha256(content) {
@@ -84,7 +84,7 @@ export function walkRegistryTree(baseDir, baseName) {
84
84
  });
85
85
  }
86
86
  } else {
87
- // Agents, commands — flat files
87
+ // Agents, commands, hooks — flat files
88
88
  for (const fileEntry of readdirSync(fullPath)) {
89
89
  if (fileEntry === '.gitkeep' || fileEntry.startsWith('.')) continue;
90
90
  const filePath = join(fullPath, fileEntry);