@dam-agents/cli 0.2.5-rc1 → 0.2.6-rc1

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 (2) hide show
  1. package/dist/bin.js +809 -815
  2. package/package.json +3 -3
package/dist/bin.js CHANGED
@@ -25469,6 +25469,107 @@ var envVarSchema = external_exports.object({
25469
25469
  value: external_exports.string().max(1e4)
25470
25470
  });
25471
25471
 
25472
+ // ../api-server-api/src/modules/skills/schemas.ts
25473
+ var skillSourcePathSchema = external_exports.string().transform((p2) => p2.trim().replace(/^\/+|\/+$/g, "")).refine((p2) => !p2.split("/").includes(".."), "path must not contain '..'");
25474
+ var skillSourceSchema = external_exports.object({
25475
+ id: external_exports.string(),
25476
+ name: external_exports.string(),
25477
+ gitUrl: external_exports.string(),
25478
+ path: external_exports.string().optional(),
25479
+ /** True when the source is managed by the cluster admin
25480
+ * (Helm-seeded). Users can't delete it. */
25481
+ system: external_exports.boolean().optional(),
25482
+ /** Present when the source was declared by an agent template
25483
+ * (spec.skillSources). UI-only hint for the "Agent" badge —
25484
+ * backend treats template sources as read-only. */
25485
+ fromTemplate: external_exports.object({ templateId: external_exports.string(), templateName: external_exports.string() }).optional(),
25486
+ canPublish: external_exports.boolean().optional()
25487
+ });
25488
+ var skillPublishResultSchema = external_exports.object({
25489
+ prUrl: external_exports.string().url(),
25490
+ branch: external_exports.string()
25491
+ });
25492
+ var skillSchema = external_exports.object({
25493
+ source: external_exports.string(),
25494
+ name: external_exports.string(),
25495
+ description: external_exports.string(),
25496
+ version: external_exports.string(),
25497
+ contentHash: external_exports.string()
25498
+ });
25499
+ var skillRefSchema = external_exports.object({
25500
+ source: external_exports.string(),
25501
+ name: external_exports.string(),
25502
+ version: external_exports.string(),
25503
+ /** Deterministic SHA-256 of the skill directory's file contents at
25504
+ * install time. Compared to the scanner's contentHash to flag drift.
25505
+ * Optional for backward compatibility with installs that pre-date
25506
+ * this field. */
25507
+ contentHash: external_exports.string().optional(),
25508
+ /** Source subdir the skill was installed from, denormalized so the apply
25509
+ * path resolves the skill dir without re-reading the source. */
25510
+ path: external_exports.string().optional()
25511
+ });
25512
+ var localSkillSchema = external_exports.object({
25513
+ name: external_exports.string(),
25514
+ description: external_exports.string(),
25515
+ skillPath: external_exports.string()
25516
+ });
25517
+ var skillPublishRecordSchema = external_exports.object({
25518
+ skillName: external_exports.string(),
25519
+ sourceId: external_exports.string(),
25520
+ sourceName: external_exports.string(),
25521
+ sourceGitUrl: external_exports.string(),
25522
+ prUrl: external_exports.string(),
25523
+ /** ISO 8601 timestamp. */
25524
+ publishedAt: external_exports.string()
25525
+ });
25526
+ var skillStateOutputSchema = external_exports.object({
25527
+ installed: external_exports.array(skillRefSchema),
25528
+ standalone: external_exports.array(localSkillSchema),
25529
+ instancePublishes: external_exports.array(skillPublishRecordSchema)
25530
+ });
25531
+ var skillListSourcesInputSchema = external_exports.object({ agentId: external_exports.string().min(1).optional() }).optional();
25532
+ var skillCreateSourceInputSchema = external_exports.object({
25533
+ name: external_exports.string().min(1).max(128),
25534
+ gitUrl: external_exports.string().url(),
25535
+ path: skillSourcePathSchema.optional()
25536
+ });
25537
+ var skillDeleteSourceInputSchema = external_exports.object({
25538
+ id: external_exports.string().min(1)
25539
+ });
25540
+ var skillRefreshSourceInputSchema = external_exports.object({
25541
+ id: external_exports.string().min(1)
25542
+ });
25543
+ var skillListInputSchema = external_exports.object({
25544
+ sourceId: external_exports.string().min(1),
25545
+ agentId: external_exports.string().min(1).optional()
25546
+ });
25547
+ var skillInstallInputSchema = external_exports.object({
25548
+ agentId: external_exports.string().min(1),
25549
+ source: external_exports.string().url(),
25550
+ name: external_exports.string().min(1),
25551
+ version: external_exports.string().min(1),
25552
+ contentHash: external_exports.string().optional()
25553
+ });
25554
+ var skillUninstallInputSchema = external_exports.object({
25555
+ agentId: external_exports.string().min(1),
25556
+ source: external_exports.string().url(),
25557
+ name: external_exports.string().min(1)
25558
+ });
25559
+ var skillListLocalInputSchema = external_exports.object({
25560
+ agentId: external_exports.string().min(1)
25561
+ });
25562
+ var skillStateInputSchema = external_exports.object({
25563
+ agentId: external_exports.string().min(1)
25564
+ });
25565
+ var skillPublishInputSchema = external_exports.object({
25566
+ agentId: external_exports.string().min(1),
25567
+ sourceId: external_exports.string().min(1),
25568
+ name: external_exports.string().min(1),
25569
+ title: external_exports.string().optional(),
25570
+ body: external_exports.string().optional()
25571
+ });
25572
+
25472
25573
  // ../api-server-api/src/modules/templates/schemas.ts
25473
25574
  var templateGetInputSchema = external_exports.object({
25474
25575
  id: external_exports.string().min(1)
@@ -25488,7 +25589,8 @@ var envVarConfigMapSchema = external_exports.object({
25488
25589
  });
25489
25590
  var skillSourceSeedSchema = external_exports.object({
25490
25591
  name: external_exports.string(),
25491
- gitUrl: external_exports.string()
25592
+ gitUrl: external_exports.string(),
25593
+ path: skillSourcePathSchema.optional()
25492
25594
  });
25493
25595
  var templateCategorySchema = external_exports.enum(["harness", "preconfigured"]).default("harness");
25494
25596
  var templateSpecSchema = external_exports.object({
@@ -25508,6 +25610,8 @@ var templateSpecSchema = external_exports.object({
25508
25610
  // pod can pull the image without the user entering registry credentials.
25509
25611
  imagePullSecretRef: external_exports.string().optional(),
25510
25612
  storageSize: external_exports.string().optional(),
25613
+ runtimeClassName: external_exports.string().optional(),
25614
+ nodeSelector: external_exports.record(external_exports.string(), external_exports.string()).optional(),
25511
25615
  skillSources: external_exports.array(skillSourceSeedSchema).optional()
25512
25616
  }).passthrough();
25513
25617
 
@@ -25525,229 +25629,555 @@ var repoSchema = external_exports.object({
25525
25629
  compatibleTemplates: external_exports.array(external_exports.string()).default([])
25526
25630
  });
25527
25631
 
25528
- // ../api-server-api/src/modules/egress-rules/schemas.ts
25529
- var ruleVerdictSchema = external_exports.enum(["allow", "deny"]);
25530
- var egressPresetSchema = external_exports.enum(["none", "trusted", "all"]);
25531
- var egressRuleListForAgentInputSchema = external_exports.object({
25532
- agentId: external_exports.string().min(1)
25533
- });
25534
- var egressRuleCurrentPresetInputSchema = external_exports.object({
25535
- agentId: external_exports.string().min(1)
25536
- });
25537
- var egressRuleCreateInputSchema = external_exports.object({
25538
- agentId: external_exports.string().min(1),
25539
- host: external_exports.string().min(1),
25540
- method: external_exports.string().min(1).default("*"),
25541
- pathPattern: external_exports.string().min(1).default("*"),
25542
- verdict: ruleVerdictSchema
25543
- });
25544
- var egressRuleUpdateInputSchema = external_exports.object({
25545
- id: external_exports.string().min(1),
25546
- method: external_exports.string().min(1).optional(),
25547
- pathPattern: external_exports.string().min(1).optional(),
25548
- verdict: ruleVerdictSchema.optional()
25549
- });
25550
- var egressRuleRevokeInputSchema = external_exports.object({
25551
- id: external_exports.string().min(1)
25552
- });
25553
- var egressRuleApplyPresetInputSchema = external_exports.object({
25554
- agentId: external_exports.string().min(1),
25555
- preset: egressPresetSchema
25632
+ // ../agent-runtime-api/src/modules/files/schemas.ts
25633
+ var pathSchema = external_exports.string().min(1);
25634
+ var fileListDirsInputSchema = external_exports.object({
25635
+ paths: external_exports.array(external_exports.string()).max(500)
25556
25636
  });
25557
-
25558
- // ../api-server-api/src/modules/agents/schemas.ts
25559
- var idSchema = external_exports.object({ id: external_exports.string().min(1) });
25560
- var agentCreateInputSchema = external_exports.object({
25561
- name: external_exports.string().min(1).refine((n) => !n.startsWith("agent-"), {
25562
- message: "agent name cannot start with 'agent-' (reserved for IDs)"
25563
- }),
25564
- templateId: external_exports.string().optional(),
25565
- image: external_exports.string().optional(),
25566
- description: external_exports.string().optional(),
25567
- env: external_exports.array(envVarSchema).max(64).optional(),
25568
- secretRef: external_exports.string().optional(),
25569
- registryCredential: external_exports.object({
25570
- server: external_exports.string().min(1),
25571
- username: external_exports.string().min(1),
25572
- password: external_exports.string().min(1)
25573
- }).optional(),
25574
- allowedUserEmails: external_exports.array(external_exports.email()).optional(),
25575
- egressPreset: egressPresetSchema.optional(),
25576
- // Optional: clone this public repo (optionally a branch/tag via `ref`) into
25577
- // the work dir once, via a one-shot `workspace-seed` event. Not enforced
25578
- // against the `gitRepos` catalog server-side — the clone runs in the
25579
- // egress-gated agent pod, so this reaches no URL the agent couldn't already
25580
- // reach itself.
25581
- gitRepo: external_exports.object({ url: external_exports.url(), ref: external_exports.string().min(1).optional() }).optional(),
25582
- // Initial grants, settled into the spec at create so credentials ride the
25583
- // first snapshot and the gateway renders its chains once (no readiness flap).
25584
- secretIds: external_exports.array(external_exports.string()).optional(),
25585
- connectionIds: external_exports.array(external_exports.string()).optional()
25586
- }).refine((d2) => d2.templateId !== void 0 || d2.image !== void 0, {
25587
- message: "Either templateId or image is required"
25637
+ var fileReadInputSchema = external_exports.object({ path: pathSchema });
25638
+ var fileWriteInputSchema = external_exports.object({
25639
+ path: pathSchema,
25640
+ content: external_exports.string(),
25641
+ expectedMtimeMs: external_exports.number().optional()
25588
25642
  });
25589
- var agentUpdateInputSchema = external_exports.object({
25590
- id: external_exports.string().min(1),
25591
- name: external_exports.string().min(1).max(255).optional(),
25592
- description: external_exports.string().optional(),
25593
- env: external_exports.array(envVarSchema).max(64).optional(),
25594
- secretRef: external_exports.string().optional(),
25595
- allowedUserEmails: external_exports.array(external_exports.email()).optional()
25643
+ var fileCreateInputSchema = external_exports.object({
25644
+ path: pathSchema,
25645
+ content: external_exports.string()
25596
25646
  });
25597
- var agentConnectSlackInputSchema = external_exports.object({
25598
- id: external_exports.string().min(1),
25599
- slackChannelId: external_exports.string().min(1)
25647
+ var fileMkdirInputSchema = external_exports.object({ path: pathSchema });
25648
+ var fileRenameInputSchema = external_exports.object({
25649
+ from: pathSchema,
25650
+ to: pathSchema,
25651
+ overwrite: external_exports.boolean().optional()
25600
25652
  });
25601
- var agentConnectTelegramInputSchema = external_exports.object({
25602
- id: external_exports.string().min(1),
25603
- botToken: external_exports.string().min(1)
25653
+ var fileRemoveInputSchema = external_exports.object({ path: pathSchema });
25654
+ var fileUploadInputSchema = external_exports.object({
25655
+ path: pathSchema,
25656
+ contentBase64: external_exports.string(),
25657
+ /** Browser-reported MIME (File.type). Carried in the API for observability
25658
+ * and forward-compat; server-side reads still detect MIME from magic
25659
+ * bytes so we don't need to persist this. */
25660
+ contentType: external_exports.string().max(255).optional(),
25661
+ overwrite: external_exports.boolean().optional()
25604
25662
  });
25605
25663
 
25606
- // ../api-server-api/src/modules/schedules/schemas.ts
25607
- var scheduleSessionModeSchema = external_exports.enum(["continuous", "fresh"]);
25608
- var quietWindowSchema = external_exports.object({
25609
- startTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, "HH:MM required"),
25610
- endTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, "HH:MM required"),
25611
- enabled: external_exports.boolean()
25612
- }).refine((w3) => w3.startTime !== w3.endTime, {
25613
- message: "startTime and endTime must differ"
25614
- });
25615
- var scheduleListInputSchema = external_exports.object({
25616
- agentId: external_exports.string().min(1)
25617
- });
25618
- var scheduleGetInputSchema = external_exports.object({
25619
- id: external_exports.string().min(1)
25620
- });
25621
- var scheduleCreateCronInputSchema = external_exports.object({
25664
+ // ../agent-runtime-api/src/modules/skills/schemas.ts
25665
+ var skillInstallInputSchema2 = external_exports.object({
25666
+ sourceUrl: external_exports.string().min(1),
25622
25667
  name: external_exports.string().min(1),
25623
- agentId: external_exports.string().min(1),
25624
- cron: external_exports.string().min(1),
25625
- task: external_exports.string().min(1),
25626
- sessionMode: scheduleSessionModeSchema.optional()
25668
+ version: external_exports.string().min(1),
25669
+ skillPaths: external_exports.array(external_exports.string().min(1)).min(1),
25670
+ path: external_exports.string().optional()
25627
25671
  });
25628
- var scheduleCreateRRuleInputSchema = external_exports.object({
25672
+ var skillUninstallInputSchema2 = external_exports.object({
25629
25673
  name: external_exports.string().min(1),
25630
- agentId: external_exports.string().min(1),
25631
- rrule: external_exports.string().min(1),
25632
- timezone: external_exports.string().min(1),
25633
- quietHours: external_exports.array(quietWindowSchema).optional(),
25634
- task: external_exports.string().min(1),
25635
- sessionMode: scheduleSessionModeSchema.optional()
25674
+ skillPaths: external_exports.array(external_exports.string().min(1)).min(1)
25636
25675
  });
25637
- var scheduleUpdateRRuleInputSchema = external_exports.object({
25638
- id: external_exports.string().min(1),
25676
+ var skillScanInputSchema = external_exports.object({
25677
+ source: external_exports.string().min(1),
25678
+ path: external_exports.string().optional()
25679
+ });
25680
+ var skillPublishInputSchema2 = external_exports.object({
25639
25681
  name: external_exports.string().min(1),
25640
- rrule: external_exports.string().min(1),
25641
- timezone: external_exports.string().min(1),
25642
- quietHours: external_exports.array(quietWindowSchema),
25643
- task: external_exports.string().min(1),
25644
- sessionMode: scheduleSessionModeSchema.optional()
25682
+ owner: external_exports.string().min(1),
25683
+ repo: external_exports.string().min(1),
25684
+ title: external_exports.string().min(1),
25685
+ body: external_exports.string(),
25686
+ // Source subdir the skill is published into; mirrors the scanner so a
25687
+ // subdir source's own scan finds what was published back to it.
25688
+ path: external_exports.string().optional()
25645
25689
  });
25646
- var scheduleDeleteInputSchema = external_exports.object({
25647
- id: external_exports.string().min(1)
25690
+ var skillReadLocalInputSchema = external_exports.object({
25691
+ name: external_exports.string().min(1)
25648
25692
  });
25649
- var scheduleToggleInputSchema = external_exports.object({
25650
- id: external_exports.string().min(1)
25693
+
25694
+ // ../agent-runtime-api/src/modules/ssh/schemas.ts
25695
+ var sshAuthorizeKeyInputSchema = external_exports.object({
25696
+ publicKey: external_exports.string().min(1).max(8192).refine((s) => !/[\r\n]/.test(s), "must be a single line")
25651
25697
  });
25652
- var scheduleResetSessionInputSchema = external_exports.object({
25653
- id: external_exports.string().min(1)
25698
+
25699
+ // ../agent-runtime-api/src/modules/import/types.ts
25700
+ var importBundleResultSchema = external_exports.object({
25701
+ filesWritten: external_exports.number().int().nonnegative(),
25702
+ bytes: external_exports.number().int().nonnegative(),
25703
+ durationMs: external_exports.number().int().nonnegative()
25654
25704
  });
25655
- var quietWindowConfigMapSchema = external_exports.object({
25656
- startTime: external_exports.string(),
25657
- endTime: external_exports.string(),
25658
- enabled: external_exports.boolean()
25705
+
25706
+ // ../agent-runtime-api/src/modules/runtime/types.ts
25707
+ var contributionKind = external_exports.enum([
25708
+ "env",
25709
+ "egress-allow",
25710
+ "egress-inject",
25711
+ "file",
25712
+ "mcp-entry",
25713
+ "skill-ref"
25714
+ ]);
25715
+ var eventKind = external_exports.enum([
25716
+ "trigger",
25717
+ "schedule-reset",
25718
+ "workspace-seed",
25719
+ "experiment-trigger",
25720
+ "harness-config"
25721
+ ]);
25722
+ var mergeMode = external_exports.enum([
25723
+ "overwrite",
25724
+ "section-marker",
25725
+ "key-targeted",
25726
+ "yaml-fill-if-missing"
25727
+ ]);
25728
+ var fileFormat = external_exports.enum(["yaml", "json", "text", "ini", "toml"]);
25729
+ var envContribution = external_exports.object({
25730
+ kind: external_exports.literal("env"),
25731
+ name: external_exports.string().min(1),
25732
+ placeholder: external_exports.string()
25659
25733
  });
25660
- var scheduleCreatorSchema = external_exports.enum(["user", "agent"]);
25661
- var scheduleSpecCronSchema = external_exports.object({
25662
- version: external_exports.string(),
25663
- type: external_exports.literal("cron"),
25664
- cron: external_exports.string(),
25665
- task: external_exports.string().optional(),
25666
- enabled: external_exports.boolean(),
25667
- sessionMode: scheduleSessionModeSchema.optional(),
25668
- createdBy: scheduleCreatorSchema
25669
- }).passthrough();
25670
- var scheduleSpecRRuleSchema = external_exports.object({
25671
- version: external_exports.string(),
25672
- type: external_exports.literal("rrule"),
25673
- rrule: external_exports.string(),
25674
- timezone: external_exports.string(),
25675
- quietHours: external_exports.array(quietWindowConfigMapSchema).optional(),
25676
- task: external_exports.string().optional(),
25677
- enabled: external_exports.boolean(),
25678
- sessionMode: scheduleSessionModeSchema.optional(),
25679
- createdBy: scheduleCreatorSchema
25680
- }).passthrough();
25681
- var scheduleSpecSchema = external_exports.discriminatedUnion("type", [
25682
- scheduleSpecCronSchema,
25683
- scheduleSpecRRuleSchema
25734
+ var egressAllowContribution = external_exports.object({
25735
+ kind: external_exports.literal("egress-allow"),
25736
+ host: external_exports.string().min(1),
25737
+ pathPattern: external_exports.string().optional()
25738
+ });
25739
+ var egressInjectContribution = external_exports.object({
25740
+ kind: external_exports.literal("egress-inject"),
25741
+ host: external_exports.string().min(1),
25742
+ pathPattern: external_exports.string().optional(),
25743
+ headerName: external_exports.string().min(1),
25744
+ valueFormat: external_exports.string().min(1),
25745
+ encoding: external_exports.literal("basic-x-access-token").optional(),
25746
+ // Moves the value into this query param instead of the header; restricted to unreserved chars since the Lua treats it as a trusted literal.
25747
+ queryParamName: external_exports.string().regex(/^[A-Za-z0-9_.~-]+$/).optional(),
25748
+ // Terminate this host's gateway chain as HTTP/2 so injection lands on a gRPC
25749
+ // stream (e.g. Modal's x-modal-token-* metadata). Flows to the injection-hosts
25750
+ // annotation the controller reads. Omit for HTTP/1.1 REST hosts.
25751
+ http2: external_exports.boolean().optional()
25752
+ });
25753
+ var fileContribution = external_exports.object({
25754
+ kind: external_exports.literal("file"),
25755
+ path: external_exports.string().min(1),
25756
+ format: fileFormat,
25757
+ mergeMode,
25758
+ content: external_exports.unknown().optional()
25759
+ });
25760
+ var mcpEntryContribution = external_exports.object({
25761
+ kind: external_exports.literal("mcp-entry"),
25762
+ name: external_exports.string().min(1),
25763
+ url: external_exports.string().url(),
25764
+ headers: external_exports.record(external_exports.string(), external_exports.string()).optional()
25765
+ });
25766
+ var skillRefContribution = external_exports.object({
25767
+ kind: external_exports.literal("skill-ref"),
25768
+ sourceUrl: external_exports.string().min(1),
25769
+ name: external_exports.string().min(1),
25770
+ version: external_exports.string().min(1),
25771
+ path: external_exports.string().optional()
25772
+ });
25773
+ var contribution = external_exports.discriminatedUnion("kind", [
25774
+ envContribution,
25775
+ egressAllowContribution,
25776
+ egressInjectContribution,
25777
+ fileContribution,
25778
+ mcpEntryContribution,
25779
+ skillRefContribution
25684
25780
  ]);
25685
- var scheduleStatusSchema = external_exports.object({
25686
- lastRun: external_exports.string().optional(),
25687
- nextRun: external_exports.string().optional(),
25688
- lastResult: external_exports.string().optional()
25781
+ var triggerEventPayload = external_exports.object({
25782
+ scheduleId: external_exports.string().min(1),
25783
+ task: external_exports.string().min(1),
25784
+ sessionMode: external_exports.enum(["continuous", "fresh"]).optional(),
25785
+ mcpServers: external_exports.array(external_exports.unknown()).optional()
25689
25786
  });
25690
-
25691
- // ../../node_modules/.pnpm/rrule@2.8.1/node_modules/rrule/dist/esm/index.js
25692
- var esm_exports = {};
25693
- __export(esm_exports, {
25694
- ALL_WEEKDAYS: () => ALL_WEEKDAYS,
25695
- Frequency: () => Frequency,
25696
- RRule: () => RRule,
25697
- RRuleSet: () => RRuleSet,
25698
- Weekday: () => Weekday,
25699
- datetime: () => datetime3,
25700
- rrulestr: () => rrulestr
25787
+ var triggerEvent = external_exports.object({
25788
+ id: external_exports.string().min(1),
25789
+ kind: external_exports.literal("trigger"),
25790
+ version: external_exports.number().int().nonnegative(),
25791
+ expiresAt: external_exports.string().datetime({ offset: true }),
25792
+ payload: triggerEventPayload
25793
+ });
25794
+ var scheduleResetEventPayload = external_exports.object({
25795
+ scheduleId: external_exports.string().min(1)
25796
+ });
25797
+ var scheduleResetEvent = external_exports.object({
25798
+ id: external_exports.string().min(1),
25799
+ kind: external_exports.literal("schedule-reset"),
25800
+ version: external_exports.number().int().nonnegative(),
25801
+ expiresAt: external_exports.string().datetime({ offset: true }),
25802
+ payload: scheduleResetEventPayload
25803
+ });
25804
+ var workspaceSeedEventPayload = external_exports.object({
25805
+ url: external_exports.string().min(1),
25806
+ /** Branch or tag to clone; omitted = the repo's default branch. */
25807
+ ref: external_exports.string().min(1).optional()
25808
+ });
25809
+ var workspaceSeedEvent = external_exports.object({
25810
+ id: external_exports.string().min(1),
25811
+ kind: external_exports.literal("workspace-seed"),
25812
+ version: external_exports.number().int().nonnegative(),
25813
+ expiresAt: external_exports.string().datetime({ offset: true }),
25814
+ payload: workspaceSeedEventPayload
25815
+ });
25816
+ var experimentTriggerEventPayload = external_exports.object({
25817
+ experimentId: external_exports.string().min(1),
25818
+ task: external_exports.string().min(1)
25819
+ });
25820
+ var experimentTriggerEvent = external_exports.object({
25821
+ id: external_exports.string().min(1),
25822
+ kind: external_exports.literal("experiment-trigger"),
25823
+ version: external_exports.number().int().nonnegative(),
25824
+ expiresAt: external_exports.string().datetime({ offset: true }),
25825
+ payload: experimentTriggerEventPayload
25826
+ });
25827
+ var harnessConfigEventPayload = external_exports.object({
25828
+ model: external_exports.string().min(1).optional(),
25829
+ mode: external_exports.string().min(1).optional(),
25830
+ configOptions: external_exports.record(external_exports.string().min(1), external_exports.string()).optional(),
25831
+ unset: external_exports.array(external_exports.string().min(1)).optional()
25832
+ });
25833
+ var harnessConfigEvent = external_exports.object({
25834
+ id: external_exports.string().min(1),
25835
+ kind: external_exports.literal("harness-config"),
25836
+ version: external_exports.number().int().nonnegative(),
25837
+ expiresAt: external_exports.string().datetime({ offset: true }),
25838
+ payload: harnessConfigEventPayload
25839
+ });
25840
+ var event = external_exports.discriminatedUnion("kind", [
25841
+ triggerEvent,
25842
+ scheduleResetEvent,
25843
+ workspaceSeedEvent,
25844
+ experimentTriggerEvent,
25845
+ harnessConfigEvent
25846
+ ]);
25847
+ var harnessConfigChoice = external_exports.object({
25848
+ value: external_exports.string().min(1),
25849
+ name: external_exports.string().min(1),
25850
+ description: external_exports.string().optional()
25851
+ });
25852
+ var harnessConfigOptionGroup = external_exports.object({
25853
+ // "model", "mode", or a configOption id (e.g. "effort").
25854
+ id: external_exports.string().min(1),
25855
+ name: external_exports.string().min(1),
25856
+ description: external_exports.string().optional(),
25857
+ // ACP-style category: "model" | "mode" | "thought_level" | …
25858
+ category: external_exports.string().min(1),
25859
+ choices: external_exports.array(harnessConfigChoice)
25860
+ });
25861
+ var harnessConfigCatalog = external_exports.object({
25862
+ options: external_exports.array(harnessConfigOptionGroup),
25863
+ // Per-model validity: allowed choice values per gated group. Model absent =
25864
+ // all allowed; empty array = group hidden for that model (e.g. Haiku effort).
25865
+ modelConstraints: external_exports.record(external_exports.string().min(1), external_exports.record(external_exports.string().min(1), external_exports.array(external_exports.string()))).optional()
25866
+ });
25867
+ var capabilities = external_exports.object({
25868
+ contributions: external_exports.array(contributionKind),
25869
+ events: external_exports.array(eventKind),
25870
+ // Whether the harness declares a config mapping (gates the UI panel). Optional
25871
+ // for forward-compat with agents that predate it.
25872
+ harnessConfig: external_exports.boolean().optional(),
25873
+ // The option catalog from the harness's manifest (absent → UI hides the panel).
25874
+ harnessConfigCatalog: harnessConfigCatalog.optional()
25875
+ });
25876
+ var stateSlice = external_exports.object({
25877
+ contributions: external_exports.array(contribution),
25878
+ hash: external_exports.string().min(1)
25879
+ });
25880
+ var applyStateInput = external_exports.object({
25881
+ version: external_exports.number().int().positive(),
25882
+ state: stateSlice,
25883
+ events: external_exports.array(event)
25884
+ });
25885
+ var driverFailure = external_exports.object({
25886
+ kind: contributionKind,
25887
+ message: external_exports.string().min(1)
25888
+ });
25889
+ var applyStateResult = external_exports.discriminatedUnion("status", [
25890
+ // Processed: resulting cursor + any per-driver failures (empty on a fully clean apply).
25891
+ external_exports.object({
25892
+ status: external_exports.literal("ok"),
25893
+ appliedVersion: external_exports.number().int().nonnegative(),
25894
+ appliedHash: external_exports.string().min(1).nullable(),
25895
+ // null until the first clean settle
25896
+ failures: external_exports.array(driverFailure).default([]),
25897
+ settledEvents: external_exports.array(external_exports.string()).default([])
25898
+ }),
25899
+ // Contributions already at ≥ the requested version; worker reconciles. Events still apply (own version) — settledEvents reports which.
25900
+ external_exports.object({
25901
+ status: external_exports.literal("stale"),
25902
+ appliedVersion: external_exports.number().int().nonnegative(),
25903
+ settledEvents: external_exports.array(external_exports.string()).default([])
25904
+ })
25905
+ ]);
25906
+ var helloInput = external_exports.object({
25907
+ lastAppliedVersion: external_exports.number().int().nonnegative().optional(),
25908
+ lastAppliedHash: external_exports.string().optional(),
25909
+ protocolVersion: external_exports.literal("v1"),
25910
+ agentRuntimeVersion: external_exports.string(),
25911
+ capabilities
25912
+ });
25913
+ var helloResult = external_exports.object({
25914
+ version: external_exports.number().int().positive().optional(),
25915
+ state: stateSlice.optional(),
25916
+ events: external_exports.array(event)
25701
25917
  });
25702
25918
 
25703
- // ../../node_modules/.pnpm/rrule@2.8.1/node_modules/rrule/dist/esm/weekday.js
25704
- var ALL_WEEKDAYS = [
25705
- "MO",
25706
- "TU",
25707
- "WE",
25708
- "TH",
25709
- "FR",
25710
- "SA",
25711
- "SU"
25712
- ];
25713
- var Weekday = (
25714
- /** @class */
25715
- (function() {
25716
- function Weekday2(weekday, n) {
25717
- if (n === 0)
25718
- throw new Error("Can't create weekday with n == 0");
25719
- this.weekday = weekday;
25720
- this.n = n;
25721
- }
25722
- Weekday2.fromStr = function(str) {
25723
- return new Weekday2(ALL_WEEKDAYS.indexOf(str));
25724
- };
25725
- Weekday2.prototype.nth = function(n) {
25726
- return this.n === n ? this : new Weekday2(this.weekday, n);
25727
- };
25728
- Weekday2.prototype.equals = function(other) {
25729
- return this.weekday === other.weekday && this.n === other.n;
25730
- };
25731
- Weekday2.prototype.toString = function() {
25732
- var s = ALL_WEEKDAYS[this.weekday];
25733
- if (this.n)
25734
- s = (this.n > 0 ? "+" : "") + String(this.n) + s;
25735
- return s;
25736
- };
25737
- Weekday2.prototype.getJsWeekday = function() {
25738
- return this.weekday === 6 ? 0 : this.weekday + 1;
25739
- };
25740
- return Weekday2;
25741
- })()
25742
- );
25919
+ // ../api-server-api/src/modules/harness-config/schemas.ts
25920
+ var agentConfigOptionsSchema = external_exports.record(external_exports.string().min(1), external_exports.string());
25921
+ var harnessConfigApplyInputSchema = external_exports.object({
25922
+ agentId: external_exports.string().min(1),
25923
+ model: external_exports.string().min(1).optional(),
25924
+ mode: external_exports.string().min(1).optional(),
25925
+ configOptions: agentConfigOptionsSchema.optional(),
25926
+ unset: external_exports.array(external_exports.string().min(1)).optional()
25927
+ });
25928
+ var harnessConfigStatusInputSchema = external_exports.object({
25929
+ agentId: external_exports.string().min(1)
25930
+ });
25931
+ var harnessConfigStatusSchema = external_exports.object({
25932
+ supported: external_exports.boolean(),
25933
+ catalog: harnessConfigCatalog.nullable()
25934
+ });
25935
+ var harnessConfigSettledSchema = external_exports.object({
25936
+ settled: external_exports.boolean()
25937
+ });
25743
25938
 
25744
- // ../../node_modules/.pnpm/rrule@2.8.1/node_modules/rrule/dist/esm/helpers.js
25745
- var isPresent = function(value) {
25746
- return value !== null && value !== void 0;
25747
- };
25748
- var isNumber = function(value) {
25749
- return typeof value === "number";
25750
- };
25939
+ // ../api-server-api/src/modules/egress-rules/schemas.ts
25940
+ var ruleVerdictSchema = external_exports.enum(["allow", "deny"]);
25941
+ var egressPresetSchema = external_exports.enum(["none", "trusted", "all"]);
25942
+ var egressRuleListForAgentInputSchema = external_exports.object({
25943
+ agentId: external_exports.string().min(1)
25944
+ });
25945
+ var egressRuleCurrentPresetInputSchema = external_exports.object({
25946
+ agentId: external_exports.string().min(1)
25947
+ });
25948
+ var egressRuleCreateInputSchema = external_exports.object({
25949
+ agentId: external_exports.string().min(1),
25950
+ host: external_exports.string().min(1),
25951
+ method: external_exports.string().min(1).default("*"),
25952
+ pathPattern: external_exports.string().min(1).default("*"),
25953
+ verdict: ruleVerdictSchema
25954
+ });
25955
+ var egressRuleUpdateInputSchema = external_exports.object({
25956
+ id: external_exports.string().min(1),
25957
+ method: external_exports.string().min(1).optional(),
25958
+ pathPattern: external_exports.string().min(1).optional(),
25959
+ verdict: ruleVerdictSchema.optional()
25960
+ });
25961
+ var egressRuleRevokeInputSchema = external_exports.object({
25962
+ id: external_exports.string().min(1)
25963
+ });
25964
+ var egressRuleApplyPresetInputSchema = external_exports.object({
25965
+ agentId: external_exports.string().min(1),
25966
+ preset: egressPresetSchema
25967
+ });
25968
+
25969
+ // ../api-server-api/src/modules/agents/schemas.ts
25970
+ var idSchema = external_exports.object({ id: external_exports.string().min(1) });
25971
+ var agentCreateInputSchema = external_exports.object({
25972
+ name: external_exports.string().min(1).refine((n) => !n.startsWith("agent-"), {
25973
+ message: "agent name cannot start with 'agent-' (reserved for IDs)"
25974
+ }),
25975
+ templateId: external_exports.string().optional(),
25976
+ image: external_exports.string().optional(),
25977
+ description: external_exports.string().optional(),
25978
+ env: external_exports.array(envVarSchema).max(64).optional(),
25979
+ secretRef: external_exports.string().optional(),
25980
+ registryCredential: external_exports.object({
25981
+ server: external_exports.string().min(1),
25982
+ username: external_exports.string().min(1),
25983
+ password: external_exports.string().min(1)
25984
+ }).optional(),
25985
+ allowedUserEmails: external_exports.array(external_exports.email()).optional(),
25986
+ egressPreset: egressPresetSchema.optional(),
25987
+ // Per-agent idle timeout override in minutes (0 = never hibernate); omit to inherit the global default.
25988
+ hibernationTimeoutMin: external_exports.number().int().min(0).optional(),
25989
+ // Optional: clone this public repo (optionally a branch/tag via `ref`) into
25990
+ // the work dir once, via a one-shot `workspace-seed` event. Not enforced
25991
+ // against the `gitRepos` catalog server-side — the clone runs in the
25992
+ // egress-gated agent pod, so this reaches no URL the agent couldn't already
25993
+ // reach itself.
25994
+ gitRepo: external_exports.object({ url: external_exports.url(), ref: external_exports.string().min(1).optional() }).optional(),
25995
+ // Initial connection grants, settled into the spec at create so credentials
25996
+ // ride the first snapshot and the gateway renders its chains once (no
25997
+ // readiness flap).
25998
+ connectionIds: external_exports.array(external_exports.string()).optional()
25999
+ }).refine((d2) => d2.templateId !== void 0 || d2.image !== void 0, {
26000
+ message: "Either templateId or image is required"
26001
+ });
26002
+ var agentUpdateInputSchema = external_exports.object({
26003
+ id: external_exports.string().min(1),
26004
+ name: external_exports.string().min(1).max(255).optional(),
26005
+ description: external_exports.string().optional(),
26006
+ env: external_exports.array(envVarSchema).max(64).optional(),
26007
+ secretRef: external_exports.string().optional(),
26008
+ allowedUserEmails: external_exports.array(external_exports.email()).optional(),
26009
+ // Per-agent idle timeout override in minutes (0 = never hibernate); null clears it back to the global default.
26010
+ hibernationTimeoutMin: external_exports.number().int().min(0).nullable().optional()
26011
+ });
26012
+ var agentConnectSlackInputSchema = external_exports.object({
26013
+ id: external_exports.string().min(1),
26014
+ slackChannelId: external_exports.string().min(1)
26015
+ });
26016
+ var agentConnectTelegramInputSchema = external_exports.object({
26017
+ id: external_exports.string().min(1),
26018
+ botToken: external_exports.string().min(1)
26019
+ });
26020
+
26021
+ // ../api-server-api/src/modules/schedules/schemas.ts
26022
+ var scheduleSessionModeSchema = external_exports.enum(["continuous", "fresh"]);
26023
+ var quietWindowSchema = external_exports.object({
26024
+ startTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, "HH:MM required"),
26025
+ endTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, "HH:MM required"),
26026
+ enabled: external_exports.boolean()
26027
+ }).refine((w3) => w3.startTime !== w3.endTime, {
26028
+ message: "startTime and endTime must differ"
26029
+ });
26030
+ var scheduleListInputSchema = external_exports.object({
26031
+ agentId: external_exports.string().min(1)
26032
+ });
26033
+ var scheduleGetInputSchema = external_exports.object({
26034
+ id: external_exports.string().min(1)
26035
+ });
26036
+ var scheduleCreateCronInputSchema = external_exports.object({
26037
+ name: external_exports.string().min(1),
26038
+ agentId: external_exports.string().min(1),
26039
+ cron: external_exports.string().min(1),
26040
+ task: external_exports.string().min(1),
26041
+ sessionMode: scheduleSessionModeSchema.optional()
26042
+ });
26043
+ var scheduleCreateRRuleInputSchema = external_exports.object({
26044
+ name: external_exports.string().min(1),
26045
+ agentId: external_exports.string().min(1),
26046
+ rrule: external_exports.string().min(1),
26047
+ timezone: external_exports.string().min(1),
26048
+ quietHours: external_exports.array(quietWindowSchema).optional(),
26049
+ task: external_exports.string().min(1),
26050
+ sessionMode: scheduleSessionModeSchema.optional()
26051
+ });
26052
+ var scheduleUpdateRRuleInputSchema = external_exports.object({
26053
+ id: external_exports.string().min(1),
26054
+ name: external_exports.string().min(1),
26055
+ rrule: external_exports.string().min(1),
26056
+ timezone: external_exports.string().min(1),
26057
+ quietHours: external_exports.array(quietWindowSchema),
26058
+ task: external_exports.string().min(1),
26059
+ sessionMode: scheduleSessionModeSchema.optional()
26060
+ });
26061
+ var scheduleDeleteInputSchema = external_exports.object({
26062
+ id: external_exports.string().min(1)
26063
+ });
26064
+ var scheduleToggleInputSchema = external_exports.object({
26065
+ id: external_exports.string().min(1)
26066
+ });
26067
+ var scheduleResetSessionInputSchema = external_exports.object({
26068
+ id: external_exports.string().min(1)
26069
+ });
26070
+ var quietWindowConfigMapSchema = external_exports.object({
26071
+ startTime: external_exports.string(),
26072
+ endTime: external_exports.string(),
26073
+ enabled: external_exports.boolean()
26074
+ });
26075
+ var scheduleCreatorSchema = external_exports.enum(["user", "agent"]);
26076
+ var scheduleSpecCronSchema = external_exports.object({
26077
+ version: external_exports.string(),
26078
+ type: external_exports.literal("cron"),
26079
+ cron: external_exports.string(),
26080
+ task: external_exports.string().optional(),
26081
+ enabled: external_exports.boolean(),
26082
+ sessionMode: scheduleSessionModeSchema.optional(),
26083
+ createdBy: scheduleCreatorSchema
26084
+ }).passthrough();
26085
+ var scheduleSpecRRuleSchema = external_exports.object({
26086
+ version: external_exports.string(),
26087
+ type: external_exports.literal("rrule"),
26088
+ rrule: external_exports.string(),
26089
+ timezone: external_exports.string(),
26090
+ quietHours: external_exports.array(quietWindowConfigMapSchema).optional(),
26091
+ task: external_exports.string().optional(),
26092
+ enabled: external_exports.boolean(),
26093
+ sessionMode: scheduleSessionModeSchema.optional(),
26094
+ createdBy: scheduleCreatorSchema
26095
+ }).passthrough();
26096
+ var scheduleSpecSchema = external_exports.discriminatedUnion("type", [
26097
+ scheduleSpecCronSchema,
26098
+ scheduleSpecRRuleSchema
26099
+ ]);
26100
+ var scheduleStatusSchema = external_exports.object({
26101
+ lastRun: external_exports.string().optional(),
26102
+ nextRun: external_exports.string().optional(),
26103
+ lastResult: external_exports.string().optional()
26104
+ });
26105
+
26106
+ // ../api-server-api/src/modules/experiments/schemas.ts
26107
+ var armVariationSchema = external_exports.string();
26108
+ var experimentIdInputSchema = external_exports.object({
26109
+ id: external_exports.string().min(1)
26110
+ });
26111
+ var experimentCreateInputSchema = external_exports.object({
26112
+ name: external_exports.string().trim().min(1, "name is required").max(200),
26113
+ prompt: external_exports.string().trim().min(1, "prompt is required")
26114
+ });
26115
+ var experimentAddArmInputSchema = external_exports.object({
26116
+ experimentId: external_exports.string().min(1),
26117
+ agentId: external_exports.string().min(1),
26118
+ armVariation: armVariationSchema.default("")
26119
+ });
26120
+
26121
+ // ../../node_modules/.pnpm/rrule@2.8.1/node_modules/rrule/dist/esm/index.js
26122
+ var esm_exports = {};
26123
+ __export(esm_exports, {
26124
+ ALL_WEEKDAYS: () => ALL_WEEKDAYS,
26125
+ Frequency: () => Frequency,
26126
+ RRule: () => RRule,
26127
+ RRuleSet: () => RRuleSet,
26128
+ Weekday: () => Weekday,
26129
+ datetime: () => datetime3,
26130
+ rrulestr: () => rrulestr
26131
+ });
26132
+
26133
+ // ../../node_modules/.pnpm/rrule@2.8.1/node_modules/rrule/dist/esm/weekday.js
26134
+ var ALL_WEEKDAYS = [
26135
+ "MO",
26136
+ "TU",
26137
+ "WE",
26138
+ "TH",
26139
+ "FR",
26140
+ "SA",
26141
+ "SU"
26142
+ ];
26143
+ var Weekday = (
26144
+ /** @class */
26145
+ (function() {
26146
+ function Weekday2(weekday, n) {
26147
+ if (n === 0)
26148
+ throw new Error("Can't create weekday with n == 0");
26149
+ this.weekday = weekday;
26150
+ this.n = n;
26151
+ }
26152
+ Weekday2.fromStr = function(str) {
26153
+ return new Weekday2(ALL_WEEKDAYS.indexOf(str));
26154
+ };
26155
+ Weekday2.prototype.nth = function(n) {
26156
+ return this.n === n ? this : new Weekday2(this.weekday, n);
26157
+ };
26158
+ Weekday2.prototype.equals = function(other) {
26159
+ return this.weekday === other.weekday && this.n === other.n;
26160
+ };
26161
+ Weekday2.prototype.toString = function() {
26162
+ var s = ALL_WEEKDAYS[this.weekday];
26163
+ if (this.n)
26164
+ s = (this.n > 0 ? "+" : "") + String(this.n) + s;
26165
+ return s;
26166
+ };
26167
+ Weekday2.prototype.getJsWeekday = function() {
26168
+ return this.weekday === 6 ? 0 : this.weekday + 1;
26169
+ };
26170
+ return Weekday2;
26171
+ })()
26172
+ );
26173
+
26174
+ // ../../node_modules/.pnpm/rrule@2.8.1/node_modules/rrule/dist/esm/helpers.js
26175
+ var isPresent = function(value) {
26176
+ return value !== null && value !== void 0;
26177
+ };
26178
+ var isNumber = function(value) {
26179
+ return typeof value === "number";
26180
+ };
25751
26181
  var isWeekdayStr = function(value) {
25752
26182
  return typeof value === "string" && ALL_WEEKDAYS.includes(value);
25753
26183
  };
@@ -28731,55 +29161,6 @@ function parseHHMM(s) {
28731
29161
  return h2 * 60 + mi;
28732
29162
  }
28733
29163
 
28734
- // ../api-server-api/src/modules/secrets/schemas.ts
28735
- var presetSecretTypeSchema = external_exports.enum([
28736
- "anthropic",
28737
- "ibm-litellm",
28738
- "openai",
28739
- "bob"
28740
- ]);
28741
- var hostPatternSchema = external_exports.string().min(1).max(253).refine((v2) => !v2.includes("*"), {
28742
- message: "Wildcard host patterns are not supported. Please specify exact hostnames."
28743
- });
28744
- var envMappingSchema = external_exports.object({
28745
- envName: external_exports.string().min(1).max(255).regex(ENV_NAME_RE, "envName must match [A-Z_][A-Z0-9_]*"),
28746
- placeholder: external_exports.string().min(1).max(1e3)
28747
- });
28748
- var envMappingsSchema = external_exports.array(envMappingSchema).max(32);
28749
- var secretCreateInputSchema = external_exports.object({
28750
- type: presetSecretTypeSchema,
28751
- name: external_exports.string().min(1).max(100),
28752
- value: external_exports.string().min(1),
28753
- envMappings: envMappingsSchema.optional()
28754
- });
28755
- var secretUpdateInputSchema = external_exports.object({
28756
- id: external_exports.string().min(1),
28757
- name: external_exports.string().min(1).max(100).optional(),
28758
- value: external_exports.string().min(1).optional(),
28759
- envMappings: envMappingsSchema.optional()
28760
- });
28761
- var secretDeleteInputSchema = external_exports.object({ id: external_exports.string().min(1) });
28762
- var secretCreateGithubPatInputSchema = external_exports.object({
28763
- name: external_exports.string().min(1).max(100),
28764
- token: external_exports.string().min(1)
28765
- });
28766
- var secretUpdateGithubPatInputSchema = external_exports.object({
28767
- apiSecretId: external_exports.string().min(1),
28768
- gitSecretId: external_exports.string().min(1),
28769
- token: external_exports.string().min(1)
28770
- });
28771
- var secretGetAgentAccessInputSchema = external_exports.object({
28772
- agentId: external_exports.string().min(1)
28773
- });
28774
- var secretSetAgentAccessInputSchema = external_exports.object({
28775
- agentId: external_exports.string().min(1),
28776
- secretIds: external_exports.array(external_exports.string().min(1))
28777
- });
28778
- var secretTestAnthropicInputSchema = external_exports.object({
28779
- value: external_exports.string().min(1),
28780
- envName: external_exports.enum(["ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN"])
28781
- });
28782
-
28783
29164
  // ../api-server-api/src/modules/connections/providers.ts
28784
29165
  var DEFAULT_ENV_PLACEHOLDER = "dummy-placeholder";
28785
29166
  var IBM_LITELLM_HOST = "ete-litellm.ai-models.vpc.res.ibm.com";
@@ -28798,359 +29179,136 @@ function ibmLitellmEnvMappings() {
28798
29179
  { envName: "OPENAI_MODEL", placeholder: "gpt-5.5" }
28799
29180
  ];
28800
29181
  }
28801
- var BOB_HOST = "api.us-east.bob.ibm.com";
28802
- var BOB_PLACEHOLDER = "dummy-placeholder";
28803
- function bobEnvMappings(pins = {}) {
28804
- const out = [
28805
- { envName: "BOBSHELL_API_KEY", placeholder: BOB_PLACEHOLDER }
29182
+ function openaiEnvMappings() {
29183
+ return [
29184
+ { envName: "OPENAI_API_KEY", placeholder: DEFAULT_ENV_PLACEHOLDER },
29185
+ { envName: "OPENAI_BASE_URL", placeholder: "https://api.openai.com/v1" }
28806
29186
  ];
28807
- const push = (envName, value) => {
28808
- const trimmed = value?.trim();
28809
- if (trimmed) out.push({ envName, placeholder: trimmed });
28810
- };
28811
- push("BOB_SHELL_MODEL", pins.model);
28812
- push("BOB_INSTANCE_ID", pins.agentId);
28813
- push("BOB_TEAM_ID", pins.teamId);
28814
- push("BOB_MAX_COINS", pins.maxCoins);
28815
- push("BOB_CHAT_MODE", pins.chatMode);
28816
- return out;
28817
29187
  }
28818
- var PROVIDERS = {
28819
- anthropic: {
28820
- id: "anthropic",
28821
- displayName: "Anthropic",
28822
- hostPattern: "api.anthropic.com",
28823
- modes: [
28824
- {
28825
- key: "oauth",
28826
- label: "OAuth Token",
28827
- templateId: "anthropic-oauth",
28828
- tokenPrefix: "sk-ant-oat",
28829
- defaultEnvMappings: [
28830
- {
28831
- envName: "CLAUDE_CODE_OAUTH_TOKEN",
28832
- placeholder: DEFAULT_ENV_PLACEHOLDER
28833
- }
28834
- ]
28835
- },
28836
- {
28837
- key: "api-key",
28838
- label: "API Key",
28839
- templateId: "anthropic",
28840
- tokenPrefix: "sk-ant-api",
28841
- isDefault: true,
28842
- defaultEnvMappings: [
28843
- {
28844
- envName: "ANTHROPIC_API_KEY",
28845
- placeholder: DEFAULT_ENV_PLACEHOLDER
28846
- }
28847
- ],
28848
- injection: { headerName: "x-api-key", valueFormat: "{value}" }
28849
- }
28850
- ]
28851
- },
28852
- "ibm-litellm": {
28853
- id: "ibm-litellm",
28854
- displayName: "IBM LiteLLM ETE Proxy",
28855
- hostPattern: IBM_LITELLM_HOST,
28856
- modes: [
28857
- {
28858
- key: "api-key",
28859
- label: "API Token",
28860
- templateId: "ibm-litellm",
28861
- defaultEnvMappings: ibmLitellmEnvMappings()
28862
- }
28863
- ]
28864
- },
28865
- openai: {
28866
- id: "openai",
28867
- displayName: "OpenAI",
28868
- hostPattern: "api.openai.com",
28869
- // Scope injection to /v1/* so other host endpoints don't get a stray Authorization header.
28870
- pathPattern: "/v1/*",
28871
- modes: [
28872
- {
28873
- key: "api-key",
28874
- label: "API Key",
28875
- templateId: "openai",
28876
- defaultEnvMappings: [
28877
- { envName: "OPENAI_API_KEY", placeholder: DEFAULT_ENV_PLACEHOLDER }
28878
- ]
28879
- }
28880
- ]
28881
- },
28882
- bob: {
28883
- id: "bob",
28884
- displayName: "Bob Shell",
28885
- hostPattern: BOB_HOST,
28886
- modes: [
28887
- {
28888
- key: "api-key",
28889
- label: "API Key",
28890
- templateId: "bob",
28891
- defaultEnvMappings: bobEnvMappings(),
28892
- // `Apikey` prefix; `Bearer` would trigger JWT auth.
28893
- injection: {
28894
- headerName: "Authorization",
28895
- valueFormat: "Apikey {value}"
28896
- },
28897
- extraInjections: [
28898
- { headerName: "X-Bobshell-Internal", queryParamName: "key" }
28899
- ]
28900
- }
28901
- ]
28902
- }
28903
- };
28904
- var PROVIDER_PRESET_TYPES = Object.keys(
28905
- PROVIDERS
28906
- );
28907
- function isProviderPresetType(type) {
28908
- return type in PROVIDERS;
28909
- }
28910
- var TEMPLATE_TO_PROVIDER = new Map(
28911
- PROVIDER_PRESET_TYPES.flatMap(
28912
- (type) => PROVIDERS[type].modes.map(
28913
- (mode) => [mode.templateId, type]
28914
- )
28915
- )
28916
- );
28917
- var PROVIDER_TEMPLATE_IDS = new Set(
28918
- TEMPLATE_TO_PROVIDER.keys()
28919
- );
28920
- function providerTypeForTemplateId(templateId) {
28921
- return TEMPLATE_TO_PROVIDER.get(templateId) ?? null;
28922
- }
28923
- function templateIdForProvider(type, value) {
28924
- const modes = PROVIDERS[type].modes;
28925
- const matched = modes.find(
28926
- (mode) => mode.tokenPrefix !== void 0 && value.startsWith(mode.tokenPrefix)
28927
- );
28928
- return (matched ?? modes.find((mode) => mode.isDefault) ?? modes[0]).templateId;
28929
- }
28930
-
28931
- // ../agent-runtime-api/src/modules/files/schemas.ts
28932
- var pathSchema = external_exports.string().min(1);
28933
- var fileListDirsInputSchema = external_exports.object({
28934
- paths: external_exports.array(external_exports.string()).max(500)
28935
- });
28936
- var fileReadInputSchema = external_exports.object({ path: pathSchema });
28937
- var fileWriteInputSchema = external_exports.object({
28938
- path: pathSchema,
28939
- content: external_exports.string(),
28940
- expectedMtimeMs: external_exports.number().optional()
28941
- });
28942
- var fileCreateInputSchema = external_exports.object({
28943
- path: pathSchema,
28944
- content: external_exports.string()
28945
- });
28946
- var fileMkdirInputSchema = external_exports.object({ path: pathSchema });
28947
- var fileRenameInputSchema = external_exports.object({
28948
- from: pathSchema,
28949
- to: pathSchema,
28950
- overwrite: external_exports.boolean().optional()
28951
- });
28952
- var fileRemoveInputSchema = external_exports.object({ path: pathSchema });
28953
- var fileUploadInputSchema = external_exports.object({
28954
- path: pathSchema,
28955
- contentBase64: external_exports.string(),
28956
- /** Browser-reported MIME (File.type). Carried in the API for observability
28957
- * and forward-compat; server-side reads still detect MIME from magic
28958
- * bytes so we don't need to persist this. */
28959
- contentType: external_exports.string().max(255).optional(),
28960
- overwrite: external_exports.boolean().optional()
28961
- });
28962
-
28963
- // ../agent-runtime-api/src/modules/skills/schemas.ts
28964
- var skillInstallInputSchema = external_exports.object({
28965
- sourceUrl: external_exports.string().min(1),
28966
- name: external_exports.string().min(1),
28967
- version: external_exports.string().min(1),
28968
- skillPaths: external_exports.array(external_exports.string().min(1)).min(1)
28969
- });
28970
- var skillUninstallInputSchema = external_exports.object({
28971
- name: external_exports.string().min(1),
28972
- skillPaths: external_exports.array(external_exports.string().min(1)).min(1)
28973
- });
28974
- var skillScanInputSchema = external_exports.object({
28975
- source: external_exports.string().min(1)
28976
- });
28977
- var skillPublishInputSchema = external_exports.object({
28978
- name: external_exports.string().min(1),
28979
- owner: external_exports.string().min(1),
28980
- repo: external_exports.string().min(1),
28981
- title: external_exports.string().min(1),
28982
- body: external_exports.string()
28983
- });
28984
- var skillReadLocalInputSchema = external_exports.object({
28985
- name: external_exports.string().min(1)
28986
- });
28987
-
28988
- // ../agent-runtime-api/src/modules/ssh/schemas.ts
28989
- var sshAuthorizeKeyInputSchema = external_exports.object({
28990
- publicKey: external_exports.string().min(1).max(8192).refine((s) => !/[\r\n]/.test(s), "must be a single line")
28991
- });
28992
-
28993
- // ../agent-runtime-api/src/modules/import/types.ts
28994
- var importBundleResultSchema = external_exports.object({
28995
- filesWritten: external_exports.number().int().nonnegative(),
28996
- bytes: external_exports.number().int().nonnegative(),
28997
- durationMs: external_exports.number().int().nonnegative()
28998
- });
28999
-
29000
- // ../agent-runtime-api/src/modules/runtime/types.ts
29001
- var contributionKind = external_exports.enum([
29002
- "env",
29003
- "egress-allow",
29004
- "egress-inject",
29005
- "file",
29006
- "mcp-entry",
29007
- "skill-ref"
29008
- ]);
29009
- var eventKind = external_exports.enum([
29010
- "trigger",
29011
- "schedule-reset",
29012
- "workspace-seed"
29013
- ]);
29014
- var mergeMode = external_exports.enum([
29015
- "overwrite",
29016
- "section-marker",
29017
- "key-targeted",
29018
- "yaml-fill-if-missing"
29019
- ]);
29020
- var fileFormat = external_exports.enum(["yaml", "json", "text", "ini"]);
29021
- var envContribution = external_exports.object({
29022
- kind: external_exports.literal("env"),
29023
- name: external_exports.string().min(1),
29024
- placeholder: external_exports.string()
29025
- });
29026
- var egressAllowContribution = external_exports.object({
29027
- kind: external_exports.literal("egress-allow"),
29028
- host: external_exports.string().min(1),
29029
- pathPattern: external_exports.string().optional()
29030
- });
29031
- var egressInjectContribution = external_exports.object({
29032
- kind: external_exports.literal("egress-inject"),
29033
- host: external_exports.string().min(1),
29034
- pathPattern: external_exports.string().optional(),
29035
- headerName: external_exports.string().min(1),
29036
- valueFormat: external_exports.string().min(1),
29037
- encoding: external_exports.literal("basic-x-access-token").optional(),
29038
- // Moves the value into this query param instead of the header; restricted to unreserved chars since the Lua treats it as a trusted literal.
29039
- queryParamName: external_exports.string().regex(/^[A-Za-z0-9_.~-]+$/).optional()
29040
- });
29041
- var fileContribution = external_exports.object({
29042
- kind: external_exports.literal("file"),
29043
- path: external_exports.string().min(1),
29044
- format: fileFormat,
29045
- mergeMode,
29046
- content: external_exports.unknown().optional()
29047
- });
29048
- var mcpEntryContribution = external_exports.object({
29049
- kind: external_exports.literal("mcp-entry"),
29050
- name: external_exports.string().min(1),
29051
- url: external_exports.string().url(),
29052
- headers: external_exports.record(external_exports.string(), external_exports.string()).optional()
29053
- });
29054
- var skillRefContribution = external_exports.object({
29055
- kind: external_exports.literal("skill-ref"),
29056
- sourceUrl: external_exports.string().min(1),
29057
- name: external_exports.string().min(1),
29058
- version: external_exports.string().min(1)
29059
- });
29060
- var contribution = external_exports.discriminatedUnion("kind", [
29061
- envContribution,
29062
- egressAllowContribution,
29063
- egressInjectContribution,
29064
- fileContribution,
29065
- mcpEntryContribution,
29066
- skillRefContribution
29067
- ]);
29068
- var triggerEventPayload = external_exports.object({
29069
- scheduleId: external_exports.string().min(1),
29070
- task: external_exports.string().min(1),
29071
- sessionMode: external_exports.enum(["continuous", "fresh"]).optional(),
29072
- mcpServers: external_exports.array(external_exports.unknown()).optional()
29073
- });
29074
- var triggerEvent = external_exports.object({
29075
- id: external_exports.string().min(1),
29076
- kind: external_exports.literal("trigger"),
29077
- version: external_exports.number().int().nonnegative(),
29078
- expiresAt: external_exports.string().datetime({ offset: true }),
29079
- payload: triggerEventPayload
29080
- });
29081
- var scheduleResetEventPayload = external_exports.object({
29082
- scheduleId: external_exports.string().min(1)
29083
- });
29084
- var scheduleResetEvent = external_exports.object({
29085
- id: external_exports.string().min(1),
29086
- kind: external_exports.literal("schedule-reset"),
29087
- version: external_exports.number().int().nonnegative(),
29088
- expiresAt: external_exports.string().datetime({ offset: true }),
29089
- payload: scheduleResetEventPayload
29090
- });
29091
- var workspaceSeedEventPayload = external_exports.object({
29092
- url: external_exports.string().min(1),
29093
- /** Branch or tag to clone; omitted = the repo's default branch. */
29094
- ref: external_exports.string().min(1).optional()
29095
- });
29096
- var workspaceSeedEvent = external_exports.object({
29097
- id: external_exports.string().min(1),
29098
- kind: external_exports.literal("workspace-seed"),
29099
- version: external_exports.number().int().nonnegative(),
29100
- expiresAt: external_exports.string().datetime({ offset: true }),
29101
- payload: workspaceSeedEventPayload
29102
- });
29103
- var event = external_exports.discriminatedUnion("kind", [
29104
- triggerEvent,
29105
- scheduleResetEvent,
29106
- workspaceSeedEvent
29107
- ]);
29108
- var capabilities = external_exports.object({
29109
- contributions: external_exports.array(contributionKind),
29110
- events: external_exports.array(eventKind)
29111
- });
29112
- var stateSlice = external_exports.object({
29113
- contributions: external_exports.array(contribution),
29114
- hash: external_exports.string().min(1)
29115
- });
29116
- var applyStateInput = external_exports.object({
29117
- version: external_exports.number().int().positive(),
29118
- state: stateSlice,
29119
- events: external_exports.array(event)
29120
- });
29121
- var driverFailure = external_exports.object({
29122
- kind: contributionKind,
29123
- message: external_exports.string().min(1)
29124
- });
29125
- var applyStateResult = external_exports.discriminatedUnion("status", [
29126
- // Processed: resulting cursor + any per-driver failures (empty on a fully clean apply).
29127
- external_exports.object({
29128
- status: external_exports.literal("ok"),
29129
- appliedVersion: external_exports.number().int().nonnegative(),
29130
- appliedHash: external_exports.string().min(1).nullable(),
29131
- // null until the first clean settle
29132
- failures: external_exports.array(driverFailure).default([]),
29133
- settledEvents: external_exports.array(external_exports.string()).default([])
29134
- }),
29135
- // Contributions already at ≥ the requested version; worker reconciles. Events still apply (own version) — settledEvents reports which.
29136
- external_exports.object({
29137
- status: external_exports.literal("stale"),
29138
- appliedVersion: external_exports.number().int().nonnegative(),
29139
- settledEvents: external_exports.array(external_exports.string()).default([])
29140
- })
29141
- ]);
29142
- var helloInput = external_exports.object({
29143
- lastAppliedVersion: external_exports.number().int().nonnegative().optional(),
29144
- lastAppliedHash: external_exports.string().optional(),
29145
- protocolVersion: external_exports.literal("v1"),
29146
- agentRuntimeVersion: external_exports.string(),
29147
- capabilities
29148
- });
29149
- var helloResult = external_exports.object({
29150
- version: external_exports.number().int().positive().optional(),
29151
- state: stateSlice.optional(),
29152
- events: external_exports.array(event)
29153
- });
29188
+ var BOB_HOST = "api.us-east.bob.ibm.com";
29189
+ var BOB_PLACEHOLDER = "dummy-placeholder";
29190
+ function bobEnvMappings(pins = {}) {
29191
+ const out = [
29192
+ { envName: "BOBSHELL_API_KEY", placeholder: BOB_PLACEHOLDER }
29193
+ ];
29194
+ const push = (envName, value) => {
29195
+ const trimmed = value?.trim();
29196
+ if (trimmed) out.push({ envName, placeholder: trimmed });
29197
+ };
29198
+ push("BOB_SHELL_MODEL", pins.model);
29199
+ push("BOB_INSTANCE_ID", pins.agentId);
29200
+ push("BOB_TEAM_ID", pins.teamId);
29201
+ push("BOB_MAX_COINS", pins.maxCoins);
29202
+ push("BOB_CHAT_MODE", pins.chatMode);
29203
+ return out;
29204
+ }
29205
+ var PROVIDERS = {
29206
+ anthropic: {
29207
+ id: "anthropic",
29208
+ displayName: "Anthropic",
29209
+ hostPattern: "api.anthropic.com",
29210
+ modes: [
29211
+ {
29212
+ key: "oauth",
29213
+ label: "OAuth Token",
29214
+ templateId: "anthropic-oauth",
29215
+ tokenPrefix: "sk-ant-oat",
29216
+ defaultEnvMappings: [
29217
+ {
29218
+ envName: "CLAUDE_CODE_OAUTH_TOKEN",
29219
+ placeholder: DEFAULT_ENV_PLACEHOLDER
29220
+ }
29221
+ ]
29222
+ },
29223
+ {
29224
+ key: "api-key",
29225
+ label: "API Key",
29226
+ templateId: "anthropic",
29227
+ tokenPrefix: "sk-ant-api",
29228
+ isDefault: true,
29229
+ defaultEnvMappings: [
29230
+ {
29231
+ envName: "ANTHROPIC_API_KEY",
29232
+ placeholder: DEFAULT_ENV_PLACEHOLDER
29233
+ }
29234
+ ],
29235
+ injection: { headerName: "x-api-key", valueFormat: "{value}" }
29236
+ }
29237
+ ]
29238
+ },
29239
+ "ibm-litellm": {
29240
+ id: "ibm-litellm",
29241
+ displayName: "IBM LiteLLM ETE Proxy",
29242
+ hostPattern: IBM_LITELLM_HOST,
29243
+ modes: [
29244
+ {
29245
+ key: "api-key",
29246
+ label: "API Token",
29247
+ templateId: "ibm-litellm",
29248
+ defaultEnvMappings: ibmLitellmEnvMappings()
29249
+ }
29250
+ ]
29251
+ },
29252
+ openai: {
29253
+ id: "openai",
29254
+ displayName: "OpenAI",
29255
+ hostPattern: "api.openai.com",
29256
+ // Scope injection to /v1/* so other host endpoints don't get a stray Authorization header.
29257
+ pathPattern: "/v1/*",
29258
+ modes: [
29259
+ {
29260
+ key: "api-key",
29261
+ label: "API Key",
29262
+ templateId: "openai",
29263
+ defaultEnvMappings: openaiEnvMappings()
29264
+ }
29265
+ ]
29266
+ },
29267
+ bob: {
29268
+ id: "bob",
29269
+ displayName: "Bob Shell",
29270
+ hostPattern: BOB_HOST,
29271
+ modes: [
29272
+ {
29273
+ key: "api-key",
29274
+ label: "API Key",
29275
+ templateId: "bob",
29276
+ defaultEnvMappings: bobEnvMappings(),
29277
+ // `Apikey` prefix; `Bearer` would trigger JWT auth.
29278
+ injection: {
29279
+ headerName: "Authorization",
29280
+ valueFormat: "Apikey {value}"
29281
+ },
29282
+ extraInjections: [
29283
+ { headerName: "X-Bobshell-Internal", queryParamName: "key" }
29284
+ ]
29285
+ }
29286
+ ]
29287
+ }
29288
+ };
29289
+ var PROVIDER_PRESET_TYPES = Object.keys(
29290
+ PROVIDERS
29291
+ );
29292
+ var TEMPLATE_TO_PROVIDER = new Map(
29293
+ PROVIDER_PRESET_TYPES.flatMap(
29294
+ (type) => PROVIDERS[type].modes.map(
29295
+ (mode) => [mode.templateId, type]
29296
+ )
29297
+ )
29298
+ );
29299
+ var PROVIDER_TEMPLATE_IDS = new Set(
29300
+ TEMPLATE_TO_PROVIDER.keys()
29301
+ );
29302
+ function providerTypeForTemplateId(templateId) {
29303
+ return TEMPLATE_TO_PROVIDER.get(templateId) ?? null;
29304
+ }
29305
+ function templateIdForProvider(type, value) {
29306
+ const modes = PROVIDERS[type].modes;
29307
+ const matched = modes.find(
29308
+ (mode) => mode.tokenPrefix !== void 0 && value.startsWith(mode.tokenPrefix)
29309
+ );
29310
+ return (matched ?? modes.find((mode) => mode.isDefault) ?? modes[0]).templateId;
29311
+ }
29154
29312
 
29155
29313
  // ../api-server-api/src/modules/secret-store/types.ts
29156
29314
  var secretRef = external_exports.object({
@@ -29330,13 +29488,18 @@ var connectionCreateInputSchema = external_exports.discriminatedUnion("authKind"
29330
29488
  headerCreateInput,
29331
29489
  noneCreateInput
29332
29490
  ]);
29491
+ var connectionTestAnthropicInputSchema = external_exports.object({
29492
+ value: external_exports.string().min(1),
29493
+ envName: external_exports.enum(["ANTHROPIC_API_KEY", "CLAUDE_CODE_OAUTH_TOKEN"])
29494
+ });
29333
29495
 
29334
29496
  // ../api-server-api/src/modules/sessions/types.ts
29335
29497
  var SessionType = {
29336
29498
  Regular: "regular",
29337
29499
  ChannelSlack: "channel_slack",
29338
29500
  ChannelTelegram: "channel_telegram",
29339
- ScheduleCron: "schedule_cron"
29501
+ ScheduleCron: "schedule_cron",
29502
+ ExperimentTrial: "experiment_trial"
29340
29503
  };
29341
29504
  var SessionMode = /* @__PURE__ */ ((SessionMode2) => {
29342
29505
  SessionMode2["Chat"] = "chat";
@@ -29399,101 +29562,6 @@ var PodFilesEventSchema = external_exports.object({
29399
29562
  });
29400
29563
  var EventKindSchema = external_exports.enum(["snapshot", "upsert"]);
29401
29564
 
29402
- // ../api-server-api/src/modules/skills/schemas.ts
29403
- var skillSourceSchema = external_exports.object({
29404
- id: external_exports.string(),
29405
- name: external_exports.string(),
29406
- gitUrl: external_exports.string(),
29407
- /** True when the source is managed by the cluster admin
29408
- * (Helm-seeded). Users can't delete it. */
29409
- system: external_exports.boolean().optional(),
29410
- /** Present when the source was declared by an agent template
29411
- * (spec.skillSources). UI-only hint for the "Agent" badge —
29412
- * backend treats template sources as read-only. */
29413
- fromTemplate: external_exports.object({ templateId: external_exports.string(), templateName: external_exports.string() }).optional(),
29414
- canPublish: external_exports.boolean().optional()
29415
- });
29416
- var skillPublishResultSchema = external_exports.object({
29417
- prUrl: external_exports.string().url(),
29418
- branch: external_exports.string()
29419
- });
29420
- var skillSchema = external_exports.object({
29421
- source: external_exports.string(),
29422
- name: external_exports.string(),
29423
- description: external_exports.string(),
29424
- version: external_exports.string(),
29425
- contentHash: external_exports.string()
29426
- });
29427
- var skillRefSchema = external_exports.object({
29428
- source: external_exports.string(),
29429
- name: external_exports.string(),
29430
- version: external_exports.string(),
29431
- /** Deterministic SHA-256 of the skill directory's file contents at
29432
- * install time. Compared to the scanner's contentHash to flag drift.
29433
- * Optional for backward compatibility with installs that pre-date
29434
- * this field. */
29435
- contentHash: external_exports.string().optional()
29436
- });
29437
- var localSkillSchema = external_exports.object({
29438
- name: external_exports.string(),
29439
- description: external_exports.string(),
29440
- skillPath: external_exports.string()
29441
- });
29442
- var skillPublishRecordSchema = external_exports.object({
29443
- skillName: external_exports.string(),
29444
- sourceId: external_exports.string(),
29445
- sourceName: external_exports.string(),
29446
- sourceGitUrl: external_exports.string(),
29447
- prUrl: external_exports.string(),
29448
- /** ISO 8601 timestamp. */
29449
- publishedAt: external_exports.string()
29450
- });
29451
- var skillStateOutputSchema = external_exports.object({
29452
- installed: external_exports.array(skillRefSchema),
29453
- standalone: external_exports.array(localSkillSchema),
29454
- instancePublishes: external_exports.array(skillPublishRecordSchema)
29455
- });
29456
- var skillListSourcesInputSchema = external_exports.object({ agentId: external_exports.string().min(1).optional() }).optional();
29457
- var skillCreateSourceInputSchema = external_exports.object({
29458
- name: external_exports.string().min(1).max(128),
29459
- gitUrl: external_exports.string().url()
29460
- });
29461
- var skillDeleteSourceInputSchema = external_exports.object({
29462
- id: external_exports.string().min(1)
29463
- });
29464
- var skillRefreshSourceInputSchema = external_exports.object({
29465
- id: external_exports.string().min(1)
29466
- });
29467
- var skillListInputSchema = external_exports.object({
29468
- sourceId: external_exports.string().min(1),
29469
- agentId: external_exports.string().min(1).optional()
29470
- });
29471
- var skillInstallInputSchema2 = external_exports.object({
29472
- agentId: external_exports.string().min(1),
29473
- source: external_exports.string().url(),
29474
- name: external_exports.string().min(1),
29475
- version: external_exports.string().min(1),
29476
- contentHash: external_exports.string().optional()
29477
- });
29478
- var skillUninstallInputSchema2 = external_exports.object({
29479
- agentId: external_exports.string().min(1),
29480
- source: external_exports.string().url(),
29481
- name: external_exports.string().min(1)
29482
- });
29483
- var skillListLocalInputSchema = external_exports.object({
29484
- agentId: external_exports.string().min(1)
29485
- });
29486
- var skillStateInputSchema = external_exports.object({
29487
- agentId: external_exports.string().min(1)
29488
- });
29489
- var skillPublishInputSchema2 = external_exports.object({
29490
- agentId: external_exports.string().min(1),
29491
- sourceId: external_exports.string().min(1),
29492
- name: external_exports.string().min(1),
29493
- title: external_exports.string().optional(),
29494
- body: external_exports.string().optional()
29495
- });
29496
-
29497
29565
  // ../api-server-api/src/modules/approvals/schemas.ts
29498
29566
  var approvalStatusSchema = external_exports.enum(["pending", "resolved", "expired"]);
29499
29567
  var approvalListOptionsSchema = external_exports.object({
@@ -31203,35 +31271,6 @@ function promptSecret(message) {
31203
31271
  });
31204
31272
  }
31205
31273
 
31206
- // src/modules/agent/lib/group-github-pats.ts
31207
- var API_HOST = "api.github.com";
31208
- var GIT_HOST = "github.com";
31209
- function groupGithubPats(secrets) {
31210
- const byName2 = /* @__PURE__ */ new Map();
31211
- for (const s of secrets) {
31212
- const slot = s.hostPattern === API_HOST ? "api" : s.hostPattern === GIT_HOST ? "git" : null;
31213
- if (!slot) continue;
31214
- let group = byName2.get(s.name);
31215
- if (!group) {
31216
- group = { api: [], git: [] };
31217
- byName2.set(s.name, group);
31218
- }
31219
- group[slot].push(s.id);
31220
- }
31221
- const pairs = [];
31222
- for (const [name, group] of byName2) {
31223
- if (group.api.length === 1 && group.git.length === 1) {
31224
- pairs.push({
31225
- name,
31226
- apiSecretId: group.api[0],
31227
- gitSecretId: group.git[0]
31228
- });
31229
- }
31230
- }
31231
- pairs.sort((a, b2) => a.name.localeCompare(b2.name));
31232
- return pairs;
31233
- }
31234
-
31235
31274
  // src/modules/connection/services/connection-service.ts
31236
31275
  function createConnectionService(deps) {
31237
31276
  const readIds = async (agentId) => {
@@ -31485,34 +31524,14 @@ hint: run \`dam auth login\` first`
31485
31524
  process.exit(EXIT_RUNTIME_FAILURE);
31486
31525
  }
31487
31526
  spin.message("Granting credentials...");
31488
- const connectionIds = [];
31489
- const secretIds = [];
31490
- if (provider.routing.kind === "connection") {
31491
- connectionIds.push(provider.routing.id);
31492
- } else {
31493
- secretIds.push(provider.routing.id);
31494
- }
31495
- if (githubPat) {
31496
- if (githubPat.source === "connection") {
31497
- connectionIds.push(githubPat.connectionId);
31498
- } else {
31499
- secretIds.push(githubPat.apiSecretId, githubPat.gitSecretId);
31500
- }
31501
- }
31527
+ const connectionIds = [provider.routing.id];
31528
+ if (githubPat) connectionIds.push(githubPat.connectionId);
31502
31529
  try {
31503
31530
  await withRetry(async () => {
31504
- if (connectionIds.length > 0) {
31505
- await trpc.connections.setAgentConnections.mutate({
31506
- agentId: cleanup.agentId,
31507
- connectionIds
31508
- });
31509
- }
31510
- if (secretIds.length > 0) {
31511
- await trpc.secrets.setAgentAccess.mutate({
31512
- agentId: cleanup.agentId,
31513
- secretIds
31514
- });
31515
- }
31531
+ await trpc.connections.setAgentConnections.mutate({
31532
+ agentId: cleanup.agentId,
31533
+ connectionIds
31534
+ });
31516
31535
  });
31517
31536
  } catch (e2) {
31518
31537
  spin.stop("Grant failed");
@@ -31619,7 +31638,6 @@ async function listCredentials(trpc, cleanup) {
31619
31638
  try {
31620
31639
  return {
31621
31640
  conns: await trpc.connections.list.query(),
31622
- secrets: await trpc.secrets.list.query(),
31623
31641
  templates: await trpc.connections.listTemplates.query()
31624
31642
  };
31625
31643
  } catch (e2) {
@@ -31629,12 +31647,9 @@ async function listCredentials(trpc, cleanup) {
31629
31647
  }
31630
31648
  }
31631
31649
  async function pickProvider(trpc, cleanup) {
31632
- const { conns, secrets, templates } = await listCredentials(trpc, cleanup);
31650
+ const { conns, templates } = await listCredentials(trpc, cleanup);
31633
31651
  const existingConns = providerConns(conns);
31634
- const existingSecrets = secrets.filter(
31635
- (s) => isProviderPresetType(s.type)
31636
- ).map((s) => ({ id: s.id, name: s.name, type: s.type }));
31637
- if (existingConns.length === 0 && existingSecrets.length === 0) {
31652
+ if (existingConns.length === 0) {
31638
31653
  R2.info("No model providers configured yet \u2014 let's add one.");
31639
31654
  return addOrReplaceProvider(trpc, cleanup, existingConns, templates);
31640
31655
  }
@@ -31646,10 +31661,6 @@ async function pickProvider(trpc, cleanup) {
31646
31661
  value: `conn:${c2.id}`,
31647
31662
  label: `${c2.name} (${c2.type})`
31648
31663
  })),
31649
- ...existingSecrets.map((s) => ({
31650
- value: `secret:${s.id}`,
31651
- label: `${s.name} (${s.type}) (legacy)`
31652
- })),
31653
31664
  { value: NEW, label: "Add new..." }
31654
31665
  ]
31655
31666
  });
@@ -31657,17 +31668,9 @@ async function pickProvider(trpc, cleanup) {
31657
31668
  if (picked === NEW) {
31658
31669
  return addOrReplaceProvider(trpc, cleanup, existingConns, templates);
31659
31670
  }
31660
- if (picked.startsWith("conn:")) {
31661
- const found2 = existingConns.find((c2) => `conn:${c2.id}` === picked);
31662
- return {
31663
- routing: { kind: "connection", id: found2.id },
31664
- name: found2.name,
31665
- type: found2.type
31666
- };
31667
- }
31668
- const found = existingSecrets.find((s) => `secret:${s.id}` === picked);
31671
+ const found = existingConns.find((c2) => `conn:${c2.id}` === picked);
31669
31672
  return {
31670
- routing: { kind: "secret", id: found.id },
31673
+ routing: { id: found.id },
31671
31674
  name: found.name,
31672
31675
  type: found.type
31673
31676
  };
@@ -31697,7 +31700,7 @@ async function addOrReplaceProvider(trpc, cleanup, existingConns, templates) {
31697
31700
  if (q(replace)) return cancelAndCleanup(trpc, cleanup);
31698
31701
  if (!replace) {
31699
31702
  return {
31700
- routing: { kind: "connection", id: existingOfType.id },
31703
+ routing: { id: existingOfType.id },
31701
31704
  name: existingOfType.name,
31702
31705
  type
31703
31706
  };
@@ -31721,7 +31724,7 @@ async function addOrReplaceProvider(trpc, cleanup, existingConns, templates) {
31721
31724
  value: value2
31722
31725
  });
31723
31726
  return {
31724
- routing: { kind: "connection", id: existingOfType.id },
31727
+ routing: { id: existingOfType.id },
31725
31728
  name: existingOfType.name,
31726
31729
  type
31727
31730
  };
@@ -31823,17 +31826,16 @@ async function createProviderConnection(trpc, cleanup, type, templateId, value,
31823
31826
  });
31824
31827
  if (!created) return null;
31825
31828
  return {
31826
- routing: { kind: "connection", id: created.id },
31829
+ routing: { id: created.id },
31827
31830
  name: created.name,
31828
31831
  type
31829
31832
  };
31830
31833
  }
31831
31834
  var DEFAULT_GITHUB_PAT_NAME = GITHUB_PAT_TEMPLATE_ID;
31832
31835
  async function pickGithubPat(trpc, cleanup) {
31833
- const { conns, secrets } = await listCredentials(trpc, cleanup);
31836
+ const { conns } = await listCredentials(trpc, cleanup);
31834
31837
  const patConns = conns.filter((c2) => c2.templateId === GITHUB_PAT_TEMPLATE_ID);
31835
- const pairs = groupGithubPats(secrets);
31836
- if (patConns.length === 0 && pairs.length === 0) {
31838
+ if (patConns.length === 0) {
31837
31839
  R2.info("No GitHub PAT configured yet.");
31838
31840
  const add = await ue({ message: "Add one?", initialValue: true });
31839
31841
  if (q(add)) return cancelAndCleanup(trpc, cleanup);
@@ -31846,10 +31848,6 @@ async function pickGithubPat(trpc, cleanup) {
31846
31848
  message: "GitHub PAT",
31847
31849
  options: [
31848
31850
  ...patConns.map((c2) => ({ value: `conn:${c2.id}`, label: c2.name })),
31849
- ...pairs.map((p2) => ({
31850
- value: `secret:${p2.name}`,
31851
- label: `${p2.name} (legacy)`
31852
- })),
31853
31851
  { value: NEW, label: "Add new..." },
31854
31852
  { value: SKIP, label: "Skip" }
31855
31853
  ]
@@ -31857,17 +31855,8 @@ async function pickGithubPat(trpc, cleanup) {
31857
31855
  if (q(picked)) return cancelAndCleanup(trpc, cleanup);
31858
31856
  if (picked === SKIP) return null;
31859
31857
  if (picked === NEW) return addOrReplaceGithubPat(trpc, cleanup, patConns);
31860
- if (picked.startsWith("conn:")) {
31861
- const found2 = patConns.find((c2) => `conn:${c2.id}` === picked);
31862
- return { source: "connection", connectionId: found2.id, name: found2.name };
31863
- }
31864
- const found = pairs.find((p2) => `secret:${p2.name}` === picked);
31865
- return {
31866
- source: "secret",
31867
- apiSecretId: found.apiSecretId,
31868
- gitSecretId: found.gitSecretId,
31869
- name: found.name
31870
- };
31858
+ const found = patConns.find((c2) => `conn:${c2.id}` === picked);
31859
+ return { connectionId: found.id, name: found.name };
31871
31860
  }
31872
31861
  async function addOrReplaceGithubPat(trpc, cleanup, existing) {
31873
31862
  const collide = existing.find((c2) => c2.name === DEFAULT_GITHUB_PAT_NAME);
@@ -31879,21 +31868,13 @@ async function addOrReplaceGithubPat(trpc, cleanup, existing) {
31879
31868
  });
31880
31869
  if (q(replace)) return cancelAndCleanup(trpc, cleanup);
31881
31870
  if (!replace) {
31882
- return {
31883
- source: "connection",
31884
- connectionId: collide.id,
31885
- name: collide.name
31886
- };
31871
+ return { connectionId: collide.id, name: collide.name };
31887
31872
  }
31888
31873
  const token2 = await promptSecret("New GitHub personal access token");
31889
31874
  if (q(token2)) return cancelAndCleanup(trpc, cleanup);
31890
31875
  try {
31891
31876
  await trpc.connections.update.mutate({ id: collide.id, value: token2 });
31892
- return {
31893
- source: "connection",
31894
- connectionId: collide.id,
31895
- name: collide.name
31896
- };
31877
+ return { connectionId: collide.id, name: collide.name };
31897
31878
  } catch (e2) {
31898
31879
  R2.error(`Failed to replace GitHub PAT: ${errorReason2(e2)}`);
31899
31880
  continue;
@@ -31908,11 +31889,7 @@ async function addOrReplaceGithubPat(trpc, cleanup, existing) {
31908
31889
  nameExample: "my-github"
31909
31890
  });
31910
31891
  if (created) {
31911
- return {
31912
- source: "connection",
31913
- connectionId: created.id,
31914
- name: created.name
31915
- };
31892
+ return { connectionId: created.id, name: created.name };
31916
31893
  }
31917
31894
  }
31918
31895
  }
@@ -38190,6 +38167,7 @@ function toSessionView(agentId, s) {
38190
38167
  mode: p2 ? p2.mode ?? "chat" /* Chat */ : "terminal" /* Terminal */,
38191
38168
  createdAt: p2?.createdAt ?? s.updatedAt ?? (/* @__PURE__ */ new Date(0)).toISOString(),
38192
38169
  scheduleId: p2?.scheduleId ?? null,
38170
+ experimentId: p2?.experimentId ?? null,
38193
38171
  title: s.title ?? null,
38194
38172
  updatedAt: s.updatedAt ?? null
38195
38173
  };
@@ -38812,7 +38790,7 @@ function createProcessEnvReader() {
38812
38790
 
38813
38791
  // src/modules/cli/infrastructure/package-version.ts
38814
38792
  function readPackageVersion() {
38815
- return true ? "0.2.5-rc1" : DEV_VERSION;
38793
+ return true ? "0.2.6-rc1" : DEV_VERSION;
38816
38794
  }
38817
38795
 
38818
38796
  // src/modules/cli/infrastructure/version-probe.ts
@@ -42357,11 +42335,14 @@ function deriveSourceName(gitUrl) {
42357
42335
  // src/modules/skill/commands/source-add.ts
42358
42336
  function buildSourceAddCommand(deps) {
42359
42337
  return new Command("add").description("Register a skill source from a git URL").argument("<git-url>", "git URL of the skill source repository").option("--name <name>", "source name (default: derived from the git URL)").option(
42338
+ "--path <path>",
42339
+ "optional subdirectory within the repository to scan for skills"
42340
+ ).option(
42360
42341
  "--server <url>",
42361
42342
  "override the configured server URL for this call"
42362
42343
  ).option("--json", "emit the created SkillSource as JSON").addHelpText(
42363
42344
  "after",
42364
- "\nThe name defaults to the URL path (github.com/acme/skills \u2192 acme/skills);\npass --name to override. Adding a URL that a Platform or Agent source already\nuses shadows it \u2014 removing your source re-exposes the original.\n\nExamples:\n dam skill source add https://github.com/anthropics/skills\n dam skill source add https://github.com/acme/skills --name acme\n"
42345
+ "\nThe name defaults to the URL path (github.com/acme/skills \u2192 acme/skills);\npass --name to override. Adding a URL that a Platform or Agent source already\nuses shadows it \u2014 removing your source re-exposes the original.\n\nExamples:\n dam skill source add https://github.com/anthropics/skills\n dam skill source add https://github.com/acme/skills --name acme\n dam skill source add https://github.com/acme/monorepo --path .claude/skills\n"
42365
42346
  ).action(
42366
42347
  async (gitUrl, opts) => {
42367
42348
  const json2 = opts.json ?? false;
@@ -42380,6 +42361,19 @@ function buildSourceAddCommand(deps) {
42380
42361
  `);
42381
42362
  process.exit(EXIT_INVALID_INPUT);
42382
42363
  }
42364
+ let path2;
42365
+ if (opts.path !== void 0) {
42366
+ const pathCheck = skillCreateSourceInputSchema.shape.path.safeParse(
42367
+ opts.path
42368
+ );
42369
+ if (!pathCheck.success) {
42370
+ const msg = pathCheck.error.issues[0]?.message ?? "invalid path";
42371
+ process.stderr.write(`error: ${msg}
42372
+ `);
42373
+ process.exit(EXIT_INVALID_INPUT);
42374
+ }
42375
+ path2 = pathCheck.data || void 0;
42376
+ }
42383
42377
  const host = await resolveActiveHost(deps, {
42384
42378
  flag: opts.server ? { server: opts.server } : void 0,
42385
42379
  exitCodes: {
@@ -42387,7 +42381,7 @@ function buildSourceAddCommand(deps) {
42387
42381
  belowFloor: EXIT_BELOW_FLOOR
42388
42382
  }
42389
42383
  });
42390
- const result = await deps.createSkillsService(host).addSource({ name, gitUrl });
42384
+ const result = await deps.createSkillsService(host).addSource({ name, gitUrl, path: path2 });
42391
42385
  if (!result.ok) {
42392
42386
  if (result.error.kind === "source-exists") {
42393
42387
  process.stderr.write(
@@ -42434,12 +42428,12 @@ async function resolveName(gitUrl, flag, json2) {
42434
42428
  }
42435
42429
 
42436
42430
  // src/modules/skill/commands/source-list.ts
42437
- var HEADER3 = ["ID", "NAME", "GIT URL", "KIND"];
42431
+ var HEADER3 = ["ID", "NAME", "GIT URL", "PATH", "KIND"];
42438
42432
  function tableFor3(sources) {
42439
42433
  const sorted = [...sources].sort((a, b2) => a.name.localeCompare(b2.name));
42440
42434
  return renderTable([
42441
42435
  HEADER3,
42442
- ...sorted.map((s) => [s.id, s.name, s.gitUrl, sourceKind(s)])
42436
+ ...sorted.map((s) => [s.id, s.name, s.gitUrl, s.path ?? "", sourceKind(s)])
42443
42437
  ]);
42444
42438
  }
42445
42439
  function buildSourceListCommand(deps) {