@indigoai-us/hq-cli 5.345.191 → 5.345.194

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 (129) hide show
  1. package/CHANGELOG.md +431 -0
  2. package/assets/bot-workers/setup/worker.yaml +91 -34
  3. package/dist/command-catalog.generated.d.ts +145 -19
  4. package/dist/command-catalog.generated.js +184 -21
  5. package/dist/commands/bot-jobs.d.ts +21 -18
  6. package/dist/commands/bot-jobs.js +127 -39
  7. package/dist/commands/bot.d.ts +4 -3
  8. package/dist/commands/bot.js +265 -140
  9. package/dist/commands/core-jobs-schedule.js +10 -0
  10. package/dist/commands/daemon.js +37 -0
  11. package/dist/commands/files.d.ts +41 -6
  12. package/dist/commands/files.js +108 -27
  13. package/dist/commands/pack-start-bot.d.ts +4 -6
  14. package/dist/commands/pack-start-bot.js +4 -8
  15. package/dist/commands/signals-run.d.ts +46 -0
  16. package/dist/commands/signals-run.js +180 -0
  17. package/dist/commands/signals.d.ts +1 -0
  18. package/dist/commands/signals.js +3 -0
  19. package/dist/commands/sources.d.ts +58 -0
  20. package/dist/commands/sources.js +294 -26
  21. package/dist/commands/staff/reset-test-account.d.ts +10 -0
  22. package/dist/commands/staff/reset-test-account.js +18 -2
  23. package/dist/commands/whoami.d.ts +7 -0
  24. package/dist/commands/whoami.js +35 -2
  25. package/dist/hq-cloud-sync-runner/bin/sync-runner.js +31171 -52512
  26. package/dist/hq-cloud-sync-runner/package.json +1 -1
  27. package/dist/lib/bot/api.d.ts +3 -2
  28. package/dist/lib/bot/config.d.ts +2 -0
  29. package/dist/lib/bot/fleet-cron.d.ts +121 -0
  30. package/dist/lib/bot/fleet-cron.js +319 -0
  31. package/dist/lib/bot/fleet-local.d.ts +93 -1
  32. package/dist/lib/bot/fleet-local.js +546 -34
  33. package/dist/lib/bot/fleet-owner-companies.d.ts +12 -0
  34. package/dist/lib/bot/fleet-owner-companies.js +30 -0
  35. package/dist/lib/bot/fleet-watch.d.ts +25 -0
  36. package/dist/lib/bot/fleet-watch.js +51 -0
  37. package/dist/lib/bot/index.d.ts +1 -1
  38. package/dist/lib/bot/index.js +1 -1
  39. package/dist/lib/bot/job-run.d.ts +5 -4
  40. package/dist/lib/bot/job-run.js +5 -4
  41. package/dist/lib/bot/jobs/hot-signal-sync.d.ts +57 -3
  42. package/dist/lib/bot/jobs/hot-signal-sync.js +163 -4
  43. package/dist/lib/bot/local-jobs.d.ts +13 -2
  44. package/dist/lib/bot/local-jobs.js +17 -4
  45. package/dist/lib/bot/progress.d.ts +14 -0
  46. package/dist/lib/bot/progress.js +47 -1
  47. package/dist/lib/bot/run.d.ts +55 -2
  48. package/dist/lib/bot/run.js +192 -10
  49. package/dist/lib/bot/setup-tool-offer.d.ts +1 -0
  50. package/dist/lib/bot/setup-tool-offer.js +16 -0
  51. package/dist/lib/bot/signals-engine-flag.d.ts +18 -0
  52. package/dist/lib/bot/signals-engine-flag.js +30 -0
  53. package/dist/lib/daemon/catalog.d.ts +4 -0
  54. package/dist/lib/daemon/catalog.js +29 -9
  55. package/dist/lib/daemon/legacy.d.ts +6 -0
  56. package/dist/lib/daemon/legacy.js +16 -10
  57. package/dist/lib/daemon/run.d.ts +1 -0
  58. package/dist/lib/daemon/run.js +10 -0
  59. package/dist/lib/flag-registry-worker-source.generated.d.ts +1 -1
  60. package/dist/lib/flag-registry-worker-source.generated.js +1 -1
  61. package/dist/lib/flag-registry.d.ts +13 -1
  62. package/dist/lib/flag-registry.js +46 -0
  63. package/dist/lib/hot-channels/adapters/attio.d.ts +75 -2
  64. package/dist/lib/hot-channels/adapters/attio.js +367 -29
  65. package/dist/lib/hot-channels/adapters/gmail.d.ts +14 -0
  66. package/dist/lib/hot-channels/adapters/gmail.js +59 -2
  67. package/dist/lib/hot-channels/adapters/linear.d.ts +24 -0
  68. package/dist/lib/hot-channels/adapters/linear.js +71 -1
  69. package/dist/lib/hot-channels/adapters/meetings.js +4 -1
  70. package/dist/lib/hot-channels/adapters/slack.js +7 -3
  71. package/dist/lib/hot-channels/alert.js +1 -1
  72. package/dist/lib/hot-channels/contract.d.ts +11 -0
  73. package/dist/lib/hot-channels/contract.js +1 -0
  74. package/dist/lib/hot-channels/cursors.js +1 -1
  75. package/dist/lib/hot-channels/landing.d.ts +6 -2
  76. package/dist/lib/hot-channels/landing.js +13 -6
  77. package/dist/lib/hot-channels/ledger.js +2 -0
  78. package/dist/lib/hot-channels/loop.d.ts +6 -0
  79. package/dist/lib/hot-channels/loop.js +19 -4
  80. package/dist/lib/hot-channels/registry.js +9 -1
  81. package/dist/lib/hot-channels/run.d.ts +18 -0
  82. package/dist/lib/hot-channels/run.js +15 -4
  83. package/dist/lib/hot-channels/signals-pass.d.ts +34 -2
  84. package/dist/lib/hot-channels/signals-pass.js +149 -38
  85. package/dist/lib/hot-channels/signals-redo.d.ts +60 -0
  86. package/dist/lib/hot-channels/signals-redo.js +207 -0
  87. package/dist/lib/hot-channels/sync-lock.js +22 -6
  88. package/dist/lib/mesh/live/daemon/install.d.ts +22 -0
  89. package/dist/lib/mesh/live/daemon/install.js +117 -30
  90. package/dist/lib/signals/adapters-catalog.d.ts +77 -0
  91. package/dist/lib/signals/adapters-catalog.js +194 -0
  92. package/dist/lib/signals/engine.d.ts +202 -0
  93. package/dist/lib/signals/engine.js +504 -0
  94. package/dist/lib/signals/failure-alert.d.ts +89 -0
  95. package/dist/lib/signals/failure-alert.js +175 -0
  96. package/dist/lib/signals/local-date.d.ts +3 -0
  97. package/dist/lib/signals/local-date.js +6 -0
  98. package/dist/lib/signals/projection.d.ts +42 -0
  99. package/dist/lib/signals/projection.js +67 -0
  100. package/dist/lib/signals/reply.d.ts +112 -0
  101. package/dist/lib/signals/reply.js +368 -0
  102. package/dist/lib/signals/run-lock.d.ts +36 -0
  103. package/dist/lib/signals/run-lock.js +148 -0
  104. package/dist/lib/signals/run-record.d.ts +24 -0
  105. package/dist/lib/signals/run-record.js +82 -0
  106. package/dist/lib/signals/sanitize.d.ts +105 -0
  107. package/dist/lib/signals/sanitize.js +439 -0
  108. package/dist/lib/signals/settings.d.ts +10 -0
  109. package/dist/lib/signals/settings.js +48 -0
  110. package/dist/lib/signals/steps/adapters.d.ts +14 -0
  111. package/dist/lib/signals/steps/adapters.js +156 -0
  112. package/dist/lib/signals/steps/entity-similarity.d.ts +10 -0
  113. package/dist/lib/signals/steps/entity-similarity.js +47 -0
  114. package/dist/lib/signals/steps/extract.d.ts +118 -0
  115. package/dist/lib/signals/steps/extract.js +793 -0
  116. package/dist/lib/signals/steps/garden.d.ts +24 -0
  117. package/dist/lib/signals/steps/garden.js +250 -0
  118. package/dist/lib/signals/steps/types.d.ts +117 -0
  119. package/dist/lib/signals/steps/types.js +4 -0
  120. package/dist/lib/signals/steps/upload.d.ts +43 -0
  121. package/dist/lib/signals/steps/upload.js +324 -0
  122. package/dist/lib/signals/write-guard.d.ts +63 -0
  123. package/dist/lib/signals/write-guard.js +287 -0
  124. package/dist/utils/resident-package-preload.js +16 -0
  125. package/dist/utils/vault-api.d.ts +1 -0
  126. package/dist/utils/vault-api.js +1 -1
  127. package/package.json +9 -9
  128. package/dist/lib/bot/fleet-default-flag.d.ts +0 -31
  129. package/dist/lib/bot/fleet-default-flag.js +0 -127
@@ -30,6 +30,11 @@ export const RESIDENT_PACKAGE_MODULES = {
30
30
  bot: [
31
31
  "../lib/flag-registry.js",
32
32
  "../commands/access.js",
33
+ "../commands/sources.js",
34
+ "../lib/hot-channels/adapters/index.js",
35
+ "../utils/vault-api.js",
36
+ "../commands/files-browse.js",
37
+ "@aws-sdk/client-s3",
33
38
  "../sentry.js", "../lib/doctor/client-health-reason-codes-flag.js", "@indigoai-us/hq-flags-client",
34
39
  "../lib/plan-limit-nag.js",
35
40
  "../utils/plan-gate-error.js",
@@ -173,6 +178,17 @@ const LOADERS = {
173
178
  bot: [
174
179
  () => import("../lib/flag-registry.js"),
175
180
  () => import("../commands/access.js"),
181
+ // The signals engine's adapters step (lib/signals/steps/adapters.ts)
182
+ // lazily imports the hot-channel sync when the bot's signals job fires.
183
+ () => import("../commands/sources.js"),
184
+ // The adapters step also lazily imports the builtin hot-channel registry
185
+ // (lib/hot-channels/adapters/index.ts) once the adapter catalog is gated.
186
+ () => import("../lib/hot-channels/adapters/index.js"),
187
+ // The upload step (lib/signals/steps/upload.ts) lazily imports the vault
188
+ // API, the company presign client and the S3 client to post contributions.
189
+ () => import("../utils/vault-api.js"),
190
+ () => import("../commands/files-browse.js"),
191
+ () => import("@aws-sdk/client-s3"),
176
192
  async () => {
177
193
  const { preloadSentrySdk } = await import("../sentry.js");
178
194
  await import("../lib/doctor/client-health-reason-codes-flag.js");
@@ -129,6 +129,7 @@ export declare function agentIdentityUnsupportedError(agentUid: string, command?
129
129
  */
130
130
  export declare function resolveCallerPersonUid(token: string, baseUrl?: string, opts?: {
131
131
  command?: string;
132
+ signal?: AbortSignal;
132
133
  }): Promise<string>;
133
134
  /**
134
135
  * A signal that aborts when any input signal aborts, with that signal's
@@ -770,7 +770,7 @@ export async function resolveCallerPersonUid(token, baseUrl, opts = {}) {
770
770
  const agentUid = agentUidFromToken(token);
771
771
  if (agentUid)
772
772
  throw agentIdentityUnsupportedError(agentUid, opts.command);
773
- return lookupCallerPersonUid(token, baseUrl);
773
+ return lookupCallerPersonUid(token, baseUrl, opts.signal);
774
774
  }
775
775
  /**
776
776
  * A signal that aborts when any input signal aborts, with that signal's
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cli",
3
- "version": "5.345.191",
3
+ "version": "5.345.194",
4
4
  "description": "HQ by Indigo management CLI — modules and cloud sync",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -52,7 +52,7 @@
52
52
  "@aws-sdk/client-iot-data-plane": "^3.1096.0",
53
53
  "@aws-sdk/client-s3": "^3.1049.0",
54
54
  "@aws-sdk/dsql-signer": "^3.1146.0",
55
- "@indigoai-us/hq-cloud": "6.18.107",
55
+ "@indigoai-us/hq-cloud": "6.18.108",
56
56
  "@indigoai-us/hq-flags-client": "^0.2.0",
57
57
  "@modelcontextprotocol/sdk": "1.32.2",
58
58
  "@sentry/node": "^10.49.0",
@@ -68,7 +68,7 @@
68
68
  "semver": "^7.8.5",
69
69
  "simple-git": "^3.27.0",
70
70
  "smol-toml": "1.9.1",
71
- "varlock": "1.23.0"
71
+ "varlock": "1.24.0"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@eslint/js": "^10.0.1",
@@ -114,11 +114,11 @@
114
114
  "*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}": "eslint --cache --no-error-on-unmatched-pattern"
115
115
  },
116
116
  "optionalDependencies": {
117
- "@indigoai-us/hq-hook-win32-x64": "5.345.191",
118
- "@indigoai-us/hq-hook-win32-arm64": "5.345.191",
119
- "@indigoai-us/hq-hook-darwin-x64": "5.345.191",
120
- "@indigoai-us/hq-hook-darwin-arm64": "5.345.191",
121
- "@indigoai-us/hq-hook-linux-x64": "5.345.191",
122
- "@indigoai-us/hq-hook-linux-arm64": "5.345.191"
117
+ "@indigoai-us/hq-hook-win32-x64": "5.345.194",
118
+ "@indigoai-us/hq-hook-win32-arm64": "5.345.194",
119
+ "@indigoai-us/hq-hook-darwin-x64": "5.345.194",
120
+ "@indigoai-us/hq-hook-darwin-arm64": "5.345.194",
121
+ "@indigoai-us/hq-hook-linux-x64": "5.345.194",
122
+ "@indigoai-us/hq-hook-linux-arm64": "5.345.194"
123
123
  }
124
124
  }
@@ -1,31 +0,0 @@
1
- import { type FlagClient, type FlagClientOptions } from "@indigoai-us/hq-flags-client";
2
- /** Personal bots are created on the HQ Fleet Runtime for companies with this flag on. */
3
- export declare const LOCAL_BOTS_FLEET_DEFAULT_FLAG = "agents.local-bots-hq-fleet-default";
4
- export declare const LOCAL_BOTS_FLEET_DEFAULT_ENV = "HQ_BOT_FLEET_DEFAULT";
5
- type DefaultFlagClient = Pick<FlagClient, "ready" | "isEnabled" | "close">;
6
- export interface OwnerMembership {
7
- companyUid: string;
8
- companySlug?: string;
9
- status: string;
10
- }
11
- export interface FleetDefaultFlagDependencies {
12
- env?: NodeJS.ProcessEnv;
13
- createClient?: (options: FlagClientOptions) => DefaultFlagClient;
14
- getToken?: FlagClientOptions["getToken"];
15
- fetch?: typeof fetch;
16
- /** The signed-in owner's memberships; never prompts for sign-in. */
17
- memberships?: () => Promise<OwnerMembership[]>;
18
- }
19
- /** Every active company the signed-in owner can access, independent of rollout flags or local folders. */
20
- export declare function fleetOwnerCompanies(dependencies?: Pick<FleetDefaultFlagDependencies, "memberships">): Promise<string[]>;
21
- /**
22
- * The owner's companies that turned the fleet-default flag on: active
23
- * memberships whose company folder is on this computer. Any lookup failure
24
- * leaves that company out. `HQ_BOT_FLEET_DEFAULT=1` skips the flag and keeps
25
- * every such membership.
26
- */
27
- export declare function fleetDefaultCompanies(hqRoot: string, dependencies?: FleetDefaultFlagDependencies): Promise<string[]>;
28
- /** `HQ_BOT_FLEET_DEFAULT=1|0` overrides the registry; otherwise on when any flagged company was found. */
29
- export declare function fleetRuntimeIsDefault(flaggedCompanies: readonly string[], env?: NodeJS.ProcessEnv): boolean;
30
- export {};
31
- //# sourceMappingURL=fleet-default-flag.d.ts.map
@@ -1,127 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { loadCachedTokens } from "@indigoai-us/hq-cloud";
4
- import { createFlagClient, } from "@indigoai-us/hq-flags-client";
5
- import { ensureCognitoToken } from "../../utils/cognito-session.js";
6
- import { vaultApiFetch } from "../../utils/vault-api.js";
7
- import { resolveFlagGate } from "../flag-registry.js";
8
- import { resolveFlagRegistryEndpoint } from "../flag-registry-endpoint.js";
9
- /** Personal bots are created on the HQ Fleet Runtime for companies with this flag on. */
10
- export const LOCAL_BOTS_FLEET_DEFAULT_FLAG = "agents.local-bots-hq-fleet-default";
11
- export const LOCAL_BOTS_FLEET_DEFAULT_ENV = "HQ_BOT_FLEET_DEFAULT";
12
- const FLAG_TIMEOUT_MS = 3_000;
13
- const MEMBERSHIP_TIMEOUT_MS = 10_000;
14
- const COMPANY_UID_RE = /^cmp_[A-Za-z0-9]{3,128}$/;
15
- const COMPANY_SLUG_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/;
16
- async function signedInMemberships() {
17
- const token = await ensureCognitoToken({ tokenSource: "person", interactive: false });
18
- const res = await vaultApiFetch({ token, path: "/membership/me", signal: AbortSignal.timeout(MEMBERSHIP_TIMEOUT_MS) });
19
- if (!res.ok)
20
- throw new Error(`membership lookup returned ${res.status}`);
21
- const data = (await res.json());
22
- if (!Array.isArray(data.memberships))
23
- throw new Error("membership lookup returned no list");
24
- return data.memberships;
25
- }
26
- /** Every active company the signed-in owner can access, independent of rollout flags or local folders. */
27
- export async function fleetOwnerCompanies(dependencies = {}) {
28
- const memberships = await (dependencies.memberships ?? signedInMemberships)();
29
- const companies = new Set();
30
- for (const membership of memberships) {
31
- const slug = membership.companySlug?.trim() ?? "";
32
- if (membership.status !== "active" || !COMPANY_UID_RE.test(membership.companyUid))
33
- continue;
34
- if (!COMPANY_SLUG_RE.test(slug) || slug === "personal")
35
- continue;
36
- companies.add(slug);
37
- }
38
- return [...companies].sort((a, b) => a.localeCompare(b));
39
- }
40
- function hasLocalFolder(hqRoot, slug) {
41
- try {
42
- const stat = fs.lstatSync(path.join(hqRoot, "companies", slug));
43
- return stat.isDirectory() && !stat.isSymbolicLink();
44
- }
45
- catch {
46
- return false;
47
- }
48
- }
49
- /**
50
- * The owner's companies that turned the fleet-default flag on: active
51
- * memberships whose company folder is on this computer. Any lookup failure
52
- * leaves that company out. `HQ_BOT_FLEET_DEFAULT=1` skips the flag and keeps
53
- * every such membership.
54
- */
55
- export async function fleetDefaultCompanies(hqRoot, dependencies = {}) {
56
- const env = dependencies.env ?? process.env;
57
- let memberships;
58
- try {
59
- memberships = await (dependencies.memberships ?? signedInMemberships)();
60
- }
61
- catch {
62
- return [];
63
- }
64
- const candidates = new Map();
65
- for (const membership of memberships) {
66
- const slug = membership.companySlug?.trim() ?? "";
67
- if (membership.status !== "active" || !COMPANY_UID_RE.test(membership.companyUid))
68
- continue;
69
- if (!COMPANY_SLUG_RE.test(slug) || slug === "personal" || !hasLocalFolder(hqRoot, slug))
70
- continue;
71
- candidates.set(slug, membership.companyUid);
72
- }
73
- const entries = [...candidates.entries()].sort(([a], [b]) => a.localeCompare(b));
74
- const override = env[LOCAL_BOTS_FLEET_DEFAULT_ENV]?.trim();
75
- if (override === "1" || override === "true")
76
- return entries.map(([slug]) => slug);
77
- const createClient = dependencies.createClient ?? createFlagClient;
78
- const getToken = dependencies.getToken ?? (() => loadCachedTokens()?.idToken ?? "");
79
- const endpoint = resolveFlagRegistryEndpoint(undefined, env);
80
- const doFetch = dependencies.fetch ?? globalThis.fetch;
81
- const flagOn = async (slug, companyUid) => {
82
- let client;
83
- let failed = false;
84
- try {
85
- client = createClient({
86
- endpoint,
87
- companyUid,
88
- companyIdentifiers: [slug],
89
- env: {},
90
- getToken,
91
- ...(doFetch ? { fetch: doFetch } : {}),
92
- refreshIntervalMs: 0,
93
- requestTimeoutMs: FLAG_TIMEOUT_MS,
94
- onError: () => {
95
- failed = true;
96
- },
97
- });
98
- await client.ready();
99
- if (failed)
100
- return false;
101
- return resolveFlagGate(client, LOCAL_BOTS_FLEET_DEFAULT_FLAG, { fallback: false }, () => false);
102
- }
103
- catch {
104
- return false;
105
- }
106
- finally {
107
- try {
108
- client?.close();
109
- }
110
- catch {
111
- /* closing a flag client never changes the answer */
112
- }
113
- }
114
- };
115
- const results = await Promise.all(entries.map(([slug, uid]) => flagOn(slug, uid)));
116
- return entries.filter((_, index) => results[index]).map(([slug]) => slug);
117
- }
118
- /** `HQ_BOT_FLEET_DEFAULT=1|0` overrides the registry; otherwise on when any flagged company was found. */
119
- export function fleetRuntimeIsDefault(flaggedCompanies, env = process.env) {
120
- const override = env[LOCAL_BOTS_FLEET_DEFAULT_ENV]?.trim();
121
- if (override === "1" || override === "true")
122
- return true;
123
- if (override === "0" || override === "false")
124
- return false;
125
- return flaggedCompanies.length > 0;
126
- }
127
- //# sourceMappingURL=fleet-default-flag.js.map