@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')
|