@indigoai-us/hq-cli 5.345.106 → 5.345.108

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 (60) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/assets/scaffold/core/scripts/hq-task.mjs +259 -0
  3. package/assets/scaffold/core/scripts/hq-task.sh +31 -0
  4. package/assets/scaffold/core/scripts/pipeline-worker-table.sh +285 -0
  5. package/dist/command-catalog.generated.d.ts +175 -6
  6. package/dist/command-catalog.generated.js +209 -6
  7. package/dist/commands/auth.js +42 -0
  8. package/dist/commands/capacity.d.ts +1 -1
  9. package/dist/commands/capacity.js +74 -11
  10. package/dist/commands/core-checkpoint-stop-gate-native.js +17 -5
  11. package/dist/commands/core-hq-task-fast.d.ts +4 -0
  12. package/dist/commands/core-hq-task-fast.js +11 -0
  13. package/dist/commands/core-hq-task-native.d.ts +20 -0
  14. package/dist/commands/core-hq-task-native.js +275 -0
  15. package/dist/commands/core-native-bucket-c-flag.d.ts +3 -0
  16. package/dist/commands/core-native-bucket-c-flag.js +6 -0
  17. package/dist/commands/core-native-family-flag.d.ts +0 -2
  18. package/dist/commands/core-native-family-flag.js +0 -4
  19. package/dist/commands/core-native-pipeline-flag.d.ts +3 -0
  20. package/dist/commands/core-native-pipeline-flag.js +6 -0
  21. package/dist/commands/core-ontology-native.js +24 -30
  22. package/dist/commands/core-pipeline-workers-command.d.ts +3 -0
  23. package/dist/commands/core-pipeline-workers-command.js +37 -0
  24. package/dist/commands/core-pipeline-workers-native.d.ts +13 -0
  25. package/dist/commands/core-pipeline-workers-native.js +361 -0
  26. package/dist/commands/core.js +12 -10
  27. package/dist/commands/lanes.js +104 -19
  28. package/dist/commands/outposts.d.ts +5 -0
  29. package/dist/commands/outposts.js +5 -0
  30. package/dist/fast-scaffold.d.ts +1 -1
  31. package/dist/fast-scaffold.js +13 -5
  32. package/dist/hq-cloud-sync-runner/bin/sync-runner.js +56015 -63476
  33. package/dist/hq-cloud-sync-runner/package.json +1 -1
  34. package/dist/lib/capacity/ledger.d.ts +1 -0
  35. package/dist/lib/capacity/ledger.js +10 -0
  36. package/dist/lib/capacity/route.d.ts +146 -0
  37. package/dist/lib/capacity/route.js +452 -0
  38. package/dist/lib/daemon/remote-control-pools.d.ts +2 -2
  39. package/dist/lib/flag-registry-worker-source.generated.d.ts +1 -1
  40. package/dist/lib/flag-registry-worker-source.generated.js +1 -1
  41. package/dist/lib/lanes/reconcile.js +4 -0
  42. package/dist/lib/lanes/remote-control-lane.d.ts +33 -0
  43. package/dist/lib/lanes/remote-control-lane.js +276 -0
  44. package/dist/lib/lanes/spawn.d.ts +5 -0
  45. package/dist/lib/lanes/spawn.js +65 -14
  46. package/dist/lib/lanes/store.js +11 -4
  47. package/dist/lib/lanes/types.d.ts +22 -4
  48. package/dist/lib/lanes/types.js +1 -1
  49. package/dist/lib/lanes/watcher.js +8 -1
  50. package/dist/utils/cognito-session.d.ts +12 -4
  51. package/dist/utils/cognito-session.js +42 -9
  52. package/dist/utils/token-keychain.d.ts +96 -0
  53. package/dist/utils/token-keychain.js +218 -0
  54. package/package.json +2 -2
  55. package/assets/scaffold/core/scripts/ontology-audience-grant.sh +0 -81
  56. package/assets/scaffold/core/scripts/ontology-brief.mjs +0 -93
  57. package/assets/scaffold/core/scripts/ontology-candidate.sh +0 -100
  58. package/assets/scaffold/core/scripts/ontology-garden.mjs +0 -327
  59. package/assets/scaffold/core/scripts/ontology-source-worklist.sh +0 -226
  60. package/assets/scaffold/core/scripts/source-yaml-validate.sh +0 -36
@@ -73,6 +73,7 @@ import { createLaneMesh, emitLaneDecisionEvents, emitLaneTerminalStateEvent, lan
73
73
  import { sessionIdFromEnv } from "../lib/mesh/live/session-identity.js";
74
74
  import { listLaneReviews } from "../lib/lanes/reviews.js";
75
75
  import { effectiveAccountHome } from "../lib/lanes/account-home.js";
76
+ import { remoteControlSelectionConfig, remoteControlSessionHome } from "../lib/lanes/remote-control-lane.js";
76
77
  import { AccountResolutionError, compareLaneQueueOrder, LANE_PROVIDERS, LANE_STATES, QUESTION_STATUSES, SENIOR_KINDS, accountStatus, appendCappedHistory, canonicalizeHome, createLane, decideAdmission, defaultLivenessDeps, defaultSystemdUserDir, defaultThrottleDeps, installReconcileTimer, providerPathEnv, probeDrainHookRegistration, isLanesError, isLaneVersionConflict, isTerminalLaneState, isFinishedResumableHireChild, childrenHoldingHireGrantCarve, laneHoldsHireGrantCarve, assignedChildHireGrants, hireGrantCapacityError, planHireGrantBackfill, terminalChildResumeHireGrantError, withHireGrantAdmission, laneStoryLedgerEnabled, syncLaneToProjectStoryLedger, removeLaneFromProjectStoryLedger, validateProjectStories, buildLaneStatusSnapshot, formatLaneStatusHuman, listLaneIds, listQuestionIds, loadLanesConfig, laneRunsHere, MAX_LANE_DEPTH, MONITOR_ERROR_EXIT_CODE, readLiveMonitorEvidence, resolveMachineIdentity as lookupMachineIdentity, loadLivenessIndex, parseLaneProvider, parseLaneRecord, parseLaneState, parseQuestionRecord, parseSeniorKind, readAllLanes, readLane, sanitizeHostComponent, retryUpdateLane, syncLaneRecordFromOwner, readQuestion, resolveAccount, resolveLaneWorker, ignoredWorkerProfileFields, loadWorkerProfile, loadWorkerProfileWithRegistry, registryWorkerRecord, runReconcilePass, DEAD_HOST_MS, sessionLiveness, tryReadLane, uninstallReconcileTimer, updateLane, updateQuestion, dropboxDir, laneDeliveryMechanism, hasActiveAdmissionReservation, hasActivePendingResume, hasRecordedSessionId, hasEarlierEligibleQueuedLane, laneAdmissionCapReason, providerSupportsSessionResume, providerSessionPortable, isFailedQuotaKeepAliveLane, sessionNotPortableMessage, withLaneAdmissionLock, withAllLaneAdmissionLocks, readWorkerRunResult, resumeCommandRefusal, withLaneHireLocks, raiseLaneQuestion, sha256Text, } from "../lib/lanes/index.js";
77
78
  import { laneStories, storyWarning, } from "../lib/lanes/stories.js";
78
79
  import { resolveLaneKeepAlive } from "../lib/lanes/profile.js";
@@ -84,6 +85,8 @@ import { writeQuestionBody } from "../lib/lanes/questions.js";
84
85
  import { compactionAfterUsage, } from "../lib/lanes/compaction.js";
85
86
  import { parseCliEffort, resolveLaneEffort, } from "../lib/lanes/effort.js";
86
87
  import { LanesError } from "../lib/lanes/errors.js";
88
+ import { LedgerCorrupt, capacityOptionsFromEnv, readNow, rebuildNow, } from "../lib/capacity/ledger.js";
89
+ import { pickAccount } from "../lib/capacity/route.js";
87
90
  import { readLatestEnvelopeRecord } from "../lib/lanes/watcher.js";
88
91
  import { loadQuotaState, quotaBlockFor } from "../lib/lanes/quota.js";
89
92
  import { SESSION_MOVE_REASON } from "../lib/lanes/move-account.js";
@@ -3261,9 +3264,61 @@ async function runCreate(ctx, opts) {
3261
3264
  if (!briefFile) {
3262
3265
  throw new LanesError("missing_brief_file", "--brief-file is required", {});
3263
3266
  }
3264
- const explicitProvider = opts.provider
3267
+ let explicitProvider = opts.provider
3265
3268
  ? parseLaneProvider(opts.provider)
3266
3269
  : undefined;
3270
+ let autoAccountPick;
3271
+ let autoChosenProvider;
3272
+ let autoChosenAccount;
3273
+ if (opts.account !== undefined && opts.account.trim() === "auto") {
3274
+ const ledgerOptions = capacityOptionsFromEnv(ctx.env);
3275
+ let view;
3276
+ try {
3277
+ view = readNow(ledgerOptions);
3278
+ }
3279
+ catch (err) {
3280
+ if (err instanceof LedgerCorrupt) {
3281
+ view = rebuildNow(ledgerOptions);
3282
+ }
3283
+ else {
3284
+ throw new LanesError("capacity_unavailable", `Cannot route --account auto: ${err instanceof Error ? err.message : String(err)}`, {});
3285
+ }
3286
+ }
3287
+ const routeConfig = loadLanesConfig(hqRoot);
3288
+ let routeLanes = [];
3289
+ let routeLanesError = null;
3290
+ try {
3291
+ routeLanes = readAllLanes(hqRoot);
3292
+ }
3293
+ catch (err) {
3294
+ routeLanesError = err instanceof Error ? err.message : String(err);
3295
+ }
3296
+ const result = pickAccount({
3297
+ view,
3298
+ lanes: routeLanes,
3299
+ lanesConfig: routeConfig,
3300
+ ...(explicitProvider ? { providers: [explicitProvider] } : {}),
3301
+ model: opts.model ?? null,
3302
+ now: ctx.now(),
3303
+ lanesError: routeLanesError,
3304
+ });
3305
+ if (!result.ok || !result.pick) {
3306
+ const resetSuffix = result.next_reset ? `; next reset ${result.next_reset}` : "";
3307
+ throw new LanesError("no_account_with_room", `No account has room${resetSuffix}`, {
3308
+ next_reset: result.next_reset,
3309
+ request: result.request,
3310
+ });
3311
+ }
3312
+ autoChosenProvider = parseLaneProvider(result.pick.provider);
3313
+ autoChosenAccount = result.pick.account;
3314
+ autoAccountPick = {
3315
+ why: result.pick.why,
3316
+ headroom: result.pick.headroom,
3317
+ score: result.pick.score,
3318
+ };
3319
+ opts = { ...opts, account: autoChosenAccount, provider: autoChosenProvider };
3320
+ explicitProvider = autoChosenProvider;
3321
+ }
3267
3322
  if (opts.outpost !== undefined && opts.outpost !== "") {
3268
3323
  const requested = opts.outpost.trim();
3269
3324
  let known;
@@ -3350,6 +3405,9 @@ async function runCreate(ctx, opts) {
3350
3405
  if (opts.loop === true && (opts.outpost?.trim() || requestedPlacement?.kind === "outpost" || defaultPlacement?.kind === "outpost")) {
3351
3406
  throw new LanesError("loop_lane_outpost_unsupported", "Loop lanes currently require the local host", { outpost_id: opts.outpost?.trim() ?? (requestedPlacement?.kind === "outpost" ? requestedPlacement.id : defaultPlacement?.kind === "outpost" ? defaultPlacement.id : undefined) });
3352
3407
  }
3408
+ if (opts.remoteControl === true && (opts.outpost?.trim() || requestedPlacement?.kind === "outpost" || defaultPlacement?.kind === "outpost")) {
3409
+ throw new LanesError("remote_control_outpost_unsupported", "--remote-control requires the local daemon account pools", {});
3410
+ }
3353
3411
  let placementCompanyResolved = false;
3354
3412
  let placementCompany;
3355
3413
  let placementGate;
@@ -3391,8 +3449,11 @@ async function runCreate(ctx, opts) {
3391
3449
  const profile = resolvedWorker?.profile;
3392
3450
  const provider = explicitProvider ??
3393
3451
  profile?.meta.provider ??
3394
- parseLaneProvider("codex");
3395
- const continuityEnabled = opts.worker !== undefined && await readLanesRegistryFlagFailOpen(LANE_WORKER_CONTINUITY_FLAG, { company: company ?? meshCompany, env: ctx.env, defaultValue: true });
3452
+ parseLaneProvider(opts.remoteControl === true ? "claude" : "codex");
3453
+ if (opts.remoteControl === true && provider !== "claude") {
3454
+ throw new LanesError("remote_control_requires_claude", "--remote-control requires a Claude lane", { provider });
3455
+ }
3456
+ const continuityEnabled = opts.remoteControl !== true && opts.worker !== undefined && await readLanesRegistryFlagFailOpen(LANE_WORKER_CONTINUITY_FLAG, { company: company ?? meshCompany, env: ctx.env, defaultValue: true });
3396
3457
  let workerContinuity = continuityEnabled
3397
3458
  ? findWorkerContinuityLane(loadAllLanes(hqRoot), {
3398
3459
  senior,
@@ -3424,7 +3485,10 @@ async function runCreate(ctx, opts) {
3424
3485
  path: briefAbs,
3425
3486
  });
3426
3487
  }
3427
- const config = loadLanesConfig(hqRoot);
3488
+ const loadedConfig = loadLanesConfig(hqRoot);
3489
+ const config = opts.remoteControl === true
3490
+ ? remoteControlSelectionConfig(loadedConfig, ctx.env)
3491
+ : loadedConfig;
3428
3492
  let outpostId = opts.outpost?.trim() || undefined;
3429
3493
  let placementHostOverride;
3430
3494
  let placementBalanceHostOverride;
@@ -3458,7 +3522,9 @@ async function runCreate(ctx, opts) {
3458
3522
  inheritedPlacement = callerLane.placement_default;
3459
3523
  }
3460
3524
  }
3461
- const placementToApply = requestedPlacement ?? inheritedPlacement;
3525
+ const placementToApply = opts.remoteControl === true
3526
+ ? { kind: "local" }
3527
+ : requestedPlacement ?? inheritedPlacement;
3462
3528
  const outpostTargets = new Set();
3463
3529
  if (placementToApply?.kind === "outpost")
3464
3530
  outpostTargets.add(placementToApply.id);
@@ -3785,6 +3851,9 @@ async function runCreate(ctx, opts) {
3785
3851
  if (opts.loop === true && host.kind === "outpost") {
3786
3852
  throw new LanesError("loop_lane_outpost_unsupported", "Loop lanes currently require the local host", { outpost_id: host.id });
3787
3853
  }
3854
+ if (opts.remoteControl === true && host.kind === "outpost") {
3855
+ throw new LanesError("remote_control_outpost_unsupported", "--remote-control requires the local daemon account pools", { outpost_id: host.id });
3856
+ }
3788
3857
  // Repeat the busy check while holding provider admission serialization so
3789
3858
  // two concurrent creates cannot both claim one worker's provider thread.
3790
3859
  if (continuityEnabled) {
@@ -3947,6 +4016,7 @@ async function runCreate(ctx, opts) {
3947
4016
  ...(opts.loop === true ? { loop_mode: true } : {}),
3948
4017
  ...(keepAlive ? { keep_alive_opted_in_at: createdAt } : {}),
3949
4018
  provider,
4019
+ ...(opts.remoteControl === true ? { remote_control: true } : {}),
3950
4020
  ...(workerContinuity.resumable && workerContinuity.previous
3951
4021
  ? {
3952
4022
  provider_session_id: workerContinuity.previous.provider_session_id,
@@ -3959,18 +4029,23 @@ async function runCreate(ctx, opts) {
3959
4029
  },
3960
4030
  }
3961
4031
  : {}),
3962
- provider_source: explicitProvider !== undefined
3963
- ? "cli"
3964
- : profile?.meta.provider !== undefined
3965
- ? "profile"
3966
- : "default",
4032
+ provider_source: autoAccountPick !== undefined
4033
+ ? "auto"
4034
+ : explicitProvider !== undefined
4035
+ ? "cli"
4036
+ : profile?.meta.provider !== undefined
4037
+ ? "profile"
4038
+ : "default",
3967
4039
  account: pinnedAccount,
3968
- account_source: accountWasExplicit
3969
- ? "cli"
3970
- : profileAccount !== undefined
3971
- ? "profile"
3972
- : "balanced",
4040
+ account_source: autoAccountPick !== undefined
4041
+ ? "auto"
4042
+ : accountWasExplicit
4043
+ ? "cli"
4044
+ : profileAccount !== undefined
4045
+ ? "profile"
4046
+ : "balanced",
3973
4047
  ...(accountSelection !== undefined ? { account_selection: accountSelection } : {}),
4048
+ ...(autoAccountPick !== undefined ? { account_pick: autoAccountPick } : {}),
3974
4049
  ...(defaultPlacement !== undefined
3975
4050
  ? { placement_default: defaultPlacement }
3976
4051
  : {}),
@@ -4204,6 +4279,7 @@ async function runCreate(ctx, opts) {
4204
4279
  priority: started.priority,
4205
4280
  provider: started.provider,
4206
4281
  account: started.account ?? null,
4282
+ ...(started.account_pick !== undefined ? { account_pick: started.account_pick } : {}),
4207
4283
  model: started.model ?? null,
4208
4284
  effort: started.effort ?? null,
4209
4285
  effort_source: started.effort_source ?? null,
@@ -7208,13 +7284,18 @@ async function prepareAccountMove(ctx, lane, input) {
7208
7284
  throw new LanesError("no_provider_session", `Lane ${laneId} has no recorded provider session id, so there is no session to move`, { lane_id: laneId, provider: lane.provider });
7209
7285
  }
7210
7286
  const sessionId = lane.provider_session_id;
7211
- const config = loadLanesConfig(hqRoot);
7287
+ const loadedConfig = loadLanesConfig(hqRoot);
7288
+ const config = lane.remote_control === true
7289
+ ? remoteControlSelectionConfig(loadedConfig, ctx.env)
7290
+ : loadedConfig;
7212
7291
  const providerCfg = config.providers[lane.provider];
7213
7292
  const targetCfg = providerCfg.accounts[target];
7214
7293
  if (targetCfg === undefined) {
7215
7294
  throw new AccountResolutionError("unknown_account", `Unknown account ${JSON.stringify(target)} for ${lane.provider}. Configured: ${Object.keys(providerCfg.accounts).join(", ") || "(none)"}`, { provider: lane.provider, account: target, enabled: Object.keys(providerCfg.accounts).filter((id) => providerCfg.accounts[id]?.enabled) });
7216
7295
  }
7217
- const targetHome = effectiveAccountHome(targetCfg, ctx.hostname()).home;
7296
+ const targetHome = lane.remote_control === true
7297
+ ? remoteControlSessionHome(config, ctx.hostname())
7298
+ : effectiveAccountHome(targetCfg, ctx.hostname()).home;
7218
7299
  if (!targetCfg.enabled) {
7219
7300
  throw new AccountResolutionError("account_disabled", `Account ${JSON.stringify(target)} is disabled${targetCfg.disabled_reason ? `: ${targetCfg.disabled_reason}` : ""}`, { provider: lane.provider, account: target, reason: targetCfg.disabled_reason ?? "" });
7220
7301
  }
@@ -7375,7 +7456,10 @@ async function selectAutomaticClaudeResumeAccount(ctx, lane, workerProfile, opti
7375
7456
  if (lane.provider !== "claude")
7376
7457
  return undefined;
7377
7458
  const hqRoot = ctx.hqRoot();
7378
- const config = loadLanesConfig(hqRoot);
7459
+ const loadedConfig = loadLanesConfig(hqRoot);
7460
+ const config = lane.remote_control === true
7461
+ ? remoteControlSelectionConfig(loadedConfig, ctx.env)
7462
+ : loadedConfig;
7379
7463
  const currentConfig = lane.account === undefined
7380
7464
  ? undefined
7381
7465
  : config.providers.claude.accounts[lane.account];
@@ -9646,7 +9730,8 @@ export function registerLanesCommand(parent, deps = {}) {
9646
9730
  .option("--fresh-thread", "Skip worker continuity and start a cold provider session")
9647
9731
  .option("--loop", "Keep one worker lane registered to process queued phase envelopes")
9648
9732
  .option("--provider <name>", "claude | codex | grok")
9649
- .option("--account <id>", "Provider account id")
9733
+ .option("--remote-control", "Open a Claude lane in Remote Control using account a for login and the selected account for inference")
9734
+ .option("--account <id>", "Provider account id, or 'auto' to pick the account with the most room (all accounts are one pool across companies)")
9650
9735
  .option("--model <id>", "Model id for the provider CLI")
9651
9736
  .option("--effort <level>", "Effort level; claude: low|medium|high|xhigh|max, codex: minimal|low|medium|high|xhigh|max|ultra, grok: low|medium|high|xhigh")
9652
9737
  .option("--senior <ref>", "session:<id> | lane:<id> | user")
@@ -12,6 +12,11 @@
12
12
  * `vaultApiFetch` satisfies hq-cloud's `OutpostTransport` structurally — the
13
13
  * option bags match field-for-field — so it is passed straight through with no
14
14
  * adapter shim.
15
+ *
16
+ * Company Outposts (`--company`, `jobs register`) are part of that same command
17
+ * tree. This adapter does not grow a second copy. The accepted revision, the
18
+ * catalog price, and the company payer are printed by hq-cloud. The /schedule
19
+ * skill text is a follow-up and is not changed here.
15
20
  */
16
21
  import type { Command } from "commander";
17
22
  import type { ReplicaSyncDependencies } from "@indigoai-us/hq-cloud/outposts/node";
@@ -12,6 +12,11 @@
12
12
  * `vaultApiFetch` satisfies hq-cloud's `OutpostTransport` structurally — the
13
13
  * option bags match field-for-field — so it is passed straight through with no
14
14
  * adapter shim.
15
+ *
16
+ * Company Outposts (`--company`, `jobs register`) are part of that same command
17
+ * tree. This adapter does not grow a second copy. The accepted revision, the
18
+ * catalog price, and the company payer are printed by hq-cloud. The /schedule
19
+ * skill text is a follow-up and is not changed here.
15
20
  */
16
21
  import { loadCachedTokens } from "@indigoai-us/hq-cloud";
17
22
  import { registerOutpostsCommand as registerOutpostsCommandFromCloud } from "@indigoai-us/hq-cloud/outposts/cli";
@@ -63,7 +63,7 @@ export declare function coreCommandHasPathOperands(argv: readonly string[]): boo
63
63
  /** Apply the manifest's operand rule to a copied process.argv vector. */
64
64
  export declare function normalizeCorePathOperands(argv: readonly string[], platform?: NodeJS.Platform, convertPath?: (value: string) => string): string[];
65
65
  /** Family kill switches whose owner-approved default is enabled. */
66
- export declare const CORE_NATIVE_DEFAULT_ON_FAMILY_FLAGS: readonly ["core-native-session", "core-native-hook-helpers", "core-native-policy", "core-native-utilities", "core-native-jobs", "core-native-ontology", "core-native-handoff", "core-native-delegate"];
66
+ export declare const CORE_NATIVE_DEFAULT_ON_FAMILY_FLAGS: readonly ["core-native-session", "core-native-hook-helpers", "core-native-policy", "core-native-utilities", "core-native-jobs", "core-native-handoff", "core-native-bucket-c", "core-native-delegate"];
67
67
  export declare function isDefaultOnFastFamily(flagKey: string): boolean;
68
68
  /** The relocated scripts that qualify for the entrypoint fast path. */
69
69
  export declare const FAST_SCAFFOLD_SCRIPTS: readonly FastScaffoldScript[];
@@ -152,8 +152,8 @@ export const CORE_NATIVE_DEFAULT_ON_FAMILY_FLAGS = [
152
152
  "core-native-policy",
153
153
  "core-native-utilities",
154
154
  "core-native-jobs",
155
- "core-native-ontology",
156
155
  "core-native-handoff",
156
+ "core-native-bucket-c",
157
157
  "core-native-delegate",
158
158
  ];
159
159
  const defaultOnFamilyFlags = new Set(CORE_NATIVE_DEFAULT_ON_FAMILY_FLAGS);
@@ -606,11 +606,7 @@ export const FAST_SCAFFOLD_SCRIPTS = [
606
606
  modulePath: "./commands/core-ontology-native.js",
607
607
  exportName: "runOntologyNativeFast",
608
608
  flagKey: "hq-core-native-fast-route",
609
- familyFlagKey: "core-native-ontology",
610
- asset: `core/scripts/${name === "audience-grant" ? "ontology-audience-grant" : name === "source-worklist" ? "ontology-source-worklist" : name === "source-yaml-validate" ? "source-yaml-validate" : `ontology-${name}`}.${name === "brief" || name === "garden" ? "mjs" : "sh"}`,
611
609
  root: name === "source-yaml-validate" ? "cwd" : "live",
612
- shellCwd: "caller",
613
- shellHqRoot: name === "source-yaml-validate" ? "none" : "live",
614
610
  })),
615
611
  {
616
612
  name: "audit-log",
@@ -713,6 +709,18 @@ export const FAST_SCAFFOLD_SCRIPTS = [
713
709
  shellHqRoot: "live",
714
710
  requiresNodeNetworkCompatibility: true,
715
711
  },
712
+ {
713
+ name: "hq-task",
714
+ kind: "native",
715
+ modulePath: "./commands/core-hq-task-fast.js",
716
+ exportName: "runHqTaskFast",
717
+ flagKey: "hq-core-native-fast-route",
718
+ familyFlagKey: "core-native-bucket-c",
719
+ asset: "core/scripts/hq-task.sh",
720
+ root: "live",
721
+ shellCwd: "live",
722
+ shellHqRoot: "live",
723
+ },
716
724
  ];
717
725
  /**
718
726
  * Parse the small, non-ambiguous `hq secrets env` surface for the gated entry