@indigoai-us/hq-cli 5.345.114 → 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 +13 -0
- package/assets/scaffold/core/scripts/hq-delegate-send.sh +5 -1
- package/dist/commands/bot-jobs.d.ts +1 -11
- package/dist/commands/bot-jobs.js +13 -34
- package/dist/commands/core-audit-log-native.js +1 -1
- package/dist/commands/core-checkpoint-native.d.ts +27 -0
- package/dist/commands/core-checkpoint-native.js +85 -2
- package/dist/commands/core-dm-bind-native.js +1 -1
- package/dist/commands/core-git-pack-extension-check-native.js +1 -1
- package/dist/commands/core-job-native-utils.d.ts +2 -2
- package/dist/commands/core-job-native-utils.js +3 -11
- package/dist/commands/core-job-notify-native.js +1 -2
- package/dist/commands/core-job-probe-native.d.ts +2 -3
- package/dist/commands/core-job-probe-native.js +14 -22
- package/dist/commands/core-job-remediate-native.js +1 -2
- package/dist/commands/core-job-run-native.js +58 -54
- package/dist/commands/core-jobs-native.d.ts +1 -3
- package/dist/commands/core-jobs-native.js +16 -271
- package/dist/commands/core-jobs-schedule.d.ts +7 -0
- package/dist/commands/core-jobs-schedule.js +243 -0
- package/dist/commands/core-native-utilities.d.ts +2 -3
- package/dist/commands/core-native-utilities.js +2 -19
- package/dist/commands/core-pin-native.js +1 -1
- package/dist/commands/core-refresh-vault-access-native.js +1 -1
- package/dist/commands/core-resolve-company-command.js +2 -17
- package/dist/commands/core-work-mesh-bind-trusted-native.js +1 -1
- package/dist/commands/core.js +1 -17
- package/dist/fast-scaffold.d.ts +1 -1
- package/dist/fast-scaffold.js +0 -38
- package/dist/lib/daemon/catalog.d.ts +0 -2
- package/dist/lib/daemon/catalog.js +3 -6
- package/dist/lib/daemon/run.js +0 -7
- package/dist/lib/scan-packages/index.js +6 -0
- package/dist/lib/workers-registry/index.d.ts +16 -0
- package/dist/lib/workers-registry/index.js +1 -1
- package/dist/utils/resident-package-preload.js +2 -7
- package/package.json +1 -1
- package/assets/scaffold/core/scripts/audit-log.sh +0 -384
- package/assets/scaffold/core/scripts/git-pack-extension-check.sh +0 -164
- package/assets/scaffold/core/scripts/hq-dm-bind.sh +0 -590
- package/assets/scaffold/core/scripts/hq-job-notify.sh +0 -389
- package/assets/scaffold/core/scripts/hq-job-probe.sh +0 -865
- package/assets/scaffold/core/scripts/hq-job-remediate.sh +0 -359
- package/assets/scaffold/core/scripts/hq-job-run.sh +0 -1025
- package/assets/scaffold/core/scripts/hq-pin.sh +0 -118
- package/assets/scaffold/core/scripts/jobs-schedule-parse.sh +0 -310
- package/assets/scaffold/core/scripts/jobs-validate.sh +0 -482
- package/assets/scaffold/core/scripts/outpost-jobs-reconcile.sh +0 -836
- package/assets/scaffold/core/scripts/refresh-vault-access.sh +0 -188
- package/assets/scaffold/core/scripts/resolve-company.sh +0 -331
- package/assets/scaffold/core/scripts/work-mesh-live-bind-trusted.sh +0 -184
- package/dist/commands/core-job-post-exit-assets.d.ts +0 -8
- package/dist/commands/core-job-post-exit-assets.js +0 -37
- package/dist/commands/core-native-jobs-flag.d.ts +0 -4
- package/dist/commands/core-native-jobs-flag.js +0 -7
- package/dist/commands/core-native-utilities-flag.d.ts +0 -4
- package/dist/commands/core-native-utilities-flag.js +0 -7
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# hq-core: public
|
|
3
|
-
# hq-job-remediate.sh — bounded self-remediation for Outpost scheduled jobs (US-006).
|
|
4
|
-
#
|
|
5
|
-
# Allowlist (v1):
|
|
6
|
-
# - Cognito / HQ token refresh via `hq auth refresh` when available
|
|
7
|
-
# - one `hq sync pull` (personal or --company)
|
|
8
|
-
# - single immediate retry for transient infra (signaled via retry_recommended)
|
|
9
|
-
# Always-human (never auto-looped):
|
|
10
|
-
# - device re-login (Claude/Codex CLI)
|
|
11
|
-
# - secret share / missing vault grants
|
|
12
|
-
#
|
|
13
|
-
# Usage:
|
|
14
|
-
# core/scripts/hq-job-remediate.sh --failure-class <class> [--job-id <id>] \
|
|
15
|
-
# [--company <slug>] [--hq-root <dir>]
|
|
16
|
-
#
|
|
17
|
-
# Env / overrides (tests):
|
|
18
|
-
# HQ_ROOT, HQ_JOB_REMEDIATE_AUTH_REFRESH_CMD, HQ_JOB_REMEDIATE_SYNC_PULL_CMD
|
|
19
|
-
# HQ_JOB_REMEDIATE_DRY=1 — print plan only; do not execute side effects
|
|
20
|
-
#
|
|
21
|
-
# stdout: JSON {failure_class, attempted, actions[], retry_recommended, always_human, next_action, notes}
|
|
22
|
-
# Exit: 0 always on successful classify/plan (even if nothing attempted); 2 usage.
|
|
23
|
-
|
|
24
|
-
set -euo pipefail
|
|
25
|
-
|
|
26
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
27
|
-
HQ_ROOT="${HQ_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
|
|
28
|
-
|
|
29
|
-
FAILURE_CLASS=""
|
|
30
|
-
JOB_ID=""
|
|
31
|
-
COMPANY=""
|
|
32
|
-
DRY=0
|
|
33
|
-
|
|
34
|
-
usage() {
|
|
35
|
-
sed -n '3,24p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
die() {
|
|
39
|
-
echo "hq-job-remediate: $*" >&2
|
|
40
|
-
exit 2
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
log() {
|
|
44
|
-
echo "hq-job-remediate: $*" >&2
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
while [ $# -gt 0 ]; do
|
|
48
|
-
case "$1" in
|
|
49
|
-
--hq-root)
|
|
50
|
-
HQ_ROOT="${2:-}"
|
|
51
|
-
[ -n "$HQ_ROOT" ] || die "--hq-root requires a directory"
|
|
52
|
-
shift 2
|
|
53
|
-
;;
|
|
54
|
-
--failure-class)
|
|
55
|
-
FAILURE_CLASS="${2:-}"
|
|
56
|
-
[ -n "$FAILURE_CLASS" ] || die "--failure-class requires a value"
|
|
57
|
-
shift 2
|
|
58
|
-
;;
|
|
59
|
-
--job-id)
|
|
60
|
-
JOB_ID="${2:-}"
|
|
61
|
-
[ -n "$JOB_ID" ] || die "--job-id requires a value"
|
|
62
|
-
shift 2
|
|
63
|
-
;;
|
|
64
|
-
--company)
|
|
65
|
-
COMPANY="${2:-}"
|
|
66
|
-
shift 2
|
|
67
|
-
;;
|
|
68
|
-
--dry-run)
|
|
69
|
-
DRY=1
|
|
70
|
-
shift
|
|
71
|
-
;;
|
|
72
|
-
-h|--help)
|
|
73
|
-
usage
|
|
74
|
-
exit 0
|
|
75
|
-
;;
|
|
76
|
-
--)
|
|
77
|
-
shift
|
|
78
|
-
break
|
|
79
|
-
;;
|
|
80
|
-
-*)
|
|
81
|
-
die "unknown option: $1"
|
|
82
|
-
;;
|
|
83
|
-
*)
|
|
84
|
-
die "unexpected argument: $1"
|
|
85
|
-
;;
|
|
86
|
-
esac
|
|
87
|
-
done
|
|
88
|
-
|
|
89
|
-
[ -n "$FAILURE_CLASS" ] || die "usage: hq-job-remediate.sh --failure-class <auth|secrets|timeout|agent_error|infra>"
|
|
90
|
-
|
|
91
|
-
case "$FAILURE_CLASS" in
|
|
92
|
-
auth|secrets|timeout|agent_error|infra) ;;
|
|
93
|
-
*)
|
|
94
|
-
die "unknown failure_class: $FAILURE_CLASS (want auth|secrets|timeout|agent_error|infra)"
|
|
95
|
-
;;
|
|
96
|
-
esac
|
|
97
|
-
|
|
98
|
-
# Company slug: reject flag/path injection (e.g. "foo --on-conflict overwrite").
|
|
99
|
-
if [ -n "$COMPANY" ] && [ "$COMPANY" != "null" ]; then
|
|
100
|
-
if [[ ! "$COMPANY" =~ ^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$ ]]; then
|
|
101
|
-
die "invalid --company slug '$COMPANY' (want lowercase kebab/underscore)"
|
|
102
|
-
fi
|
|
103
|
-
fi
|
|
104
|
-
|
|
105
|
-
# Test/env overrides must not contain shell metacharacters; executed as argv arrays only.
|
|
106
|
-
assert_safe_override_cmd() {
|
|
107
|
-
local cmd="$1"
|
|
108
|
-
if printf '%s' "$cmd" | grep -Eq '[;|&$`()<>]'; then
|
|
109
|
-
die "unsafe remediate override command rejected"
|
|
110
|
-
fi
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
run_override_or_argv() {
|
|
114
|
-
local label="$1"
|
|
115
|
-
shift
|
|
116
|
-
if [ "$#" -eq 1 ] && [[ "$1" == *" "* ]]; then
|
|
117
|
-
# Single string override like "hq auth refresh" — split into argv (no eval).
|
|
118
|
-
assert_safe_override_cmd "$1"
|
|
119
|
-
# shellcheck disable=SC2206
|
|
120
|
-
local -a argv=($1)
|
|
121
|
-
run_or_dry "$label" "${argv[@]}"
|
|
122
|
-
else
|
|
123
|
-
run_or_dry "$label" "$@"
|
|
124
|
-
fi
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if [ "${HQ_JOB_REMEDIATE_DRY:-}" = "1" ]; then
|
|
128
|
-
DRY=1
|
|
129
|
-
fi
|
|
130
|
-
|
|
131
|
-
ACTIONS_JSON='[]'
|
|
132
|
-
ATTEMPTED=0
|
|
133
|
-
RETRY=0
|
|
134
|
-
ALWAYS_HUMAN=0
|
|
135
|
-
NEXT_ACTION=""
|
|
136
|
-
NOTES=""
|
|
137
|
-
|
|
138
|
-
append_action() {
|
|
139
|
-
local a="$1"
|
|
140
|
-
ACTIONS_JSON="$(jq -nc --argjson cur "$ACTIONS_JSON" --arg a "$a" '$cur + [$a]')"
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
run_or_dry() {
|
|
144
|
-
local label="$1"
|
|
145
|
-
shift
|
|
146
|
-
append_action "$label"
|
|
147
|
-
if [ "$DRY" -eq 1 ]; then
|
|
148
|
-
log "dry-run: would run: $*"
|
|
149
|
-
return 0
|
|
150
|
-
fi
|
|
151
|
-
set +e
|
|
152
|
-
"$@" >>"${HQ_JOB_REMEDIATE_LOG:-/dev/null}" 2>&1
|
|
153
|
-
local rc=$?
|
|
154
|
-
set -e
|
|
155
|
-
return "$rc"
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
# --- always-human classes ----------------------------------------------------
|
|
159
|
-
case "$FAILURE_CLASS" in
|
|
160
|
-
secrets)
|
|
161
|
-
ALWAYS_HUMAN=1
|
|
162
|
-
NEXT_ACTION="share the missing secret to this Outpost (hq secrets share KEY) then re-probe"
|
|
163
|
-
NOTES="secret share is always-human; no self-remediation"
|
|
164
|
-
jq -nc \
|
|
165
|
-
--arg failure_class "$FAILURE_CLASS" \
|
|
166
|
-
--arg job_id "$JOB_ID" \
|
|
167
|
-
--argjson attempted "$ATTEMPTED" \
|
|
168
|
-
--argjson actions "$ACTIONS_JSON" \
|
|
169
|
-
--argjson retry_recommended "$RETRY" \
|
|
170
|
-
--argjson always_human "$ALWAYS_HUMAN" \
|
|
171
|
-
--arg next_action "$NEXT_ACTION" \
|
|
172
|
-
--arg notes "$NOTES" \
|
|
173
|
-
'{
|
|
174
|
-
failure_class: $failure_class,
|
|
175
|
-
job_id: $job_id,
|
|
176
|
-
attempted: ($attempted == 1),
|
|
177
|
-
actions: $actions,
|
|
178
|
-
retry_recommended: ($retry_recommended == 1),
|
|
179
|
-
always_human: ($always_human == 1),
|
|
180
|
-
next_action: $next_action,
|
|
181
|
-
notes: $notes
|
|
182
|
-
}'
|
|
183
|
-
exit 0
|
|
184
|
-
;;
|
|
185
|
-
auth)
|
|
186
|
-
# Cognito/HQ token refresh is allowlisted; device re-login is NOT.
|
|
187
|
-
ALWAYS_HUMAN=1
|
|
188
|
-
NEXT_ACTION="re-login on Outpost (device code) for the job runtime CLI"
|
|
189
|
-
NOTES="attempt Cognito refresh if available; never loop device re-login"
|
|
190
|
-
|
|
191
|
-
AUTH_REFRESH_CMD="${HQ_JOB_REMEDIATE_AUTH_REFRESH_CMD:-}"
|
|
192
|
-
if [ -z "$AUTH_REFRESH_CMD" ]; then
|
|
193
|
-
if command -v hq >/dev/null 2>&1; then
|
|
194
|
-
AUTH_REFRESH_CMD="hq auth refresh"
|
|
195
|
-
elif command -v hq-auth-refresh >/dev/null 2>&1; then
|
|
196
|
-
AUTH_REFRESH_CMD="hq-auth-refresh"
|
|
197
|
-
fi
|
|
198
|
-
fi
|
|
199
|
-
|
|
200
|
-
if [ -n "$AUTH_REFRESH_CMD" ]; then
|
|
201
|
-
ATTEMPTED=1
|
|
202
|
-
if run_override_or_argv "cognito_token_refresh" "$AUTH_REFRESH_CMD"; then
|
|
203
|
-
NOTES="cognito refresh ok; device re-login still required if CLI creds missing"
|
|
204
|
-
# Do NOT recommend retry for auth — CLI device login is the real fix.
|
|
205
|
-
RETRY=0
|
|
206
|
-
else
|
|
207
|
-
NOTES="cognito refresh failed or unavailable; device re-login required"
|
|
208
|
-
fi
|
|
209
|
-
else
|
|
210
|
-
NOTES="no hq auth refresh on PATH; device re-login required"
|
|
211
|
-
fi
|
|
212
|
-
|
|
213
|
-
jq -nc \
|
|
214
|
-
--arg failure_class "$FAILURE_CLASS" \
|
|
215
|
-
--arg job_id "$JOB_ID" \
|
|
216
|
-
--argjson attempted "$ATTEMPTED" \
|
|
217
|
-
--argjson actions "$ACTIONS_JSON" \
|
|
218
|
-
--argjson retry_recommended "$RETRY" \
|
|
219
|
-
--argjson always_human "$ALWAYS_HUMAN" \
|
|
220
|
-
--arg next_action "$NEXT_ACTION" \
|
|
221
|
-
--arg notes "$NOTES" \
|
|
222
|
-
'{
|
|
223
|
-
failure_class: $failure_class,
|
|
224
|
-
job_id: $job_id,
|
|
225
|
-
attempted: ($attempted == 1),
|
|
226
|
-
actions: $actions,
|
|
227
|
-
retry_recommended: ($retry_recommended == 1),
|
|
228
|
-
always_human: ($always_human == 1),
|
|
229
|
-
next_action: $next_action,
|
|
230
|
-
notes: $notes
|
|
231
|
-
}'
|
|
232
|
-
exit 0
|
|
233
|
-
;;
|
|
234
|
-
timeout)
|
|
235
|
-
ALWAYS_HUMAN=0
|
|
236
|
-
NEXT_ACTION="raise timeout_seconds or split the job work"
|
|
237
|
-
NOTES="timeout is not self-retried in v1 (avoid thrash)"
|
|
238
|
-
jq -nc \
|
|
239
|
-
--arg failure_class "$FAILURE_CLASS" \
|
|
240
|
-
--arg job_id "$JOB_ID" \
|
|
241
|
-
--argjson attempted 0 \
|
|
242
|
-
--argjson actions "$ACTIONS_JSON" \
|
|
243
|
-
--argjson retry_recommended 0 \
|
|
244
|
-
--argjson always_human 0 \
|
|
245
|
-
--arg next_action "$NEXT_ACTION" \
|
|
246
|
-
--arg notes "$NOTES" \
|
|
247
|
-
'{
|
|
248
|
-
failure_class: $failure_class,
|
|
249
|
-
job_id: $job_id,
|
|
250
|
-
attempted: false,
|
|
251
|
-
actions: $actions,
|
|
252
|
-
retry_recommended: false,
|
|
253
|
-
always_human: false,
|
|
254
|
-
next_action: $next_action,
|
|
255
|
-
notes: $notes
|
|
256
|
-
}'
|
|
257
|
-
exit 0
|
|
258
|
-
;;
|
|
259
|
-
agent_error)
|
|
260
|
-
ALWAYS_HUMAN=0
|
|
261
|
-
NEXT_ACTION="inspect the job log and fix the prompt/skill"
|
|
262
|
-
NOTES="agent_error is not self-remediated in v1"
|
|
263
|
-
jq -nc \
|
|
264
|
-
--arg failure_class "$FAILURE_CLASS" \
|
|
265
|
-
--arg job_id "$JOB_ID" \
|
|
266
|
-
--argjson attempted 0 \
|
|
267
|
-
--argjson actions "$ACTIONS_JSON" \
|
|
268
|
-
--argjson retry_recommended 0 \
|
|
269
|
-
--argjson always_human 0 \
|
|
270
|
-
--arg next_action "$NEXT_ACTION" \
|
|
271
|
-
--arg notes "$NOTES" \
|
|
272
|
-
'{
|
|
273
|
-
failure_class: $failure_class,
|
|
274
|
-
job_id: $job_id,
|
|
275
|
-
attempted: false,
|
|
276
|
-
actions: $actions,
|
|
277
|
-
retry_recommended: false,
|
|
278
|
-
always_human: false,
|
|
279
|
-
next_action: $next_action,
|
|
280
|
-
notes: $notes
|
|
281
|
-
}'
|
|
282
|
-
exit 0
|
|
283
|
-
;;
|
|
284
|
-
infra)
|
|
285
|
-
ALWAYS_HUMAN=0
|
|
286
|
-
NEXT_ACTION="retry after sync; if it persists, check Outpost disk/network"
|
|
287
|
-
NOTES="allowlist: cognito refresh + one hq-sync pull + single retry"
|
|
288
|
-
|
|
289
|
-
AUTH_REFRESH_CMD="${HQ_JOB_REMEDIATE_AUTH_REFRESH_CMD:-}"
|
|
290
|
-
if [ -z "$AUTH_REFRESH_CMD" ]; then
|
|
291
|
-
if command -v hq >/dev/null 2>&1; then
|
|
292
|
-
AUTH_REFRESH_CMD="hq auth refresh"
|
|
293
|
-
elif command -v hq-auth-refresh >/dev/null 2>&1; then
|
|
294
|
-
AUTH_REFRESH_CMD="hq-auth-refresh"
|
|
295
|
-
fi
|
|
296
|
-
fi
|
|
297
|
-
if [ -n "$AUTH_REFRESH_CMD" ]; then
|
|
298
|
-
ATTEMPTED=1
|
|
299
|
-
run_override_or_argv "cognito_token_refresh" "$AUTH_REFRESH_CMD" || true
|
|
300
|
-
fi
|
|
301
|
-
|
|
302
|
-
SYNC_OVERRIDE="${HQ_JOB_REMEDIATE_SYNC_PULL_CMD:-}"
|
|
303
|
-
ATTEMPTED=1
|
|
304
|
-
if [ -n "$SYNC_OVERRIDE" ]; then
|
|
305
|
-
if run_override_or_argv "hq_sync_pull" "$SYNC_OVERRIDE"; then
|
|
306
|
-
RETRY=1
|
|
307
|
-
NOTES="sync pull ok; recommend single immediate retry"
|
|
308
|
-
else
|
|
309
|
-
NOTES="sync pull failed; still recommend one infra retry"
|
|
310
|
-
RETRY=1
|
|
311
|
-
fi
|
|
312
|
-
elif command -v hq >/dev/null 2>&1; then
|
|
313
|
-
if [ -n "$COMPANY" ] && [ "$COMPANY" != "null" ]; then
|
|
314
|
-
if run_or_dry "hq_sync_pull" hq sync pull --company "$COMPANY" --hq-root "$HQ_ROOT"; then
|
|
315
|
-
RETRY=1
|
|
316
|
-
NOTES="sync pull ok; recommend single immediate retry"
|
|
317
|
-
else
|
|
318
|
-
NOTES="sync pull failed; still recommend one infra retry"
|
|
319
|
-
RETRY=1
|
|
320
|
-
fi
|
|
321
|
-
else
|
|
322
|
-
if run_or_dry "hq_sync_pull" hq sync pull --personal --hq-root "$HQ_ROOT"; then
|
|
323
|
-
RETRY=1
|
|
324
|
-
NOTES="sync pull ok; recommend single immediate retry"
|
|
325
|
-
else
|
|
326
|
-
NOTES="sync pull failed; still recommend one infra retry"
|
|
327
|
-
RETRY=1
|
|
328
|
-
fi
|
|
329
|
-
fi
|
|
330
|
-
else
|
|
331
|
-
append_action "hq_sync_pull_unavailable"
|
|
332
|
-
RETRY=1
|
|
333
|
-
NOTES="hq sync pull unavailable; recommend single infra retry anyway"
|
|
334
|
-
fi
|
|
335
|
-
|
|
336
|
-
jq -nc \
|
|
337
|
-
--arg failure_class "$FAILURE_CLASS" \
|
|
338
|
-
--arg job_id "$JOB_ID" \
|
|
339
|
-
--argjson attempted "$ATTEMPTED" \
|
|
340
|
-
--argjson actions "$ACTIONS_JSON" \
|
|
341
|
-
--argjson retry_recommended "$RETRY" \
|
|
342
|
-
--argjson always_human 0 \
|
|
343
|
-
--arg next_action "$NEXT_ACTION" \
|
|
344
|
-
--arg notes "$NOTES" \
|
|
345
|
-
'{
|
|
346
|
-
failure_class: $failure_class,
|
|
347
|
-
job_id: $job_id,
|
|
348
|
-
attempted: ($attempted == 1),
|
|
349
|
-
actions: $actions,
|
|
350
|
-
retry_recommended: ($retry_recommended == 1),
|
|
351
|
-
always_human: false,
|
|
352
|
-
next_action: $next_action,
|
|
353
|
-
notes: $notes
|
|
354
|
-
}'
|
|
355
|
-
exit 0
|
|
356
|
-
;;
|
|
357
|
-
esac
|
|
358
|
-
|
|
359
|
-
die "unreachable failure_class branch"
|