@indigoai-us/hq-cli 5.345.115 → 5.345.116

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/CHANGELOG.md CHANGED
@@ -2,9 +2,12 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [5.345.116] — 2026-10-13
6
+
5
7
  ## [5.345.115] — 2026-10-13
6
8
  - The bundled delegate-send shell now caches the Git Bash `jq --binary` capability probe for one invocation instead of starting `jq.exe` before every jq operation.
7
9
  - Remove the bundled scheduled jobs shell copies and route scheduled job units, probes, validation, notifications, and reconciliation through native HQ core commands. Fixed shell-output fixtures retain differential coverage for all 238 cases, and the published E2E matrix now runs native-only probes for these commands.
10
+ - `hq core scan-packages` no longer refuses to wire a pack worker because a worker with the same id sits inside a tenant's `repos/` checkout. Its id-collision check now skips the directories the worker registry skips (tenant `repos/`, `_template`, `_overrides`), so pack workers such as `qa-tester` link again.
8
11
 
9
12
  - `hq core checkpoint` now runs its background sibling under a supervisor that
10
13
  stops it after 30 minutes and kills any process it left behind, and the
@@ -4,6 +4,7 @@ import * as path from 'node:path';
4
4
  import * as yaml from 'js-yaml';
5
5
  import { contributionLinks } from '../../utils/pack-contribution-links.js';
6
6
  import { CONTRIBUTION_TABLE } from '../../utils/contribution-table.js';
7
+ import { isExcludedWorkerDirectory } from '../workers-registry/index.js';
7
8
  function isDirectory(target) { try {
8
9
  return fs.statSync(target).isDirectory();
9
10
  }
@@ -75,6 +76,11 @@ function workerId(file) {
75
76
  function allWorkerYamlFiles(root, relative) {
76
77
  const output = [];
77
78
  const walk = (next, seen) => {
79
+ // Prune exactly what the worker registry prunes (tenant repos/ checkouts,
80
+ // _template, _overrides). A worker.yaml the registry never indexes cannot
81
+ // collide with a pack worker, and walking source checkouts is slow.
82
+ if (isExcludedWorkerDirectory(next))
83
+ return;
78
84
  const absolute = path.join(root, next);
79
85
  if (!isDirectory(absolute))
80
86
  return;
@@ -9,6 +9,22 @@ export interface GenerateWorkersRegistryResult {
9
9
  written: boolean;
10
10
  quarantined: number;
11
11
  }
12
+ /**
13
+ * Worker roots hold two kinds of `worker.yaml` that must never reach the
14
+ * registry.
15
+ *
16
+ * The `_template` company and any `_overrides` directory are scaffolding —
17
+ * copies kept so a new tenant or a pack override can be stamped out from them.
18
+ *
19
+ * A checkout nested under a tenant's `repos/` is a source repository that tenant
20
+ * happens to keep inside HQ, and when that repository is HQ itself, its own
21
+ * `core/workers` and template trees are full of worker.yaml files. Indexing them
22
+ * treats product source as deployed workers: they claim ids real workers already
23
+ * own, and because duplicates resolve by path order — a tenant path sorts before
24
+ * both `core` and `personal` — the checkout wins. The operator's actual worker
25
+ * then silently vanishes from the registry every skill reads.
26
+ */
27
+ export declare function isExcludedWorkerDirectory(relativeDirectory: string): boolean;
12
28
  /**
13
29
  * Generate core/workers/registry.yaml from worker.yaml files. Invalid workers
14
30
  * are quarantined but do not prevent all valid workers from being registered.
@@ -158,7 +158,7 @@ function withoutTimestamp(content) {
158
158
  * both `core` and `personal` — the checkout wins. The operator's actual worker
159
159
  * then silently vanishes from the registry every skill reads.
160
160
  */
161
- function isExcludedWorkerDirectory(relativeDirectory) {
161
+ export function isExcludedWorkerDirectory(relativeDirectory) {
162
162
  const normalized = relativeDirectory.replaceAll('\\', '/');
163
163
  const [root, tenant, nested] = normalized.split('/');
164
164
  if (root !== 'companies')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cli",
3
- "version": "5.345.115",
3
+ "version": "5.345.116",
4
4
  "description": "HQ by Indigo management CLI — modules and cloud sync",
5
5
  "main": "dist/index.js",
6
6
  "bin": {