@indigoai-us/hq-cli 5.310.0 → 5.311.1
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 +20 -0
- package/assets/scaffold/core/scripts/jobs-validate.sh +1 -1
- package/dist/command-catalog.generated.d.ts +2 -2
- package/dist/command-catalog.generated.js +2 -2
- package/dist/commands/channels.d.ts +1 -9
- package/dist/commands/channels.js +2 -2
- package/dist/commands/company-transfer.d.ts +4 -28
- package/dist/commands/company-transfer.js +5 -49
- package/dist/commands/core-checkpoint-stop-gate-native.d.ts +34 -0
- package/dist/commands/core-checkpoint-stop-gate-native.js +713 -0
- package/dist/commands/core-checkpoint.d.ts +0 -24
- package/dist/commands/core-checkpoint.js +4 -4
- package/dist/commands/core-command-catalog.js +1 -1
- package/dist/commands/core-delegate-w1b.js +111 -14
- package/dist/commands/core-delegate.d.ts +9 -0
- package/dist/commands/core-delegate.js +44 -23
- package/dist/commands/core-hq-session-native.d.ts +39 -0
- package/dist/commands/core-hq-session-native.js +579 -0
- package/dist/commands/core-jobs-native.js +1 -4
- package/dist/commands/core-native-session-flag.d.ts +4 -0
- package/dist/commands/core-native-session-flag.js +7 -0
- package/dist/commands/core-native-worker-skills-flag.d.ts +4 -0
- package/dist/commands/core-native-worker-skills-flag.js +7 -0
- package/dist/commands/core-worker-lint-native.d.ts +4 -0
- package/dist/commands/core-worker-lint-native.js +160 -0
- package/dist/commands/core-worker-share-native.d.ts +5 -0
- package/dist/commands/core-worker-share-native.js +260 -0
- package/dist/commands/core-worker-skills-command.d.ts +8 -0
- package/dist/commands/core-worker-skills-command.js +33 -0
- package/dist/commands/core-worker-skills-runtime.d.ts +33 -0
- package/dist/commands/core-worker-skills-runtime.js +86 -0
- package/dist/commands/core.js +4 -2
- package/dist/commands/dm.d.ts +3 -7
- package/dist/commands/dm.js +3 -3
- package/dist/commands/integrations-core.d.ts +2 -0
- package/dist/commands/integrations-core.js +4 -0
- package/dist/commands/integrations-import.d.ts +1 -1
- package/dist/commands/integrations-import.js +34 -19
- package/dist/commands/integrations.js +2 -2
- package/dist/commands/lanes-accounts.js +3 -1
- package/dist/commands/lanes-message.js +84 -10
- package/dist/commands/lanes-shared.d.ts +4 -1
- package/dist/commands/lanes.d.ts +4 -1
- package/dist/commands/lanes.js +48 -7
- package/dist/commands/personal-connector-settings-flag.d.ts +4 -0
- package/dist/commands/personal-connector-settings-flag.js +7 -0
- package/dist/commands/report.d.ts +1 -26
- package/dist/commands/report.js +6 -6
- package/dist/fast-core.js +15 -2
- package/dist/fast-scaffold.js +25 -2
- package/dist/index.js +8 -0
- package/dist/lib/bot/continuity.d.ts +2 -1
- package/dist/lib/bot/job-completions.d.ts +0 -2
- package/dist/lib/bot/job-completions.js +2 -2
- package/dist/lib/bot/local-config.d.ts +0 -10
- package/dist/lib/bot/local-config.js +3 -9
- package/dist/lib/bot/owner-context.d.ts +2 -6
- package/dist/lib/bot/owner-context.js +3 -3
- package/dist/lib/bot/setup-explain.d.ts +0 -4
- package/dist/lib/bot/setup-explain.js +2 -2
- package/dist/lib/daemon/catalog.d.ts +3 -2
- package/dist/lib/daemon/hq-cloud.d.ts +2 -2
- package/dist/lib/daemon/hq-cloud.js +1 -1
- package/dist/lib/daemon/machine-type.d.ts +3 -4
- package/dist/lib/daemon/machine-type.js +2 -2
- package/dist/lib/daemon/remote-control.d.ts +0 -1
- package/dist/lib/daemon/remote-control.js +1 -1
- package/dist/lib/daemon/supervisor.d.ts +4 -9
- package/dist/lib/daemon/supervisor.js +5 -5
- package/dist/lib/lanes/admission-host.d.ts +3 -0
- package/dist/lib/lanes/admission-host.js +4 -0
- package/dist/lib/lanes/autopilot-registry.d.ts +62 -0
- package/dist/lib/lanes/autopilot-registry.js +192 -0
- package/dist/lib/lanes/autopilot.d.ts +2 -0
- package/dist/lib/lanes/autopilot.js +18 -5
- package/dist/lib/lanes/claude-balance.d.ts +6 -0
- package/dist/lib/lanes/claude-balance.js +17 -2
- package/dist/lib/lanes/keep-alive.d.ts +3 -0
- package/dist/lib/lanes/keep-alive.js +3 -0
- package/dist/lib/lanes/reconcile.js +14 -6
- package/dist/lib/lanes/spawn.js +2 -0
- package/dist/lib/mesh/live/daemon/credentials.d.ts +2 -17
- package/dist/lib/mesh/live/daemon/credentials.js +9 -9
- package/dist/lib/mesh/live/daemon/index.d.ts +5 -5
- package/dist/lib/mesh/live/daemon/index.js +2 -2
- package/dist/lib/mesh/live/daemon/state.d.ts +1 -1
- package/dist/lib/mesh/live/daemon/transcript-watch.d.ts +4 -11
- package/dist/lib/mesh/live/daemon/transcript-watch.js +5 -5
- package/dist/lib/work-context/company.d.ts +2 -25
- package/dist/lib/work-context/company.js +3 -3
- package/dist/lib/work-context/config.d.ts +3 -8
- package/dist/lib/work-context/config.js +2 -13
- package/dist/lib/work-context/state.d.ts +4 -13
- package/dist/lib/work-context/state.js +2 -30
- package/dist/utils/run-bundled-script.d.ts +6 -0
- package/dist/utils/run-bundled-script.js +14 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [5.311.1] — 2026-10-01
|
|
6
|
+
- Preserve shell-compatible diagnostics when delegate pickup receives a malformed manifest.
|
|
7
|
+
- Print URLs returned by `hq integrations call` without redacting their paths or query values. Other integration JSON output keeps its existing URL redaction.
|
|
8
|
+
|
|
9
|
+
## [5.311.0] — 2026-10-01
|
|
10
|
+
- Add native `hq core hq-session` and `checkpoint-stop-gate` handlers on the fast route behind the default-off `core-native-session` flag, retaining bundled shell rollback companions.
|
|
11
|
+
|
|
12
|
+
- Claude lane account selection now skips accounts held for the lane's model and preserves the quota reset details when no eligible account is available.
|
|
13
|
+
- Require a latency regression to recur across benchmark rounds before failing the fast-route gate.
|
|
14
|
+
- Detect inline private keys when validating job definitions.
|
|
15
|
+
- Deliver each Outpost its own lead autopilot registry rows from the primary reconcile pass, and report a missing or stale registry on the Outpost.
|
|
16
|
+
- Add an opt-in, default-off hq-flags gate that lets the first keep-alive retry after a done turn run after a 30-second settle while preserving later backoff.
|
|
17
|
+
- Add the default-off cli.personal-connector-settings flag to store imported local connector manifests in the personal vault instead of the company vault.
|
|
18
|
+
|
|
5
19
|
## [5.310.0] — 2026-10-01
|
|
20
|
+
- Move directly controlled Linux CI checks to ARM runners where their tools support ARM.
|
|
21
|
+
- Lead autopilot resolves a lead's company through its project when the lane record does not carry a company, and skips project paths registered to a different company.
|
|
22
|
+
- Install-tree recovery errors now report bounded sibling, target, version-gate phase, and updater-liveness enums.
|
|
23
|
+
|
|
24
|
+
## [5.309.1] — 2026-10-01
|
|
6
25
|
- Fixed `hq agents rm` to remove external agents through revoke rather than the hosted-agent teardown path.
|
|
7
26
|
|
|
8
27
|
- Wait for asynchronous integration approvals to reach a terminal queue state and report pending work accurately.
|
|
@@ -10,6 +29,7 @@
|
|
|
10
29
|
- Add privacy-safe qmd exit diagnostics to Sentry reports.
|
|
11
30
|
|
|
12
31
|
- `hq files delete` help now explains exact-key and wildcard-prefix matching.
|
|
32
|
+
- Add native `hq core worker lint` and `hq core worker share` behind the default-off `core-native-worker-skills` gate.
|
|
13
33
|
|
|
14
34
|
- Port `hq core dm-bind` and `hq core work-mesh-bind-trusted` to native TypeScript behind `core-native-utilities`, retaining the bundled-script fallback.
|
|
15
35
|
|
|
@@ -145,7 +145,7 @@ scan_string_for_secrets() {
|
|
|
145
145
|
for entry in "${SECRET_PATTERNS[@]}"; do
|
|
146
146
|
pattern="${entry%%:*}"
|
|
147
147
|
name="${entry#*:}"
|
|
148
|
-
if grep -Eq "$pattern" "$tmp" 2>/dev/null; then
|
|
148
|
+
if grep -Eq -e "$pattern" "$tmp" 2>/dev/null; then
|
|
149
149
|
err "$file" "$field" "inline credential-shaped value matched pattern '$name' (names only; never values)"
|
|
150
150
|
fi
|
|
151
151
|
done
|
|
@@ -2881,7 +2881,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2881
2881
|
readonly subcommands: readonly [];
|
|
2882
2882
|
}, {
|
|
2883
2883
|
readonly name: "import";
|
|
2884
|
-
readonly description: "Import Claude Desktop connectors into
|
|
2884
|
+
readonly description: "Import Claude Desktop connectors into HQ Integrations";
|
|
2885
2885
|
readonly aliases: readonly [];
|
|
2886
2886
|
readonly hidden: false;
|
|
2887
2887
|
readonly usage: "[options]";
|
|
@@ -2905,7 +2905,7 @@ export declare const COMMAND_CATALOG: readonly [{
|
|
|
2905
2905
|
readonly subcommands: readonly [];
|
|
2906
2906
|
}, {
|
|
2907
2907
|
readonly name: "install-local";
|
|
2908
|
-
readonly description: "
|
|
2908
|
+
readonly description: "Install local connector settings in this machine's Claude/Codex MCP config";
|
|
2909
2909
|
readonly aliases: readonly [];
|
|
2910
2910
|
readonly hidden: false;
|
|
2911
2911
|
readonly usage: "[options] <name>";
|
|
@@ -3692,7 +3692,7 @@ export const COMMAND_CATALOG = [
|
|
|
3692
3692
|
},
|
|
3693
3693
|
{
|
|
3694
3694
|
"name": "import",
|
|
3695
|
-
"description": "Import Claude Desktop connectors into
|
|
3695
|
+
"description": "Import Claude Desktop connectors into HQ Integrations",
|
|
3696
3696
|
"aliases": [],
|
|
3697
3697
|
"hidden": false,
|
|
3698
3698
|
"usage": "[options]",
|
|
@@ -3723,7 +3723,7 @@ export const COMMAND_CATALOG = [
|
|
|
3723
3723
|
},
|
|
3724
3724
|
{
|
|
3725
3725
|
"name": "install-local",
|
|
3726
|
-
"description": "
|
|
3726
|
+
"description": "Install local connector settings in this machine's Claude/Codex MCP config",
|
|
3727
3727
|
"aliases": [],
|
|
3728
3728
|
"hidden": false,
|
|
3729
3729
|
"usage": "[options] <name>",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import { type
|
|
2
|
+
import { type ChannelSummary } from "./dm.js";
|
|
3
3
|
/**
|
|
4
4
|
* Human label for a channel row. Named channels (personal/company) show their
|
|
5
5
|
* name + a `hq dm <slug>` hint; unnamed group DMs are identified by their
|
|
@@ -12,13 +12,5 @@ export declare function describeChannel(c: ChannelSummary): string;
|
|
|
12
12
|
* fetched list) so the formatting is unit-testable without network/auth.
|
|
13
13
|
*/
|
|
14
14
|
export declare function formatChannelsList(channels: ChannelSummary[]): string;
|
|
15
|
-
/**
|
|
16
|
-
* Remove the caller from a channel roster before it is used for mentions.
|
|
17
|
-
* Machine principals identify themselves with the JWT uid; human sessions can
|
|
18
|
-
* also match the roster's email when the uid claim is absent.
|
|
19
|
-
*/
|
|
20
|
-
export declare function excludeCallerFromChannelMembers(members: ChannelMember[], caller: CallerIdentity): ChannelMember[];
|
|
21
|
-
/** Render the roster as either dm-bind's tab-separated format or JSON. */
|
|
22
|
-
export declare function formatChannelMembers(members: ChannelMember[], json: boolean): string;
|
|
23
15
|
export declare function registerChannelsCommand(program: Command): void;
|
|
24
16
|
//# sourceMappingURL=channels.d.ts.map
|
|
@@ -47,7 +47,7 @@ export function formatChannelsList(channels) {
|
|
|
47
47
|
* Machine principals identify themselves with the JWT uid; human sessions can
|
|
48
48
|
* also match the roster's email when the uid claim is absent.
|
|
49
49
|
*/
|
|
50
|
-
|
|
50
|
+
function excludeCallerFromChannelMembers(members, caller) {
|
|
51
51
|
return members.filter((member) => {
|
|
52
52
|
if (caller.personUid && member.personUid === caller.personUid)
|
|
53
53
|
return false;
|
|
@@ -60,7 +60,7 @@ export function excludeCallerFromChannelMembers(members, caller) {
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
/** Render the roster as either dm-bind's tab-separated format or JSON. */
|
|
63
|
-
|
|
63
|
+
function formatChannelMembers(members, json) {
|
|
64
64
|
if (json)
|
|
65
65
|
return JSON.stringify(members);
|
|
66
66
|
return members
|
|
@@ -38,23 +38,15 @@ import { type ActiveMember } from "./members.js";
|
|
|
38
38
|
* confirmation prompt behind an injectable seam so tests can drive it.
|
|
39
39
|
*/
|
|
40
40
|
/** The four write transitions the server accepts. */
|
|
41
|
-
|
|
42
|
-
export type TransferAction = (typeof TRANSFER_ACTIONS)[number];
|
|
41
|
+
type TransferAction = "initiate" | "accept" | "decline" | "cancel";
|
|
43
42
|
/**
|
|
44
43
|
* Legal `--initiator-role` values. `owner` is deliberately absent: a handover
|
|
45
44
|
* where the outgoing owner keeps `owner` is not a handover. `remove` is the
|
|
46
45
|
* ONLY value that takes them off the company, and it can only ever arrive from
|
|
47
46
|
* an explicit flag.
|
|
48
47
|
*/
|
|
49
|
-
|
|
48
|
+
declare const INITIATOR_ROLE_VALUES: readonly ["admin", "member", "guest", "remove"];
|
|
50
49
|
export type InitiatorRoleFlag = (typeof INITIATOR_ROLE_VALUES)[number];
|
|
51
|
-
/**
|
|
52
|
-
* What the SERVER falls back to when `initiatorRole` is absent. Mirrored here
|
|
53
|
-
* only so the confirmation preview can tell the operator what will happen; the
|
|
54
|
-
* CLI never puts this value on the wire, because sending it would defeat the
|
|
55
|
-
* point of leaving the field absent.
|
|
56
|
-
*/
|
|
57
|
-
export declare const DEFAULT_INITIATOR_ROLE = "admin";
|
|
58
50
|
/** A response field's presence, kept separate from its value. */
|
|
59
51
|
export interface WireRead<T = unknown> {
|
|
60
52
|
present: boolean;
|
|
@@ -86,19 +78,6 @@ export interface TransferBodyParams {
|
|
|
86
78
|
transferId?: string;
|
|
87
79
|
reason?: string;
|
|
88
80
|
}
|
|
89
|
-
/**
|
|
90
|
-
* The wire prefix that turns `POST /membership/role` into a transfer request.
|
|
91
|
-
* Mirrors the server's `TRANSFER_ACTION_PREFIX` in `_ownership-transfer.ts`:
|
|
92
|
-
* a body whose `action` starts with `transfer-` is a transfer; anything else
|
|
93
|
-
* (including no `action` at all) is an ordinary role change.
|
|
94
|
-
*/
|
|
95
|
-
export declare const TRANSFER_ACTION_PREFIX = "transfer-";
|
|
96
|
-
/**
|
|
97
|
-
* The query discriminator on `GET /membership/company/{companyUid}` that
|
|
98
|
-
* selects the transfer surface instead of the member roster. Mirrors the
|
|
99
|
-
* server's `TRANSFER_HISTORY_VIEW` (exact match on the server side).
|
|
100
|
-
*/
|
|
101
|
-
export declare const TRANSFER_HISTORY_VIEW = "transfers";
|
|
102
81
|
/**
|
|
103
82
|
* Build the `POST /membership/role` transfer body. The CLI-side `action`
|
|
104
83
|
* ("initiate" | …) is prefixed to the wire discriminator ("transfer-initiate"
|
|
@@ -127,7 +106,7 @@ export declare function describeInitiatorOutcome(role: InitiatorRoleFlag | undef
|
|
|
127
106
|
*/
|
|
128
107
|
export declare function describeEffects(rawEffects: unknown): string[];
|
|
129
108
|
/** Injectable yes/no confirmation seam (stubbed in tests). */
|
|
130
|
-
|
|
109
|
+
type ConfirmFn = (message: string) => Promise<boolean>;
|
|
131
110
|
/**
|
|
132
111
|
* The real prompt. Refuses (rather than assuming yes) when stdin is not a TTY,
|
|
133
112
|
* so a transfer can never be initiated or accepted by a pipeline that simply
|
|
@@ -145,10 +124,6 @@ export declare function realConfirm(message: string): Promise<boolean>;
|
|
|
145
124
|
* who is already an active member.
|
|
146
125
|
*/
|
|
147
126
|
export declare function matchMemberTarget(members: ActiveMember[], target: string): ActiveMember | undefined;
|
|
148
|
-
export declare function resolveTargetPersonUid(token: string, companyUid: string, target: string): Promise<{
|
|
149
|
-
personUid: string;
|
|
150
|
-
label: string;
|
|
151
|
-
}>;
|
|
152
127
|
export interface TransferDeps {
|
|
153
128
|
confirm?: ConfirmFn;
|
|
154
129
|
}
|
|
@@ -182,4 +157,5 @@ export interface RunTransferStatusParams {
|
|
|
182
157
|
/** `hq company transfer status` — the pending nomination plus the audit trail. */
|
|
183
158
|
export declare function runCompanyTransferStatus(params: RunTransferStatusParams): Promise<void>;
|
|
184
159
|
export declare function registerCompanyTransferCommand(company: Command, deps?: TransferDeps): void;
|
|
160
|
+
export {};
|
|
185
161
|
//# sourceMappingURL=company-transfer.d.ts.map
|
|
@@ -3,57 +3,13 @@ import * as readline from "node:readline";
|
|
|
3
3
|
import { ensureCognitoToken } from "../utils/cognito-session.js";
|
|
4
4
|
import { vaultApiFetch, getEntityUid } from "../utils/vault-api.js";
|
|
5
5
|
import { listActiveMembers } from "./members.js";
|
|
6
|
-
/**
|
|
7
|
-
* `hq company transfer` — company ownership handover (client-service-pack
|
|
8
|
-
* US-010). The server adds ZERO new API routes (vault-api-hq-prod sits at the
|
|
9
|
-
* 600-route quota), so the CLI half multiplexes onto two EXISTING routes:
|
|
10
|
-
*
|
|
11
|
-
* - WRITES ride `POST /membership/role` with a body discriminator
|
|
12
|
-
* `action: "transfer-initiate" | "transfer-accept" | "transfer-decline" |
|
|
13
|
-
* "transfer-cancel"`. The ordinary role payload has never carried an
|
|
14
|
-
* `action` field, so the shapes cannot collide.
|
|
15
|
-
* - The READ rides `GET /membership/company/{companyUid}?view=transfers`;
|
|
16
|
-
* without that exact `view` value the route returns the member roster as
|
|
17
|
-
* before.
|
|
18
|
-
*
|
|
19
|
-
* TWO-PARTY BY CONSTRUCTION. `initiate` NOMINATES; it does not transfer
|
|
20
|
-
* anything. Ownership moves only when the nominee runs `accept`. The four write
|
|
21
|
-
* transitions (initiate / accept / decline / cancel) all multiplex through one
|
|
22
|
-
* POST with an explicit `action`, matching the server's route shape.
|
|
23
|
-
*
|
|
24
|
-
* ABSENT-FIELD DISCIPLINE (policy `hq-absent-field-never-means-constraining-value`).
|
|
25
|
-
* This flow spans two repos that deploy in EITHER order, so absence is load
|
|
26
|
-
* bearing in both directions and is handled in both directions here:
|
|
27
|
-
*
|
|
28
|
-
* - REQUESTS: a flag the operator did not pass is OMITTED from the body — it
|
|
29
|
-
* is never defaulted to a value on the wire. `--initiator-role` unset sends
|
|
30
|
-
* no `initiatorRole` at all, so the server applies its own reversible
|
|
31
|
-
* "keep them as admin" default; the CLI can therefore never turn silence
|
|
32
|
-
* into `remove`. Same for `--transfer-id` (absent = "the pending one").
|
|
33
|
-
* - RESPONSES: fields are read with presence and value SEPARATELY
|
|
34
|
-
* ({@link readWireField}), because an OLDER server omits fields a newer CLI
|
|
35
|
-
* knows about. An absent `effects.initiator` renders as "not reported",
|
|
36
|
-
* never as "removed" — the CLI must not narrate a destructive outcome it
|
|
37
|
-
* was never actually told about.
|
|
38
|
-
*
|
|
39
|
-
* Conventions mirror `company.ts` / `files.ts`: ensureCognitoToken() →
|
|
40
|
-
* getEntityUid() → vaultApiFetch() → error-check → chalk output, with the
|
|
41
|
-
* confirmation prompt behind an injectable seam so tests can drive it.
|
|
42
|
-
*/
|
|
43
|
-
/** The four write transitions the server accepts. */
|
|
44
|
-
export const TRANSFER_ACTIONS = [
|
|
45
|
-
"initiate",
|
|
46
|
-
"accept",
|
|
47
|
-
"decline",
|
|
48
|
-
"cancel",
|
|
49
|
-
];
|
|
50
6
|
/**
|
|
51
7
|
* Legal `--initiator-role` values. `owner` is deliberately absent: a handover
|
|
52
8
|
* where the outgoing owner keeps `owner` is not a handover. `remove` is the
|
|
53
9
|
* ONLY value that takes them off the company, and it can only ever arrive from
|
|
54
10
|
* an explicit flag.
|
|
55
11
|
*/
|
|
56
|
-
|
|
12
|
+
const INITIATOR_ROLE_VALUES = [
|
|
57
13
|
"admin",
|
|
58
14
|
"member",
|
|
59
15
|
"guest",
|
|
@@ -65,7 +21,7 @@ export const INITIATOR_ROLE_VALUES = [
|
|
|
65
21
|
* CLI never puts this value on the wire, because sending it would defeat the
|
|
66
22
|
* point of leaving the field absent.
|
|
67
23
|
*/
|
|
68
|
-
|
|
24
|
+
const DEFAULT_INITIATOR_ROLE = "admin";
|
|
69
25
|
/**
|
|
70
26
|
* Read a field off a server response reporting presence and value SEPARATELY.
|
|
71
27
|
*
|
|
@@ -120,13 +76,13 @@ export function parseInitiatorRole(raw) {
|
|
|
120
76
|
* a body whose `action` starts with `transfer-` is a transfer; anything else
|
|
121
77
|
* (including no `action` at all) is an ordinary role change.
|
|
122
78
|
*/
|
|
123
|
-
|
|
79
|
+
const TRANSFER_ACTION_PREFIX = "transfer-";
|
|
124
80
|
/**
|
|
125
81
|
* The query discriminator on `GET /membership/company/{companyUid}` that
|
|
126
82
|
* selects the transfer surface instead of the member roster. Mirrors the
|
|
127
83
|
* server's `TRANSFER_HISTORY_VIEW` (exact match on the server side).
|
|
128
84
|
*/
|
|
129
|
-
|
|
85
|
+
const TRANSFER_HISTORY_VIEW = "transfers";
|
|
130
86
|
/**
|
|
131
87
|
* Build the `POST /membership/role` transfer body. The CLI-side `action`
|
|
132
88
|
* ("initiate" | …) is prefixed to the wire discriminator ("transfer-initiate"
|
|
@@ -289,7 +245,7 @@ export function matchMemberTarget(members, target) {
|
|
|
289
245
|
m.personName?.toLowerCase() === needle ||
|
|
290
246
|
m.personUid?.toLowerCase() === needle);
|
|
291
247
|
}
|
|
292
|
-
|
|
248
|
+
async function resolveTargetPersonUid(token, companyUid, target) {
|
|
293
249
|
const trimmed = target.trim();
|
|
294
250
|
if (PERSON_UID_PATTERN.test(trimmed) || AGENT_UID_PATTERN.test(trimmed)) {
|
|
295
251
|
return { personUid: trimmed, label: trimmed };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const CHECKPOINT_STOP_GATE_ASSET = "core/scripts/checkpoint-stop-gate.sh";
|
|
2
|
+
export type CheckpointStopGateResult = {
|
|
3
|
+
code: number;
|
|
4
|
+
stdout: string;
|
|
5
|
+
stderr: string;
|
|
6
|
+
};
|
|
7
|
+
export type CheckpointStopGateDependencies = {
|
|
8
|
+
env: NodeJS.ProcessEnv;
|
|
9
|
+
now: () => Date;
|
|
10
|
+
readFile: (filePath: string, encoding: BufferEncoding) => string;
|
|
11
|
+
exists: (filePath: string) => boolean;
|
|
12
|
+
isFile: (filePath: string) => boolean;
|
|
13
|
+
isDirectory: (filePath: string) => boolean;
|
|
14
|
+
canRead: (filePath: string) => boolean;
|
|
15
|
+
canWrite: (filePath: string) => boolean;
|
|
16
|
+
mtimeSeconds: (filePath: string) => number;
|
|
17
|
+
mkdir: (directory: string) => void;
|
|
18
|
+
writeFile: (filePath: string, contents: string, mode?: number) => void;
|
|
19
|
+
appendFile: (filePath: string, contents: string) => void;
|
|
20
|
+
rename: (from: string, to: string) => void;
|
|
21
|
+
remove: (filePath: string) => void;
|
|
22
|
+
touch: (filePath: string) => void;
|
|
23
|
+
makeTempPath: () => string;
|
|
24
|
+
commandExists: (name: string, env?: NodeJS.ProcessEnv) => boolean;
|
|
25
|
+
spawnHqDetached: (args: string[], env?: NodeJS.ProcessEnv) => void;
|
|
26
|
+
};
|
|
27
|
+
/** In-process command body with injectable filesystem, clock, PATH, and hq process. */
|
|
28
|
+
export declare function executeCheckpointStopGate(input: string, context: {
|
|
29
|
+
cwd: string;
|
|
30
|
+
hqRoot?: string;
|
|
31
|
+
}, overrides?: Partial<CheckpointStopGateDependencies>): CheckpointStopGateResult;
|
|
32
|
+
/** Signature consumed by the lightweight fast-core dispatcher. */
|
|
33
|
+
export declare function runCheckpointStopGateFast(_argv: readonly string[], stdin: string, cwd: string, hqRoot: string | undefined): Promise<number>;
|
|
34
|
+
//# sourceMappingURL=core-checkpoint-stop-gate-native.d.ts.map
|