@autohq/cli 0.1.396 → 0.1.398
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/dist/agent-bridge.js +135 -36
- package/dist/index.js +144 -44
- package/package.json +1 -1
package/dist/agent-bridge.js
CHANGED
|
@@ -30819,7 +30819,7 @@ Object.assign(lookup, {
|
|
|
30819
30819
|
// package.json
|
|
30820
30820
|
var package_default = {
|
|
30821
30821
|
name: "@autohq/cli",
|
|
30822
|
-
version: "0.1.
|
|
30822
|
+
version: "0.1.398",
|
|
30823
30823
|
license: "SEE LICENSE IN README.md",
|
|
30824
30824
|
publishConfig: {
|
|
30825
30825
|
access: "public"
|
|
@@ -33716,6 +33716,52 @@ var SecretRevealResponseSchema = external_exports.object({
|
|
|
33716
33716
|
value: external_exports.string()
|
|
33717
33717
|
});
|
|
33718
33718
|
|
|
33719
|
+
// ../../packages/schemas/src/session-bindings.ts
|
|
33720
|
+
var BINDING_TARGET_TYPES = [
|
|
33721
|
+
"github.pull_request",
|
|
33722
|
+
"github.issue",
|
|
33723
|
+
"slack.thread",
|
|
33724
|
+
"chat.message",
|
|
33725
|
+
"agent.singleton"
|
|
33726
|
+
];
|
|
33727
|
+
var TRIGGER_BINDING_TARGET_TYPES = [
|
|
33728
|
+
"github.pull_request",
|
|
33729
|
+
"github.issue",
|
|
33730
|
+
"slack.thread",
|
|
33731
|
+
"agent.singleton"
|
|
33732
|
+
];
|
|
33733
|
+
var SESSION_BINDING_SOURCES = [
|
|
33734
|
+
"trigger_spawn",
|
|
33735
|
+
"agent_tool",
|
|
33736
|
+
"chat_send",
|
|
33737
|
+
"system"
|
|
33738
|
+
];
|
|
33739
|
+
var SESSION_BINDING_STATUSES = ["active", "released"];
|
|
33740
|
+
var SESSION_BINDING_RELEASE_POLICIES = ["manual", "held"];
|
|
33741
|
+
var SESSION_BINDING_RELEASED_BY = [
|
|
33742
|
+
"agent_tool",
|
|
33743
|
+
"archive",
|
|
33744
|
+
"trigger_release",
|
|
33745
|
+
"operator",
|
|
33746
|
+
"takeover"
|
|
33747
|
+
];
|
|
33748
|
+
var BindingTargetTypeSchema = external_exports.enum(BINDING_TARGET_TYPES);
|
|
33749
|
+
var TriggerBindingTargetTypeSchema = external_exports.enum(
|
|
33750
|
+
TRIGGER_BINDING_TARGET_TYPES
|
|
33751
|
+
);
|
|
33752
|
+
var SessionBindingSourceSchema = external_exports.enum(SESSION_BINDING_SOURCES);
|
|
33753
|
+
var SessionBindingStatusSchema = external_exports.enum(SESSION_BINDING_STATUSES);
|
|
33754
|
+
var SessionBindingReleasePolicySchema = external_exports.enum(
|
|
33755
|
+
SESSION_BINDING_RELEASE_POLICIES
|
|
33756
|
+
);
|
|
33757
|
+
var SessionBindingReleasedBySchema = external_exports.enum(
|
|
33758
|
+
SESSION_BINDING_RELEASED_BY
|
|
33759
|
+
);
|
|
33760
|
+
var BindingTargetSchema = external_exports.object({
|
|
33761
|
+
type: BindingTargetTypeSchema,
|
|
33762
|
+
externalId: external_exports.string().min(1)
|
|
33763
|
+
});
|
|
33764
|
+
|
|
33719
33765
|
// ../../packages/schemas/src/tools.ts
|
|
33720
33766
|
var REMOTE_MCP_TRANSPORTS = ["streamable_http"];
|
|
33721
33767
|
var LOCAL_TOOL_IMPLEMENTATIONS = ["auto", "chat", "ping"];
|
|
@@ -33887,38 +33933,6 @@ var InlineAgentToolSchema = RemoteMcpToolSchema.extend({
|
|
|
33887
33933
|
var AgentToolRefSchema = InlineAgentToolSchema;
|
|
33888
33934
|
var AgentToolsSchema = external_exports.record(ToolAliasSchema, AgentToolRefSchema);
|
|
33889
33935
|
|
|
33890
|
-
// ../../packages/schemas/src/session-bindings.ts
|
|
33891
|
-
var BINDING_TARGET_TYPES = [
|
|
33892
|
-
"github.pull_request",
|
|
33893
|
-
"github.issue",
|
|
33894
|
-
"slack.thread",
|
|
33895
|
-
"chat.message",
|
|
33896
|
-
"agent.singleton"
|
|
33897
|
-
];
|
|
33898
|
-
var TRIGGER_BINDING_TARGET_TYPES = [
|
|
33899
|
-
"github.pull_request",
|
|
33900
|
-
"github.issue",
|
|
33901
|
-
"slack.thread",
|
|
33902
|
-
"agent.singleton"
|
|
33903
|
-
];
|
|
33904
|
-
var SESSION_BINDING_SOURCES = [
|
|
33905
|
-
"trigger_spawn",
|
|
33906
|
-
"agent_tool",
|
|
33907
|
-
"chat_send",
|
|
33908
|
-
"system"
|
|
33909
|
-
];
|
|
33910
|
-
var SESSION_BINDING_STATUSES = ["active", "released"];
|
|
33911
|
-
var BindingTargetTypeSchema = external_exports.enum(BINDING_TARGET_TYPES);
|
|
33912
|
-
var TriggerBindingTargetTypeSchema = external_exports.enum(
|
|
33913
|
-
TRIGGER_BINDING_TARGET_TYPES
|
|
33914
|
-
);
|
|
33915
|
-
var SessionBindingSourceSchema = external_exports.enum(SESSION_BINDING_SOURCES);
|
|
33916
|
-
var SessionBindingStatusSchema = external_exports.enum(SESSION_BINDING_STATUSES);
|
|
33917
|
-
var BindingTargetSchema = external_exports.object({
|
|
33918
|
-
type: BindingTargetTypeSchema,
|
|
33919
|
-
externalId: external_exports.string().min(1)
|
|
33920
|
-
});
|
|
33921
|
-
|
|
33922
33936
|
// ../../packages/schemas/src/trigger-router.ts
|
|
33923
33937
|
var CANONICAL_ROUTE_BY_KINDS = [
|
|
33924
33938
|
"allLiveSessions",
|
|
@@ -33984,7 +33998,15 @@ var CanonicalTriggerRoutingSchema = external_exports.discriminatedUnion("kind",
|
|
|
33984
33998
|
external_exports.object({
|
|
33985
33999
|
kind: external_exports.literal("bind"),
|
|
33986
34000
|
target: TriggerBindingTargetTypeSchema,
|
|
33987
|
-
onUnmatched: OnUnmatchedSchema
|
|
34001
|
+
onUnmatched: OnUnmatchedSchema,
|
|
34002
|
+
// Declarative binding release: after the router routes this event
|
|
34003
|
+
// (delivered, revived, or unmatched), the platform releases the target's
|
|
34004
|
+
// active binding as a follow-up activity. Deliver-then-release — the bound
|
|
34005
|
+
// session receives the message first; the binding is released after
|
|
34006
|
+
// routing completes. No-op when no active binding exists. `agent.singleton`
|
|
34007
|
+
// is rejected at apply time (singleton slots are pool-membership state
|
|
34008
|
+
// owned by the reconciler).
|
|
34009
|
+
release: external_exports.boolean().default(false)
|
|
33988
34010
|
})
|
|
33989
34011
|
]);
|
|
33990
34012
|
var LegacySingletonRouteBySchema = external_exports.object({
|
|
@@ -34011,7 +34033,8 @@ var LegacyOwnedArtifactDeliverRoutingSchema = external_exports.object({
|
|
|
34011
34033
|
({ routeBy, onUnmatched }) => ({
|
|
34012
34034
|
kind: "bind",
|
|
34013
34035
|
target: routeBy.artifactType,
|
|
34014
|
-
onUnmatched
|
|
34036
|
+
onUnmatched,
|
|
34037
|
+
release: false
|
|
34015
34038
|
})
|
|
34016
34039
|
);
|
|
34017
34040
|
var LegacyDeliverOrSpawnRoutingSchema = external_exports.object({
|
|
@@ -34397,6 +34420,30 @@ var AgentIdentitySchema = external_exports.object({
|
|
|
34397
34420
|
}).strict().refine((identity) => Object.keys(identity).length > 0, {
|
|
34398
34421
|
message: "Identity requires at least one field"
|
|
34399
34422
|
});
|
|
34423
|
+
var BINDING_LIFECYCLE_VALUES = ["manual", "held"];
|
|
34424
|
+
var BindingLifecycleSpecSchema = external_exports.object({
|
|
34425
|
+
lifecycle: external_exports.enum(BINDING_LIFECYCLE_VALUES).default("manual")
|
|
34426
|
+
}).strict();
|
|
34427
|
+
var AgentBindingsSchema = external_exports.record(external_exports.string(), BindingLifecycleSpecSchema).superRefine((bindings, context) => {
|
|
34428
|
+
for (const key of Object.keys(bindings)) {
|
|
34429
|
+
const parsed = BindingTargetTypeSchema.safeParse(key);
|
|
34430
|
+
if (!parsed.success) {
|
|
34431
|
+
context.addIssue({
|
|
34432
|
+
code: external_exports.ZodIssueCode.custom,
|
|
34433
|
+
path: [key],
|
|
34434
|
+
message: `\`${key}\` is not a valid binding target type`
|
|
34435
|
+
});
|
|
34436
|
+
continue;
|
|
34437
|
+
}
|
|
34438
|
+
if (parsed.data === "agent.singleton") {
|
|
34439
|
+
context.addIssue({
|
|
34440
|
+
code: external_exports.ZodIssueCode.custom,
|
|
34441
|
+
path: [key],
|
|
34442
|
+
message: "`agent.singleton` is excluded from `bindings` constraints; the pool slot has its own release lifecycle"
|
|
34443
|
+
});
|
|
34444
|
+
}
|
|
34445
|
+
}
|
|
34446
|
+
});
|
|
34400
34447
|
var AgentSpecFieldsSchema = external_exports.object({
|
|
34401
34448
|
harness: external_exports.enum(AGENT_HARNESSES).optional(),
|
|
34402
34449
|
model: AgentModelSelectionSchema.optional(),
|
|
@@ -34414,6 +34461,7 @@ var AgentSpecFieldsSchema = external_exports.object({
|
|
|
34414
34461
|
replace: AgentReplacePolicySchema.optional(),
|
|
34415
34462
|
onReplace: external_exports.string().trim().min(1).max(2e4).optional(),
|
|
34416
34463
|
manages: AgentManagesSchema.optional(),
|
|
34464
|
+
bindings: AgentBindingsSchema.default({}),
|
|
34417
34465
|
workingDirectory: external_exports.string().trim().min(1).optional(),
|
|
34418
34466
|
tools: AgentToolsSchema.default({})
|
|
34419
34467
|
});
|
|
@@ -34447,6 +34495,8 @@ var AgentApplySpecSchema = AgentSpecFieldsSchema.extend({
|
|
|
34447
34495
|
validateRunnableConfig(spec, context);
|
|
34448
34496
|
validateAgentModelFieldsForHarness(spec, context);
|
|
34449
34497
|
validateConcurrencyConfig(spec, context);
|
|
34498
|
+
validateBindingsConfig(spec, context);
|
|
34499
|
+
validateTriggerReleaseConfig(spec, context);
|
|
34450
34500
|
});
|
|
34451
34501
|
function validateConcurrencyConfig(spec, context) {
|
|
34452
34502
|
if (spec.concurrency === void 0 && spec.replace !== void 0) {
|
|
@@ -34485,6 +34535,49 @@ function validateConcurrencyConfig(spec, context) {
|
|
|
34485
34535
|
function isSlotDeliveryTrigger(trigger) {
|
|
34486
34536
|
return trigger.routing.kind === "deliver" && !trigger.routing.routeBy;
|
|
34487
34537
|
}
|
|
34538
|
+
function validateBindingsConfig(spec, context) {
|
|
34539
|
+
if (!spec.bindings) {
|
|
34540
|
+
return;
|
|
34541
|
+
}
|
|
34542
|
+
const heldTargets = new Set(
|
|
34543
|
+
Object.entries(spec.bindings).filter(([, config2]) => config2.lifecycle === "held").map(([target]) => target)
|
|
34544
|
+
);
|
|
34545
|
+
if (heldTargets.size === 0) {
|
|
34546
|
+
return;
|
|
34547
|
+
}
|
|
34548
|
+
const releaseTargets = /* @__PURE__ */ new Set();
|
|
34549
|
+
for (const trigger of spec.triggers) {
|
|
34550
|
+
if (trigger.routing.kind !== "bind") {
|
|
34551
|
+
continue;
|
|
34552
|
+
}
|
|
34553
|
+
if (trigger.routing.release) {
|
|
34554
|
+
releaseTargets.add(trigger.routing.target);
|
|
34555
|
+
}
|
|
34556
|
+
}
|
|
34557
|
+
for (const target of heldTargets) {
|
|
34558
|
+
if (!releaseTargets.has(target)) {
|
|
34559
|
+
context.addIssue({
|
|
34560
|
+
code: external_exports.ZodIssueCode.custom,
|
|
34561
|
+
path: ["bindings", target, "lifecycle"],
|
|
34562
|
+
message: `\`lifecycle: held\` requires at least one bind-routed trigger on "${target}" with \`release: true\` so the platform can release it`
|
|
34563
|
+
});
|
|
34564
|
+
}
|
|
34565
|
+
}
|
|
34566
|
+
}
|
|
34567
|
+
function validateTriggerReleaseConfig(spec, context) {
|
|
34568
|
+
for (const [index, trigger] of spec.triggers.entries()) {
|
|
34569
|
+
if (trigger.routing.kind !== "bind") {
|
|
34570
|
+
continue;
|
|
34571
|
+
}
|
|
34572
|
+
if (trigger.routing.release && trigger.routing.target === "agent.singleton") {
|
|
34573
|
+
context.addIssue({
|
|
34574
|
+
code: external_exports.ZodIssueCode.custom,
|
|
34575
|
+
path: ["triggers", index, "routing", "release"],
|
|
34576
|
+
message: "`release: true` cannot target `agent.singleton`: singleton slots are pool-membership state owned by the reconciler, not trigger-releasable bindings"
|
|
34577
|
+
});
|
|
34578
|
+
}
|
|
34579
|
+
}
|
|
34580
|
+
}
|
|
34488
34581
|
var AgentStatusSchema = external_exports.object({
|
|
34489
34582
|
runCount: external_exports.number().int().nonnegative().default(0),
|
|
34490
34583
|
lastActivityAt: external_exports.string().datetime().nullable().default(null)
|
|
@@ -36215,6 +36308,8 @@ var RunBindingRecordSchema = external_exports.object({
|
|
|
36215
36308
|
externalId: external_exports.string(),
|
|
36216
36309
|
source: SessionBindingSourceSchema,
|
|
36217
36310
|
status: SessionBindingStatusSchema,
|
|
36311
|
+
releasePolicy: SessionBindingReleasePolicySchema,
|
|
36312
|
+
releasedBy: SessionBindingReleasedBySchema.nullable(),
|
|
36218
36313
|
payload: JsonValueSchema2.nullable(),
|
|
36219
36314
|
createdAt: external_exports.string().datetime(),
|
|
36220
36315
|
updatedAt: external_exports.string().datetime()
|
|
@@ -36434,7 +36529,11 @@ var SetupOnboardingPullRequestCreateRequestSchema = external_exports.object({
|
|
|
36434
36529
|
roster: external_exports.object({
|
|
36435
36530
|
agents: external_exports.array(external_exports.string().trim().min(1)),
|
|
36436
36531
|
customBrief: external_exports.string().trim().min(1).max(500).nullable().default(null)
|
|
36437
|
-
}).optional()
|
|
36532
|
+
}).optional(),
|
|
36533
|
+
// When false the PR omits the onboarding concierge agent and its avatar,
|
|
36534
|
+
// installing only the roster picks. Used by the agents-page catalog surface
|
|
36535
|
+
// (post-onboarding); the onboarding welcome flow leaves this unset (true).
|
|
36536
|
+
concierge: external_exports.boolean().optional()
|
|
36438
36537
|
});
|
|
36439
36538
|
var SetupOnboardingPullRequestSchema = external_exports.object({
|
|
36440
36539
|
number: external_exports.number().int().positive(),
|
package/dist/index.js
CHANGED
|
@@ -17823,6 +17823,59 @@ var init_secrets = __esm({
|
|
|
17823
17823
|
}
|
|
17824
17824
|
});
|
|
17825
17825
|
|
|
17826
|
+
// ../../packages/schemas/src/session-bindings.ts
|
|
17827
|
+
var BINDING_TARGET_TYPES, TRIGGER_BINDING_TARGET_TYPES, SESSION_BINDING_SOURCES, SESSION_BINDING_STATUSES, SESSION_BINDING_RELEASE_POLICIES, SESSION_BINDING_RELEASED_BY, BindingTargetTypeSchema, TriggerBindingTargetTypeSchema, SessionBindingSourceSchema, SessionBindingStatusSchema, SessionBindingReleasePolicySchema, SessionBindingReleasedBySchema, BindingTargetSchema;
|
|
17828
|
+
var init_session_bindings = __esm({
|
|
17829
|
+
"../../packages/schemas/src/session-bindings.ts"() {
|
|
17830
|
+
"use strict";
|
|
17831
|
+
init_zod();
|
|
17832
|
+
BINDING_TARGET_TYPES = [
|
|
17833
|
+
"github.pull_request",
|
|
17834
|
+
"github.issue",
|
|
17835
|
+
"slack.thread",
|
|
17836
|
+
"chat.message",
|
|
17837
|
+
"agent.singleton"
|
|
17838
|
+
];
|
|
17839
|
+
TRIGGER_BINDING_TARGET_TYPES = [
|
|
17840
|
+
"github.pull_request",
|
|
17841
|
+
"github.issue",
|
|
17842
|
+
"slack.thread",
|
|
17843
|
+
"agent.singleton"
|
|
17844
|
+
];
|
|
17845
|
+
SESSION_BINDING_SOURCES = [
|
|
17846
|
+
"trigger_spawn",
|
|
17847
|
+
"agent_tool",
|
|
17848
|
+
"chat_send",
|
|
17849
|
+
"system"
|
|
17850
|
+
];
|
|
17851
|
+
SESSION_BINDING_STATUSES = ["active", "released"];
|
|
17852
|
+
SESSION_BINDING_RELEASE_POLICIES = ["manual", "held"];
|
|
17853
|
+
SESSION_BINDING_RELEASED_BY = [
|
|
17854
|
+
"agent_tool",
|
|
17855
|
+
"archive",
|
|
17856
|
+
"trigger_release",
|
|
17857
|
+
"operator",
|
|
17858
|
+
"takeover"
|
|
17859
|
+
];
|
|
17860
|
+
BindingTargetTypeSchema = external_exports.enum(BINDING_TARGET_TYPES);
|
|
17861
|
+
TriggerBindingTargetTypeSchema = external_exports.enum(
|
|
17862
|
+
TRIGGER_BINDING_TARGET_TYPES
|
|
17863
|
+
);
|
|
17864
|
+
SessionBindingSourceSchema = external_exports.enum(SESSION_BINDING_SOURCES);
|
|
17865
|
+
SessionBindingStatusSchema = external_exports.enum(SESSION_BINDING_STATUSES);
|
|
17866
|
+
SessionBindingReleasePolicySchema = external_exports.enum(
|
|
17867
|
+
SESSION_BINDING_RELEASE_POLICIES
|
|
17868
|
+
);
|
|
17869
|
+
SessionBindingReleasedBySchema = external_exports.enum(
|
|
17870
|
+
SESSION_BINDING_RELEASED_BY
|
|
17871
|
+
);
|
|
17872
|
+
BindingTargetSchema = external_exports.object({
|
|
17873
|
+
type: BindingTargetTypeSchema,
|
|
17874
|
+
externalId: external_exports.string().min(1)
|
|
17875
|
+
});
|
|
17876
|
+
}
|
|
17877
|
+
});
|
|
17878
|
+
|
|
17826
17879
|
// ../../packages/schemas/src/tools.ts
|
|
17827
17880
|
function remoteMcpUrlSchema(input) {
|
|
17828
17881
|
return external_exports.string().trim().url().refine(
|
|
@@ -18005,45 +18058,6 @@ var init_tools = __esm({
|
|
|
18005
18058
|
}
|
|
18006
18059
|
});
|
|
18007
18060
|
|
|
18008
|
-
// ../../packages/schemas/src/session-bindings.ts
|
|
18009
|
-
var BINDING_TARGET_TYPES, TRIGGER_BINDING_TARGET_TYPES, SESSION_BINDING_SOURCES, SESSION_BINDING_STATUSES, BindingTargetTypeSchema, TriggerBindingTargetTypeSchema, SessionBindingSourceSchema, SessionBindingStatusSchema, BindingTargetSchema;
|
|
18010
|
-
var init_session_bindings = __esm({
|
|
18011
|
-
"../../packages/schemas/src/session-bindings.ts"() {
|
|
18012
|
-
"use strict";
|
|
18013
|
-
init_zod();
|
|
18014
|
-
BINDING_TARGET_TYPES = [
|
|
18015
|
-
"github.pull_request",
|
|
18016
|
-
"github.issue",
|
|
18017
|
-
"slack.thread",
|
|
18018
|
-
"chat.message",
|
|
18019
|
-
"agent.singleton"
|
|
18020
|
-
];
|
|
18021
|
-
TRIGGER_BINDING_TARGET_TYPES = [
|
|
18022
|
-
"github.pull_request",
|
|
18023
|
-
"github.issue",
|
|
18024
|
-
"slack.thread",
|
|
18025
|
-
"agent.singleton"
|
|
18026
|
-
];
|
|
18027
|
-
SESSION_BINDING_SOURCES = [
|
|
18028
|
-
"trigger_spawn",
|
|
18029
|
-
"agent_tool",
|
|
18030
|
-
"chat_send",
|
|
18031
|
-
"system"
|
|
18032
|
-
];
|
|
18033
|
-
SESSION_BINDING_STATUSES = ["active", "released"];
|
|
18034
|
-
BindingTargetTypeSchema = external_exports.enum(BINDING_TARGET_TYPES);
|
|
18035
|
-
TriggerBindingTargetTypeSchema = external_exports.enum(
|
|
18036
|
-
TRIGGER_BINDING_TARGET_TYPES
|
|
18037
|
-
);
|
|
18038
|
-
SessionBindingSourceSchema = external_exports.enum(SESSION_BINDING_SOURCES);
|
|
18039
|
-
SessionBindingStatusSchema = external_exports.enum(SESSION_BINDING_STATUSES);
|
|
18040
|
-
BindingTargetSchema = external_exports.object({
|
|
18041
|
-
type: BindingTargetTypeSchema,
|
|
18042
|
-
externalId: external_exports.string().min(1)
|
|
18043
|
-
});
|
|
18044
|
-
}
|
|
18045
|
-
});
|
|
18046
|
-
|
|
18047
18061
|
// ../../packages/schemas/src/trigger-router.ts
|
|
18048
18062
|
function normalizeLegacyHeartbeatTickWorkflowInput(input) {
|
|
18049
18063
|
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
@@ -18131,7 +18145,15 @@ var init_trigger_router = __esm({
|
|
|
18131
18145
|
external_exports.object({
|
|
18132
18146
|
kind: external_exports.literal("bind"),
|
|
18133
18147
|
target: TriggerBindingTargetTypeSchema,
|
|
18134
|
-
onUnmatched: OnUnmatchedSchema
|
|
18148
|
+
onUnmatched: OnUnmatchedSchema,
|
|
18149
|
+
// Declarative binding release: after the router routes this event
|
|
18150
|
+
// (delivered, revived, or unmatched), the platform releases the target's
|
|
18151
|
+
// active binding as a follow-up activity. Deliver-then-release — the bound
|
|
18152
|
+
// session receives the message first; the binding is released after
|
|
18153
|
+
// routing completes. No-op when no active binding exists. `agent.singleton`
|
|
18154
|
+
// is rejected at apply time (singleton slots are pool-membership state
|
|
18155
|
+
// owned by the reconciler).
|
|
18156
|
+
release: external_exports.boolean().default(false)
|
|
18135
18157
|
})
|
|
18136
18158
|
]);
|
|
18137
18159
|
LegacySingletonRouteBySchema = external_exports.object({
|
|
@@ -18158,7 +18180,8 @@ var init_trigger_router = __esm({
|
|
|
18158
18180
|
({ routeBy, onUnmatched }) => ({
|
|
18159
18181
|
kind: "bind",
|
|
18160
18182
|
target: routeBy.artifactType,
|
|
18161
|
-
onUnmatched
|
|
18183
|
+
onUnmatched,
|
|
18184
|
+
release: false
|
|
18162
18185
|
})
|
|
18163
18186
|
);
|
|
18164
18187
|
LegacyDeliverOrSpawnRoutingSchema = external_exports.object({
|
|
@@ -18480,6 +18503,49 @@ function validateConcurrencyConfig(spec, context) {
|
|
|
18480
18503
|
function isSlotDeliveryTrigger(trigger) {
|
|
18481
18504
|
return trigger.routing.kind === "deliver" && !trigger.routing.routeBy;
|
|
18482
18505
|
}
|
|
18506
|
+
function validateBindingsConfig(spec, context) {
|
|
18507
|
+
if (!spec.bindings) {
|
|
18508
|
+
return;
|
|
18509
|
+
}
|
|
18510
|
+
const heldTargets = new Set(
|
|
18511
|
+
Object.entries(spec.bindings).filter(([, config2]) => config2.lifecycle === "held").map(([target]) => target)
|
|
18512
|
+
);
|
|
18513
|
+
if (heldTargets.size === 0) {
|
|
18514
|
+
return;
|
|
18515
|
+
}
|
|
18516
|
+
const releaseTargets = /* @__PURE__ */ new Set();
|
|
18517
|
+
for (const trigger of spec.triggers) {
|
|
18518
|
+
if (trigger.routing.kind !== "bind") {
|
|
18519
|
+
continue;
|
|
18520
|
+
}
|
|
18521
|
+
if (trigger.routing.release) {
|
|
18522
|
+
releaseTargets.add(trigger.routing.target);
|
|
18523
|
+
}
|
|
18524
|
+
}
|
|
18525
|
+
for (const target of heldTargets) {
|
|
18526
|
+
if (!releaseTargets.has(target)) {
|
|
18527
|
+
context.addIssue({
|
|
18528
|
+
code: external_exports.ZodIssueCode.custom,
|
|
18529
|
+
path: ["bindings", target, "lifecycle"],
|
|
18530
|
+
message: `\`lifecycle: held\` requires at least one bind-routed trigger on "${target}" with \`release: true\` so the platform can release it`
|
|
18531
|
+
});
|
|
18532
|
+
}
|
|
18533
|
+
}
|
|
18534
|
+
}
|
|
18535
|
+
function validateTriggerReleaseConfig(spec, context) {
|
|
18536
|
+
for (const [index, trigger] of spec.triggers.entries()) {
|
|
18537
|
+
if (trigger.routing.kind !== "bind") {
|
|
18538
|
+
continue;
|
|
18539
|
+
}
|
|
18540
|
+
if (trigger.routing.release && trigger.routing.target === "agent.singleton") {
|
|
18541
|
+
context.addIssue({
|
|
18542
|
+
code: external_exports.ZodIssueCode.custom,
|
|
18543
|
+
path: ["triggers", index, "routing", "release"],
|
|
18544
|
+
message: "`release: true` cannot target `agent.singleton`: singleton slots are pool-membership state owned by the reconciler, not trigger-releasable bindings"
|
|
18545
|
+
});
|
|
18546
|
+
}
|
|
18547
|
+
}
|
|
18548
|
+
}
|
|
18483
18549
|
function validateTriggerChecks(trigger, context, eventKeys) {
|
|
18484
18550
|
const checks = trigger.checks ?? [];
|
|
18485
18551
|
if (checks.length === 0) {
|
|
@@ -18603,7 +18669,7 @@ function isChatMessageEvent(trigger) {
|
|
|
18603
18669
|
function hasFilterValue(trigger, path2, expected) {
|
|
18604
18670
|
return trigger.where?.[path2] === expected;
|
|
18605
18671
|
}
|
|
18606
|
-
var RESOURCE_KIND_AGENT, AGENT_HARNESSES, AgentHarnessSchema, TriggerFilterScalarSchema, TriggerFilterPathSchema, TriggerFilterClauseSchema, TriggerFilterSchema, TriggerCheckTimeoutSchema, AgentArchiveAfterInactiveSchema, AgentSessionPolicySchema, AgentConcurrencySchema, AgentReplacePolicySchema, AgentManagesSchema, TriggerEventSchema, TriggerEventsSchema, PAYLOAD_PREFIXED_TEMPLATE_TOKEN, TriggerChecksField, TriggerEventSourceFields, TriggerSchema, ApplyTriggerSchema, HeartbeatTriggerSchema, ApplyHeartbeatTriggerSchema, TriggerDefinitionSchema, ApplyTriggerDefinitionSchema, TriggersSchema, ApplyTriggersSchema, AVATAR_ASSET_EXTENSIONS, MAX_AVATAR_ASSET_BYTES, MIN_AVATAR_ASSET_DIMENSION_PX, MAX_AVATAR_ASSET_DIMENSION_PX, PNG_SIGNATURE, AGENT_IDENTITY_DESCRIPTION_MAX_LENGTH, SHA256_HEX_PATTERN, AgentIdentitySchema, AgentSpecFieldsSchema, AgentSpecSchema, AgentApplySpecSchema, AgentStatusSchema, AgentResourceSchema, AgentApplyRequestSchema, ApplyTriggerReceiptSchema, AgentApplyResponseSchema, AGENT_TELEGRAM_IDENTITY_STATUSES, AgentTelegramIdentityStatusSchema, AgentPresenceIdentitySchema, AgentPresenceResponseSchema, AgentPresenceConnectRequestSchema, AgentPresenceConnectPendingSchema, AgentPresenceConnectResponseSchema, AgentPresenceIconRequestSchema, AgentPresenceIconResponseSchema, AgentPresenceCompleteResponseSchema;
|
|
18672
|
+
var RESOURCE_KIND_AGENT, AGENT_HARNESSES, AgentHarnessSchema, TriggerFilterScalarSchema, TriggerFilterPathSchema, TriggerFilterClauseSchema, TriggerFilterSchema, TriggerCheckTimeoutSchema, AgentArchiveAfterInactiveSchema, AgentSessionPolicySchema, AgentConcurrencySchema, AgentReplacePolicySchema, AgentManagesSchema, TriggerEventSchema, TriggerEventsSchema, PAYLOAD_PREFIXED_TEMPLATE_TOKEN, TriggerChecksField, TriggerEventSourceFields, TriggerSchema, ApplyTriggerSchema, HeartbeatTriggerSchema, ApplyHeartbeatTriggerSchema, TriggerDefinitionSchema, ApplyTriggerDefinitionSchema, TriggersSchema, ApplyTriggersSchema, AVATAR_ASSET_EXTENSIONS, MAX_AVATAR_ASSET_BYTES, MIN_AVATAR_ASSET_DIMENSION_PX, MAX_AVATAR_ASSET_DIMENSION_PX, PNG_SIGNATURE, AGENT_IDENTITY_DESCRIPTION_MAX_LENGTH, SHA256_HEX_PATTERN, AgentIdentitySchema, BINDING_LIFECYCLE_VALUES, BindingLifecycleSpecSchema, AgentBindingsSchema, AgentSpecFieldsSchema, AgentSpecSchema, AgentApplySpecSchema, AgentStatusSchema, AgentResourceSchema, AgentApplyRequestSchema, ApplyTriggerReceiptSchema, AgentApplyResponseSchema, AGENT_TELEGRAM_IDENTITY_STATUSES, AgentTelegramIdentityStatusSchema, AgentPresenceIdentitySchema, AgentPresenceResponseSchema, AgentPresenceConnectRequestSchema, AgentPresenceConnectPendingSchema, AgentPresenceConnectResponseSchema, AgentPresenceIconRequestSchema, AgentPresenceIconResponseSchema, AgentPresenceCompleteResponseSchema;
|
|
18607
18673
|
var init_agents = __esm({
|
|
18608
18674
|
"../../packages/schemas/src/agents.ts"() {
|
|
18609
18675
|
"use strict";
|
|
@@ -18614,6 +18680,7 @@ var init_agents = __esm({
|
|
|
18614
18680
|
init_primitives();
|
|
18615
18681
|
init_resources();
|
|
18616
18682
|
init_secrets();
|
|
18683
|
+
init_session_bindings();
|
|
18617
18684
|
init_tools();
|
|
18618
18685
|
init_trigger_router();
|
|
18619
18686
|
RESOURCE_KIND_AGENT = "agent";
|
|
@@ -18778,6 +18845,30 @@ var init_agents = __esm({
|
|
|
18778
18845
|
}).strict().refine((identity2) => Object.keys(identity2).length > 0, {
|
|
18779
18846
|
message: "Identity requires at least one field"
|
|
18780
18847
|
});
|
|
18848
|
+
BINDING_LIFECYCLE_VALUES = ["manual", "held"];
|
|
18849
|
+
BindingLifecycleSpecSchema = external_exports.object({
|
|
18850
|
+
lifecycle: external_exports.enum(BINDING_LIFECYCLE_VALUES).default("manual")
|
|
18851
|
+
}).strict();
|
|
18852
|
+
AgentBindingsSchema = external_exports.record(external_exports.string(), BindingLifecycleSpecSchema).superRefine((bindings, context) => {
|
|
18853
|
+
for (const key of Object.keys(bindings)) {
|
|
18854
|
+
const parsed = BindingTargetTypeSchema.safeParse(key);
|
|
18855
|
+
if (!parsed.success) {
|
|
18856
|
+
context.addIssue({
|
|
18857
|
+
code: external_exports.ZodIssueCode.custom,
|
|
18858
|
+
path: [key],
|
|
18859
|
+
message: `\`${key}\` is not a valid binding target type`
|
|
18860
|
+
});
|
|
18861
|
+
continue;
|
|
18862
|
+
}
|
|
18863
|
+
if (parsed.data === "agent.singleton") {
|
|
18864
|
+
context.addIssue({
|
|
18865
|
+
code: external_exports.ZodIssueCode.custom,
|
|
18866
|
+
path: [key],
|
|
18867
|
+
message: "`agent.singleton` is excluded from `bindings` constraints; the pool slot has its own release lifecycle"
|
|
18868
|
+
});
|
|
18869
|
+
}
|
|
18870
|
+
}
|
|
18871
|
+
});
|
|
18781
18872
|
AgentSpecFieldsSchema = external_exports.object({
|
|
18782
18873
|
harness: external_exports.enum(AGENT_HARNESSES).optional(),
|
|
18783
18874
|
model: AgentModelSelectionSchema.optional(),
|
|
@@ -18795,6 +18886,7 @@ var init_agents = __esm({
|
|
|
18795
18886
|
replace: AgentReplacePolicySchema.optional(),
|
|
18796
18887
|
onReplace: external_exports.string().trim().min(1).max(2e4).optional(),
|
|
18797
18888
|
manages: AgentManagesSchema.optional(),
|
|
18889
|
+
bindings: AgentBindingsSchema.default({}),
|
|
18798
18890
|
workingDirectory: external_exports.string().trim().min(1).optional(),
|
|
18799
18891
|
tools: AgentToolsSchema.default({})
|
|
18800
18892
|
});
|
|
@@ -18812,6 +18904,8 @@ var init_agents = __esm({
|
|
|
18812
18904
|
validateRunnableConfig(spec, context);
|
|
18813
18905
|
validateAgentModelFieldsForHarness(spec, context);
|
|
18814
18906
|
validateConcurrencyConfig(spec, context);
|
|
18907
|
+
validateBindingsConfig(spec, context);
|
|
18908
|
+
validateTriggerReleaseConfig(spec, context);
|
|
18815
18909
|
});
|
|
18816
18910
|
AgentStatusSchema = external_exports.object({
|
|
18817
18911
|
runCount: external_exports.number().int().nonnegative().default(0),
|
|
@@ -20612,6 +20706,8 @@ var init_session_introspection = __esm({
|
|
|
20612
20706
|
externalId: external_exports.string(),
|
|
20613
20707
|
source: SessionBindingSourceSchema,
|
|
20614
20708
|
status: SessionBindingStatusSchema,
|
|
20709
|
+
releasePolicy: SessionBindingReleasePolicySchema,
|
|
20710
|
+
releasedBy: SessionBindingReleasedBySchema.nullable(),
|
|
20615
20711
|
payload: JsonValueSchema.nullable(),
|
|
20616
20712
|
createdAt: external_exports.string().datetime(),
|
|
20617
20713
|
updatedAt: external_exports.string().datetime()
|
|
@@ -20856,7 +20952,11 @@ var init_setup = __esm({
|
|
|
20856
20952
|
roster: external_exports.object({
|
|
20857
20953
|
agents: external_exports.array(external_exports.string().trim().min(1)),
|
|
20858
20954
|
customBrief: external_exports.string().trim().min(1).max(500).nullable().default(null)
|
|
20859
|
-
}).optional()
|
|
20955
|
+
}).optional(),
|
|
20956
|
+
// When false the PR omits the onboarding concierge agent and its avatar,
|
|
20957
|
+
// installing only the roster picks. Used by the agents-page catalog surface
|
|
20958
|
+
// (post-onboarding); the onboarding welcome flow leaves this unset (true).
|
|
20959
|
+
concierge: external_exports.boolean().optional()
|
|
20860
20960
|
});
|
|
20861
20961
|
SetupOnboardingPullRequestSchema = external_exports.object({
|
|
20862
20962
|
number: external_exports.number().int().positive(),
|
|
@@ -34861,7 +34961,7 @@ var init_package = __esm({
|
|
|
34861
34961
|
"package.json"() {
|
|
34862
34962
|
package_default = {
|
|
34863
34963
|
name: "@autohq/cli",
|
|
34864
|
-
version: "0.1.
|
|
34964
|
+
version: "0.1.398",
|
|
34865
34965
|
license: "SEE LICENSE IN README.md",
|
|
34866
34966
|
publishConfig: {
|
|
34867
34967
|
access: "public"
|