@indigoai-us/hq-cli 5.108.1 → 5.108.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/CHANGELOG.md +79 -0
- package/assets/mesh-daemon/README.md +23 -0
- package/assets/mesh-daemon/launchd.plist.template +33 -0
- package/assets/mesh-daemon/systemd.system.service.template +27 -0
- package/assets/mesh-daemon/systemd.user.service.template +18 -0
- package/assets/scaffold/core/scripts/lib/work-mesh-enqueue.sh +267 -0
- package/dist/commands/core.js +5 -4
- package/dist/commands/index-cmd.js +13 -0
- package/dist/commands/mesh.d.ts +15 -0
- package/dist/commands/mesh.js +732 -4
- package/dist/commands/search.d.ts +23 -0
- package/dist/commands/search.js +42 -1
- package/dist/lib/doctor/checks/work-context.d.ts +23 -0
- package/dist/lib/doctor/checks/work-context.js +195 -0
- package/dist/lib/doctor/registry.js +4 -0
- package/dist/lib/mesh/api.d.ts +18 -0
- package/dist/lib/mesh/api.js +55 -0
- package/dist/lib/mesh/cache.js +35 -4
- package/dist/lib/mesh/client.d.ts +118 -0
- package/dist/lib/mesh/client.js +268 -0
- package/dist/lib/mesh/live/backoff.d.ts +16 -0
- package/dist/lib/mesh/live/backoff.js +20 -0
- package/dist/lib/mesh/live/daemon/board-refresh.d.ts +49 -0
- package/dist/lib/mesh/live/daemon/board-refresh.js +185 -0
- package/dist/lib/mesh/live/daemon/credentials.d.ts +71 -0
- package/dist/lib/mesh/live/daemon/credentials.js +227 -0
- package/dist/lib/mesh/live/daemon/doctor.d.ts +37 -0
- package/dist/lib/mesh/live/daemon/doctor.js +139 -0
- package/dist/lib/mesh/live/daemon/index.d.ts +24 -0
- package/dist/lib/mesh/live/daemon/index.js +14 -0
- package/dist/lib/mesh/live/daemon/install.d.ts +83 -0
- package/dist/lib/mesh/live/daemon/install.js +330 -0
- package/dist/lib/mesh/live/daemon/log.d.ts +11 -0
- package/dist/lib/mesh/live/daemon/log.js +79 -0
- package/dist/lib/mesh/live/daemon/paths.d.ts +18 -0
- package/dist/lib/mesh/live/daemon/paths.js +31 -0
- package/dist/lib/mesh/live/daemon/pid-lock.d.ts +48 -0
- package/dist/lib/mesh/live/daemon/pid-lock.js +134 -0
- package/dist/lib/mesh/live/daemon/presence.d.ts +101 -0
- package/dist/lib/mesh/live/daemon/presence.js +250 -0
- package/dist/lib/mesh/live/daemon/presign.d.ts +18 -0
- package/dist/lib/mesh/live/daemon/presign.js +65 -0
- package/dist/lib/mesh/live/daemon/run.d.ts +74 -0
- package/dist/lib/mesh/live/daemon/run.js +400 -0
- package/dist/lib/mesh/live/daemon/state.d.ts +24 -0
- package/dist/lib/mesh/live/daemon/state.js +57 -0
- package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +170 -0
- package/dist/lib/mesh/live/daemon/transcript-watch.js +520 -0
- package/dist/lib/mesh/live/enqueue.d.ts +48 -0
- package/dist/lib/mesh/live/enqueue.js +100 -0
- package/dist/lib/mesh/live/flush.d.ts +56 -0
- package/dist/lib/mesh/live/flush.js +360 -0
- package/dist/lib/mesh/live/format-spool-line.d.ts +42 -0
- package/dist/lib/mesh/live/format-spool-line.js +106 -0
- package/dist/lib/mesh/live/index.d.ts +22 -0
- package/dist/lib/mesh/live/index.js +16 -0
- package/dist/lib/mesh/live/paths.d.ts +13 -0
- package/dist/lib/mesh/live/paths.js +30 -0
- package/dist/lib/mesh/live/session-events-client.d.ts +58 -0
- package/dist/lib/mesh/live/session-events-client.js +120 -0
- package/dist/lib/mesh/live/session-identity.d.ts +39 -0
- package/dist/lib/mesh/live/session-identity.js +91 -0
- package/dist/lib/mesh/live/spool.d.ts +52 -0
- package/dist/lib/mesh/live/spool.js +193 -0
- package/dist/lib/mesh/live/ulid.d.ts +12 -0
- package/dist/lib/mesh/live/ulid.js +39 -0
- package/dist/lib/mesh/live/validate-session-event.d.ts +39 -0
- package/dist/lib/mesh/live/validate-session-event.js +128 -0
- package/dist/lib/search-index/index.d.ts +98 -0
- package/dist/lib/search-index/index.js +174 -2
- package/dist/lib/work-context/atomic.d.ts +18 -0
- package/dist/lib/work-context/atomic.js +132 -0
- package/dist/lib/work-context/company.d.ts +103 -0
- package/dist/lib/work-context/company.js +274 -0
- package/dist/lib/work-context/config.d.ts +59 -0
- package/dist/lib/work-context/config.js +172 -0
- package/dist/lib/work-context/contract.d.ts +81 -0
- package/dist/lib/work-context/contract.js +65 -0
- package/dist/lib/work-context/errors.d.ts +27 -0
- package/dist/lib/work-context/errors.js +46 -0
- package/dist/lib/work-context/index.d.ts +23 -0
- package/dist/lib/work-context/index.js +20 -0
- package/dist/lib/work-context/migrate.d.ts +84 -0
- package/dist/lib/work-context/migrate.js +287 -0
- package/dist/lib/work-context/organize.d.ts +130 -0
- package/dist/lib/work-context/organize.js +471 -0
- package/dist/lib/work-context/outbox.d.ts +97 -0
- package/dist/lib/work-context/outbox.js +357 -0
- package/dist/lib/work-context/paths.d.ts +14 -0
- package/dist/lib/work-context/paths.js +39 -0
- package/dist/lib/work-context/project.d.ts +78 -0
- package/dist/lib/work-context/project.js +247 -0
- package/dist/lib/work-context/reconcile.d.ts +85 -0
- package/dist/lib/work-context/reconcile.js +651 -0
- package/dist/lib/work-context/repo-remote.d.ts +43 -0
- package/dist/lib/work-context/repo-remote.js +200 -0
- package/dist/lib/work-context/state.d.ts +112 -0
- package/dist/lib/work-context/state.js +162 -0
- package/dist/main.js +93 -4
- package/dist/utils/cognito-session.d.ts +85 -9
- package/dist/utils/cognito-session.js +216 -9
- package/dist/utils/qmd-model-download-error.d.ts +27 -0
- package/dist/utils/qmd-model-download-error.js +114 -0
- package/dist/utils/qmd-query-document-error.d.ts +23 -0
- package/dist/utils/qmd-query-document-error.js +117 -0
- package/dist/utils/qmd-workdir-missing-error.d.ts +18 -0
- package/dist/utils/qmd-workdir-missing-error.js +78 -0
- package/dist/utils/sentry-fingerprint.js +7 -0
- package/package.json +5 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// src/utils/qmd-query-document-error.ts
|
|
2
|
+
//
|
|
3
|
+
// Classify a qmd failure caused by a MALFORMED QUERY DOCUMENT — qmd's `query`
|
|
4
|
+
// subcommand rejected the caller's positional because, read as a multi-line
|
|
5
|
+
// query document, its lines lack the required lex:/vec:/hyde:/intent:/expand:
|
|
6
|
+
// prefix — rather than an hq-cli code defect. This is the caller's INPUT SHAPE,
|
|
7
|
+
// not a bug HQ can fix in code, so the CLI surfaces an actionable, query-free
|
|
8
|
+
// remedy and SKIPS Sentry capture. Sibling of qmd-llm-disabled-error.ts (HQ-CLI
|
|
9
|
+
// 7688850003), qmd-module-missing-error.ts (HQ-CLI-Y) and
|
|
10
|
+
// qmd-store-missing-error.ts (HQ-CLI-16): a failure that is NOT an hq-cli defect
|
|
11
|
+
// is printed with an actionable message and never filed as a crash.
|
|
12
|
+
//
|
|
13
|
+
// HQ-CLI-1B (Sentry indigo-d0/hq-cli 7705711476): `hq search --mode hybrid`
|
|
14
|
+
// maps to `qmd query`, which passes the caller's query byte-for-byte. Fleet
|
|
15
|
+
// agents forward a whole Slack message (prose, a blank line, a Block Kit payload,
|
|
16
|
+
// a fenced json block) as the query, so qmd received a MULTI-LINE positional and
|
|
17
|
+
// parsed it as a query document; qmd 2.5.3 requires every line of a multi-line
|
|
18
|
+
// document to carry a prefix (dist/cli/qmd.js:2210) and exited 1 with `Line 1 is
|
|
19
|
+
// missing a lex:/vec:/hyde:/intent: prefix. Each line in a query document must
|
|
20
|
+
// start with one.`. hq-cli had no classifier for that wording, so finishRunQmd
|
|
21
|
+
// raised a plain QmdExitError that reached the boundary's final else and was
|
|
22
|
+
// captured — 28 of the issue's 29 events. buildSearchArgs now normalises free
|
|
23
|
+
// text to one line so the common case never reaches qmd multi-line; this
|
|
24
|
+
// classifier is the backstop for a genuinely malformed structured document.
|
|
25
|
+
//
|
|
26
|
+
// The gate is deliberately narrow on TWO axes so it can neither be tripped by
|
|
27
|
+
// user input nor silence a real bug, exactly as qmd-llm-disabled-error.ts
|
|
28
|
+
// documents:
|
|
29
|
+
// 1. CLASS: only a QmdQueryDocumentError (the typed subclass finishRunQmd
|
|
30
|
+
// raises for the query-document wording) qualifies — never a plain
|
|
31
|
+
// QmdExitError, even one whose message carries the same words.
|
|
32
|
+
// 2. INVOCATION: only the `query` subcommand, the sole caller-driven read that
|
|
33
|
+
// parses a query document. Any other subcommand returns null and stays on
|
|
34
|
+
// the captured-error path.
|
|
35
|
+
// The predicate reads qmd's OWN captured streams, never the synthesized message
|
|
36
|
+
// (which embeds the caller's argv), so free text can never classify.
|
|
37
|
+
/**
|
|
38
|
+
* qmd 2.5.3's query-DOCUMENT syntax diagnostics (dist/cli/qmd.js:2157-2217,
|
|
39
|
+
* parseStructuredQuery). The reported crash is the ":2210" wording; the whole
|
|
40
|
+
* FAMILY is matched — not one sentence — so a mixed-expand, duplicate-intent,
|
|
41
|
+
* empty-prefixed-line, intent-alone or embedded-newline document is classified
|
|
42
|
+
* too. Every phrase is unique to qmd's query-document parser, and only the
|
|
43
|
+
* `query` subcommand reaches it, so no other qmd failure emits any of them. Read
|
|
44
|
+
* from the exact pinned version (`@tobilu/qmd` 2.5.3, not a range).
|
|
45
|
+
*/
|
|
46
|
+
const QUERY_DOCUMENT_SYNTAX = new RegExp([
|
|
47
|
+
"is missing a lex:/vec:/hyde:/intent: prefix",
|
|
48
|
+
"Each line in a query document must start with one",
|
|
49
|
+
"query documents cannot mix expand with typed lines",
|
|
50
|
+
"only one intent: line is allowed per query document",
|
|
51
|
+
"intent: must include text",
|
|
52
|
+
"intent: cannot appear alone",
|
|
53
|
+
"contains a newline\\. Keep each query on a single line",
|
|
54
|
+
"\\((?:lex|vec|hyde):\\) must include text",
|
|
55
|
+
"expand: query must include text",
|
|
56
|
+
].join("|"), "i");
|
|
57
|
+
/** The caller-driven read whose positional qmd parses as a query DOCUMENT. */
|
|
58
|
+
const QUERY_DOCUMENT_READS = new Set(["query"]);
|
|
59
|
+
/**
|
|
60
|
+
* The actionable remedy shown to the caller. Input-free: nothing is interpolated
|
|
61
|
+
* from the error, the argv, or qmd's output, so there is no injection surface —
|
|
62
|
+
* matching the bounded-fingerprint discipline of its siblings.
|
|
63
|
+
*/
|
|
64
|
+
export const QMD_QUERY_DOCUMENT_REMEDY = "Hybrid search was given a multi-line query, and qmd read it as a structured " +
|
|
65
|
+
"query document whose lines must each begin with a lex:, vec:, hyde:, or " +
|
|
66
|
+
"intent: prefix. Put your search terms on a single line, or prefix every line, " +
|
|
67
|
+
"then run the command again.";
|
|
68
|
+
/**
|
|
69
|
+
* qmd's OWN captured streams (stderr then stdout), joined. The synthesized
|
|
70
|
+
* `message` is deliberately NOT consulted: it embeds the caller's qmd arguments,
|
|
71
|
+
* so reading it would let a user query for one of these phrases trip the
|
|
72
|
+
* classifier. A bare string is treated as captured text directly (test
|
|
73
|
+
* convenience). A value with no captured streams yields "".
|
|
74
|
+
*/
|
|
75
|
+
function capturedStreams(err) {
|
|
76
|
+
if (typeof err === "string")
|
|
77
|
+
return err;
|
|
78
|
+
if (err === null || typeof err !== "object")
|
|
79
|
+
return "";
|
|
80
|
+
const record = err;
|
|
81
|
+
const stderr = typeof record.stderr === "string" ? record.stderr : "";
|
|
82
|
+
const stdout = typeof record.stdout === "string" ? record.stdout : "";
|
|
83
|
+
return stderr || stdout ? `${stderr}\n${stdout}` : "";
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* True when `err` carries, in qmd's OWN captured streams, a query-document
|
|
87
|
+
* syntax diagnostic — i.e. qmd's `query` parser rejected the positional as a
|
|
88
|
+
* malformed document. finishRunQmd calls this on the raw streams to type the
|
|
89
|
+
* condition {@link import('../lib/search-index/index.js').QmdQueryDocumentError}.
|
|
90
|
+
*/
|
|
91
|
+
export function isQmdQueryDocumentError(err) {
|
|
92
|
+
const text = capturedStreams(err);
|
|
93
|
+
if (!text)
|
|
94
|
+
return false;
|
|
95
|
+
return QUERY_DOCUMENT_SYNTAX.test(text);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* If `err` is a caller-driven qmd query-document failure (a QmdQueryDocumentError
|
|
99
|
+
* from `hq search --mode hybrid`, i.e. the `query` read), return the actionable,
|
|
100
|
+
* input-free remedy; otherwise return `null`. Mirrors qmdLlmDisabledMessage /
|
|
101
|
+
* qmdModuleMissingMessage so the top-level handler branches the same way: a
|
|
102
|
+
* non-null result means print-and-skip-Sentry, null means "handle as usual
|
|
103
|
+
* (capture to Sentry)".
|
|
104
|
+
*/
|
|
105
|
+
export function qmdQueryDocumentMessage(err) {
|
|
106
|
+
if (err === null || typeof err !== "object")
|
|
107
|
+
return null;
|
|
108
|
+
const record = err;
|
|
109
|
+
if (record.name !== "QmdQueryDocumentError")
|
|
110
|
+
return null;
|
|
111
|
+
const args = Array.isArray(record.args) ? record.args : [];
|
|
112
|
+
const subcommand = args[0];
|
|
113
|
+
if (typeof subcommand !== "string" || !QUERY_DOCUMENT_READS.has(subcommand))
|
|
114
|
+
return null;
|
|
115
|
+
return QMD_QUERY_DOCUMENT_REMEDY;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=qmd-query-document-error.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True when `err` is a qmd working-directory-missing failure: it carries the
|
|
3
|
+
* QmdWorkdirMissingError name and an hq-populated `workdir`. Accepts either the
|
|
4
|
+
* thrown error or a bare `{ name, workdir }` probe object. A true result means
|
|
5
|
+
* the caller should print the classified remedy, exit non-zero, and SKIP Sentry
|
|
6
|
+
* capture.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isQmdWorkdirMissingError(err: unknown): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* If `err` is a qmd working-directory-missing failure, return the actionable
|
|
11
|
+
* remedy; otherwise return `null`. Mirrors qmdStoreMissingMessage /
|
|
12
|
+
* qmdStoreUnopenableMessage so the top-level handler can branch on it the same
|
|
13
|
+
* way: a non-null result means print-and-skip-Sentry, null means "handle as
|
|
14
|
+
* usual". The working directory is read STRUCTURALLY from the error's own
|
|
15
|
+
* hq-populated `workdir` field, NEVER from qmd's output.
|
|
16
|
+
*/
|
|
17
|
+
export declare function qmdWorkdirMissingMessage(err: unknown): string | null;
|
|
18
|
+
//# sourceMappingURL=qmd-workdir-missing-error.d.ts.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// src/utils/qmd-workdir-missing-error.ts
|
|
2
|
+
//
|
|
3
|
+
// Classify a qmd spawn failure caused by a MISSING WORKING DIRECTORY — the
|
|
4
|
+
// directory the qmd child was told to run in (`cwd`, always the resolved hq
|
|
5
|
+
// root at the qmd call sites) does not exist — rather than an hq-cli code
|
|
6
|
+
// defect or a genuinely missing qmd. This is the caller's LOCAL filesystem (a
|
|
7
|
+
// deleted tree, a `--hq-root` pointing at a directory that is not there), not a
|
|
8
|
+
// bug HQ can fix in code, so the CLI surfaces an actionable remedy and SKIPS
|
|
9
|
+
// Sentry capture. Sibling of qmd-store-missing-error.ts (HQ-CLI-16, a missing
|
|
10
|
+
// STORE directory) and qmd-store-unopenable-error.ts (HQ-CLI-18): a failure
|
|
11
|
+
// that is NOT an hq-cli defect is printed with an actionable message and never
|
|
12
|
+
// filed as a crash.
|
|
13
|
+
//
|
|
14
|
+
// HQ-CLI-1A (Sentry indigo-d0/hq-cli 7705642434): `hq index status --hq-root
|
|
15
|
+
// /home/ec2-user/hq` spawned the bundled qmd as `<node interpreter> <qmd
|
|
16
|
+
// launcher>`, and spawnSync failed with `spawnSync /usr/bin/node ENOENT`. On
|
|
17
|
+
// Linux, spawnSync reports ENOENT with `path`/`syscall` set to the COMMAND both
|
|
18
|
+
// when the command is missing AND when chdir into `cwd` fails — two distinct
|
|
19
|
+
// causes with byte-identical text. finishRunQmd was handed only the qmd
|
|
20
|
+
// launcher path, so it blamed a THIRD path Node never faulted
|
|
21
|
+
// (`QmdBinaryMissingError: Unable to execute qmd at …/@tobilu/qmd/bin/qmd`) with
|
|
22
|
+
// a remedy (`Install @tobilu/qmd`) that cannot fix either real cause, and — with
|
|
23
|
+
// no boundary branch for it — the misattributed error was captured as a crash.
|
|
24
|
+
// finishRunQmd now disambiguates at the failure site: when the ENOENT is a
|
|
25
|
+
// missing working directory it raises the typed carrier this module classifies.
|
|
26
|
+
//
|
|
27
|
+
// Classification is STRUCTURAL — the typed carrier's own `name` plus its
|
|
28
|
+
// hq-populated `workdir` field, NEVER a text match on qmd's output or the
|
|
29
|
+
// caller's argv — so a search query or a document body can never trip it, and
|
|
30
|
+
// the class need not be imported here (avoiding a cycle with the module that
|
|
31
|
+
// defines it). Reading `name`/`workdir` off the error object also lets the
|
|
32
|
+
// top-level boundary, which reconstructs typed carriers structurally, branch on
|
|
33
|
+
// it the same way it does the sibling qmd errors.
|
|
34
|
+
/**
|
|
35
|
+
* True when `err` is a qmd working-directory-missing failure: it carries the
|
|
36
|
+
* QmdWorkdirMissingError name and an hq-populated `workdir`. Accepts either the
|
|
37
|
+
* thrown error or a bare `{ name, workdir }` probe object. A true result means
|
|
38
|
+
* the caller should print the classified remedy, exit non-zero, and SKIP Sentry
|
|
39
|
+
* capture.
|
|
40
|
+
*/
|
|
41
|
+
export function isQmdWorkdirMissingError(err) {
|
|
42
|
+
if (err === null || typeof err !== "object")
|
|
43
|
+
return false;
|
|
44
|
+
const record = err;
|
|
45
|
+
return (record.name === "QmdWorkdirMissingError" &&
|
|
46
|
+
typeof record.workdir === "string" &&
|
|
47
|
+
record.workdir.length > 0);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The actionable remedy, naming the working directory that does not exist. The
|
|
51
|
+
* directory is an hq-DERIVED value — the resolved `cwd` (the hq root) the qmd
|
|
52
|
+
* child was handed — never caller argv/query or upstream free text, so the line
|
|
53
|
+
* stays input-free. Deliberately does NOT suggest reinstalling qmd (the reported
|
|
54
|
+
* misattribution's dead-end remedy) or `hq index sync` (reconciliation runs the
|
|
55
|
+
* same spawn and would hit the identical failure, a dead-end loop): the only fix
|
|
56
|
+
* is to make the working directory exist.
|
|
57
|
+
*/
|
|
58
|
+
function remedyMessage(workdir) {
|
|
59
|
+
return (`hq's working directory (${workdir}) does not exist, so its local search index ` +
|
|
60
|
+
"could not run there. This is your machine's filesystem, not an hq bug: " +
|
|
61
|
+
"re-create that directory, or re-run with --hq-root pointing at a directory " +
|
|
62
|
+
"that exists.");
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* If `err` is a qmd working-directory-missing failure, return the actionable
|
|
66
|
+
* remedy; otherwise return `null`. Mirrors qmdStoreMissingMessage /
|
|
67
|
+
* qmdStoreUnopenableMessage so the top-level handler can branch on it the same
|
|
68
|
+
* way: a non-null result means print-and-skip-Sentry, null means "handle as
|
|
69
|
+
* usual". The working directory is read STRUCTURALLY from the error's own
|
|
70
|
+
* hq-populated `workdir` field, NEVER from qmd's output.
|
|
71
|
+
*/
|
|
72
|
+
export function qmdWorkdirMissingMessage(err) {
|
|
73
|
+
if (!isQmdWorkdirMissingError(err))
|
|
74
|
+
return null;
|
|
75
|
+
const record = err;
|
|
76
|
+
return remedyMessage(record.workdir);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=qmd-workdir-missing-error.js.map
|
|
@@ -84,6 +84,13 @@ const KNOWN_ERROR_NAMES = new Set([
|
|
|
84
84
|
"QmdModuleMissingError",
|
|
85
85
|
"QmdStoreMissingError",
|
|
86
86
|
"QmdStoreUnopenableError",
|
|
87
|
+
"QmdQueryDocumentError",
|
|
88
|
+
"QmdModelDownloadError",
|
|
89
|
+
// Shares the `Qmd` prefix the qmd branch keys on. The boundary now SUPPRESSES
|
|
90
|
+
// capture for this class, so it should never reach a capture route — allow-
|
|
91
|
+
// listed defensively so a future capture path cannot mint an unbounded group
|
|
92
|
+
// (HQ-CLI-1A).
|
|
93
|
+
"QmdWorkdirMissingError",
|
|
87
94
|
]);
|
|
88
95
|
/** Fixed bucket for any error name outside the closed allowlist. */
|
|
89
96
|
const FALLBACK_ERROR_NAME = "other";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@indigoai-us/hq-cli",
|
|
3
|
-
"version": "5.108.
|
|
3
|
+
"version": "5.108.3",
|
|
4
4
|
"description": "HQ by Indigo management CLI — modules and cloud sync",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"dist",
|
|
12
12
|
"!dist/**/*.map",
|
|
13
13
|
"assets/scaffold",
|
|
14
|
+
"assets/mesh-daemon",
|
|
14
15
|
"CHANGELOG.md"
|
|
15
16
|
],
|
|
16
17
|
"scripts": {
|
|
@@ -35,10 +36,12 @@
|
|
|
35
36
|
"@indigoai-us/hq-onboarding": "^0.1.0",
|
|
36
37
|
"@sentry/node": "^10.49.0",
|
|
37
38
|
"@tobilu/qmd": "2.5.3",
|
|
39
|
+
"ajv": "^8.20.0",
|
|
38
40
|
"better-sqlite3": "^12.11.1",
|
|
39
41
|
"chalk": "^5.3.0",
|
|
40
42
|
"commander": "^12.1.0",
|
|
41
43
|
"js-yaml": "^4.1.0",
|
|
44
|
+
"mqtt": "5.15.2",
|
|
42
45
|
"open": "^10.1.0",
|
|
43
46
|
"semver": "^7.6.3",
|
|
44
47
|
"simple-git": "^3.27.0",
|
|
@@ -52,6 +55,7 @@
|
|
|
52
55
|
"@types/node": "^22.0.0",
|
|
53
56
|
"@types/semver": "^7.5.8",
|
|
54
57
|
"@vitest/coverage-v8": "4.1.6",
|
|
58
|
+
"aedes": "1.1.2",
|
|
55
59
|
"aws-sdk-client-mock": "^4.1.0",
|
|
56
60
|
"eslint": "^10.5.0",
|
|
57
61
|
"husky": "^9.1.7",
|