hivenet 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -40,6 +40,54 @@ declare const attachmentSchema$1: z.ZodObject<{
40
40
  description: z.ZodOptional<z.ZodString>;
41
41
  }, z.core.$strip>;
42
42
  type Attachment$1 = z.infer<typeof attachmentSchema$1>;
43
+ /** One Harbor trial, as `hivenet eval push` reads it from a job directory. */
44
+ declare const evalTrialUploadSchema: z.ZodObject<{
45
+ harbor_trial_id: z.ZodString;
46
+ harbor_job_id: z.ZodString;
47
+ harbor_job_name: z.ZodOptional<z.ZodString>;
48
+ source_harbor_trial_id: z.ZodOptional<z.ZodString>;
49
+ task_name: z.ZodString;
50
+ task_digest: z.ZodString;
51
+ agent: z.ZodString;
52
+ agent_version: z.ZodOptional<z.ZodString>;
53
+ model: z.ZodOptional<z.ZodString>;
54
+ effort: z.ZodOptional<z.ZodString>;
55
+ harbor_version: z.ZodOptional<z.ZodString>;
56
+ exception: z.ZodOptional<z.ZodObject<{
57
+ type: z.ZodString;
58
+ message: z.ZodString;
59
+ }, z.core.$strip>>;
60
+ rewards: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
61
+ criteria: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
62
+ metrics: z.ZodOptional<z.ZodObject<{
63
+ input_tokens: z.ZodOptional<z.ZodNumber>;
64
+ output_tokens: z.ZodOptional<z.ZodNumber>;
65
+ cache_tokens: z.ZodOptional<z.ZodNumber>;
66
+ cost_usd: z.ZodOptional<z.ZodNumber>;
67
+ setup_sec: z.ZodOptional<z.ZodNumber>;
68
+ agent_sec: z.ZodOptional<z.ZodNumber>;
69
+ verifier_sec: z.ZodOptional<z.ZodNumber>;
70
+ }, z.core.$strip>>;
71
+ started_at: z.ZodOptional<z.ZodISODateTime>;
72
+ finished_at: z.ZodOptional<z.ZodISODateTime>;
73
+ scenario: z.ZodOptional<z.ZodObject<{
74
+ mounts: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
+ skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
76
+ mcp_servers: z.ZodOptional<z.ZodArray<z.ZodString>>;
77
+ instructions: z.ZodOptional<z.ZodArray<z.ZodString>>;
78
+ agent_options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
79
+ }, z.core.$strip>>;
80
+ ci: z.ZodOptional<z.ZodObject<{
81
+ provider: z.ZodLiteral<"github">;
82
+ repository: z.ZodString;
83
+ commit: z.ZodOptional<z.ZodString>;
84
+ branch: z.ZodOptional<z.ZodString>;
85
+ pull_request: z.ZodOptional<z.ZodNumber>;
86
+ event: z.ZodOptional<z.ZodString>;
87
+ run_url: z.ZodOptional<z.ZodURL>;
88
+ }, z.core.$strip>>;
89
+ }, z.core.$strip>;
90
+ type EvalTrialUpload = z.infer<typeof evalTrialUploadSchema>;
43
91
  /** Triage lifecycle of a single feedback event (owner plane). */
44
92
  declare const EVENT_STATUSES: readonly ["new", "seen", "in_progress", "resolved", "wont_fix", "spam"];
45
93
  type EventStatus = (typeof EVENT_STATUSES)[number];
@@ -121,8 +169,15 @@ type FeedbackContext$1 = z.infer<typeof feedbackContextSchema$1>;
121
169
  */
122
170
  declare const metadataSchema$1: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
123
171
  type FeedbackMetadata$1 = z.infer<typeof metadataSchema$1>;
172
+ /**
173
+ * A report. Only `feedback` (and `to`, unless a write key names the project) is
174
+ * required: an agent with nothing but an HTTP client can POST
175
+ * {"to":"acme","feedback":"…"}. The rest get defaults: the protocol version, a
176
+ * new thread (echoed in the response, so the agent can continue it), an
177
+ * anonymous client, and no telemetry consent.
178
+ */
124
179
  declare const feedbackEventSchema$1: z.ZodObject<{
125
- v: z.ZodLiteral<1>;
180
+ v: z.ZodDefault<z.ZodLiteral<1>>;
126
181
  to: z.ZodOptional<z.ZodString>;
127
182
  feedback: z.ZodString;
128
183
  category: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
@@ -150,9 +205,13 @@ declare const feedbackEventSchema$1: z.ZodObject<{
150
205
  human: "human";
151
206
  hybrid: "hybrid";
152
207
  }>>;
153
- thread: z.ZodObject<{
208
+ thread: z.ZodPipe<z.ZodOptional<z.ZodObject<{
154
209
  id: z.ZodString;
155
- }, z.core.$strip>;
210
+ }, z.core.$strip>>, z.ZodTransform<{
211
+ id: string;
212
+ }, {
213
+ id: string;
214
+ } | undefined>>;
156
215
  eval: z.ZodOptional<z.ZodObject<{
157
216
  task: z.ZodString;
158
217
  expected: z.ZodOptional<z.ZodString>;
@@ -195,13 +254,13 @@ declare const feedbackEventSchema$1: z.ZodObject<{
195
254
  }, z.core.$strip>>;
196
255
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
197
256
  idempotencyKey: z.ZodOptional<z.ZodString>;
198
- client: z.ZodObject<{
257
+ client: z.ZodDefault<z.ZodObject<{
199
258
  name: z.ZodString;
200
259
  version: z.ZodString;
201
- }, z.core.$strip>;
202
- consent: z.ZodObject<{
260
+ }, z.core.$strip>>;
261
+ consent: z.ZodDefault<z.ZodObject<{
203
262
  telemetry: z.ZodBoolean;
204
- }, z.core.$strip>;
263
+ }, z.core.$strip>>;
205
264
  }, z.core.$strip>;
206
265
  type FeedbackEvent$1 = z.infer<typeof feedbackEventSchema$1>;
207
266
  /** The existing owner SDK's issue projection; distinct from reporter-visible KnownIssue. */
@@ -375,6 +434,8 @@ type FetchLike = typeof fetch;
375
434
  type ResolveDestinationOptions = {
376
435
  to?: string;
377
436
  dsn?: string;
437
+ /** Explicit registry origin; with a slug, pins this destination ahead of local settings. */
438
+ registry?: string;
378
439
  cwd?: string;
379
440
  env?: EnvLike;
380
441
  fetchImpl?: FetchLike;
@@ -394,7 +455,7 @@ declare function findConfigFile(startDir: string): {
394
455
  declare function registryUrl(env?: EnvLike): string;
395
456
  /**
396
457
  * Resolve where feedback goes. Priority:
397
- * explicit DSN → HIVENET_DSN → nearest feedback.config.json →
458
+ * explicit DSN → explicit registry + slug → HIVENET_DSN → nearest feedback.config.json →
398
459
  * --to slug (hosted registry) / --to domain (.well-known).
399
460
  */
400
461
  declare function resolveDestination(options?: ResolveDestinationOptions): Promise<Destination>;
@@ -406,8 +467,7 @@ type OutboxEntry = {
406
467
  queuedAt: string;
407
468
  };
408
469
  declare function outboxPath(env?: EnvLike): string;
409
- /** Queue an event that could not be delivered. Never throws — losing feedback is
410
- * acceptable, breaking the host process is not. */
470
+ /** Queue an event that could not be delivered without throwing into the host. */
411
471
  declare function appendToOutbox(entry: OutboxEntry, env?: EnvLike): boolean;
412
472
  type FlushResult = {
413
473
  delivered: number;
@@ -418,6 +478,8 @@ declare function flushOutbox(options?: {
418
478
  env?: EnvLike;
419
479
  fetchImpl?: typeof fetch;
420
480
  timeoutMs?: number;
481
+ /** Total request budget; reading and requeueing reports happen outside it. */
482
+ maxDurationMs?: number;
421
483
  }): Promise<FlushResult>;
422
484
 
423
485
  type OwnerEvent = {
@@ -487,6 +549,51 @@ type OwnerEval = {
487
549
  } | null;
488
550
  /** Active setup_request question id when reproduction state is still missing. */
489
551
  setup_pending: string | null;
552
+ /** The approved version `hivenet eval pull` serves. */
553
+ current_version: OwnerEvalVersionSummary | null;
554
+ /** The newest version, draft or approved. */
555
+ latest_version: OwnerEvalVersionSummary | null;
556
+ /** Results of the current version, else of the newest. */
557
+ results: OwnerEvalResults | null;
558
+ };
559
+ type OwnerEvalVersionSummary = {
560
+ id: string;
561
+ number: number;
562
+ status: 'draft' | 'approved';
563
+ digest: string;
564
+ created_at: string;
565
+ };
566
+ /** The fields the CLI shows; the server sends more (per-agent results, control counts). */
567
+ type OwnerEvalResults = {
568
+ graded: number;
569
+ passed: number;
570
+ errored: number;
571
+ validation: {
572
+ status: 'validated' | 'broken' | 'unvalidated';
573
+ };
574
+ };
575
+ /** A compiled Harbor task, as `hivenet eval pull` writes it. */
576
+ type OwnerEvalTask = {
577
+ eval_id: string;
578
+ title: string;
579
+ version: OwnerEvalVersionSummary;
580
+ files: Record<string, string>;
581
+ };
582
+ type OwnerTrialPushSummary = {
583
+ stored: number;
584
+ duplicates: number;
585
+ skipped: {
586
+ harbor_trial_id: string;
587
+ task_name: string;
588
+ reason: string;
589
+ }[];
590
+ /** Harbor trial ids whose trajectories Hivenet doesn't have yet. */
591
+ trajectories: string[];
592
+ /** Each run's page in the dashboard. */
593
+ runs: {
594
+ job_id: string;
595
+ url: string;
596
+ }[];
490
597
  };
491
598
  type OwnerFilters = {
492
599
  status?: EventStatus;
@@ -503,10 +610,16 @@ type OwnerApiOptions = {
503
610
  fetchImpl?: typeof fetch;
504
611
  timeoutMs?: number;
505
612
  };
506
- /** Derive the owner API origin from a slug/domain/DSN (same host as the ingest endpoint). */
613
+ /**
614
+ * Derive the owner API origin from a slug/domain/DSN (same host as the ingest endpoint).
615
+ * Resolves like reporting — --dsn, then HIVENET_DSN, then --to — and only falls back to
616
+ * the hosted API when nothing points elsewhere, so an owner agent aimed at another server
617
+ * never reaches production.
618
+ */
507
619
  declare function resolveApiOrigin(options: {
508
620
  to?: string;
509
621
  dsn?: string;
622
+ registry?: string;
510
623
  env?: EnvLike;
511
624
  fetchImpl?: typeof fetch;
512
625
  }): Promise<string>;
@@ -586,6 +699,25 @@ declare function ownerApi(options: OwnerApiOptions): {
586
699
  setEvalStatus(id: string, status: EvalStatus, note?: string): Promise<{
587
700
  eval: OwnerEval;
588
701
  }>;
702
+ /** Draft a runnable version of an eval (a person approves it in the dashboard). */
703
+ draftEvalVersion(id: string, fields: Record<string, unknown>): Promise<{
704
+ version: OwnerEvalVersionSummary & {
705
+ warnings: string[];
706
+ };
707
+ created: boolean;
708
+ }>;
709
+ /** Compiled Harbor tasks: every accepted eval's current version, or the given refs. */
710
+ pullEvalTasks(refs?: string[]): Promise<{
711
+ tasks: OwnerEvalTask[];
712
+ missing: string[];
713
+ }>;
714
+ /** Harbor trials read from a job directory, with their grades. */
715
+ pushEvalResults(trials: EvalTrialUpload[]): Promise<OwnerTrialPushSummary>;
716
+ /** A stored trial's ATIF trajectory (`agent/trajectory.json`), as read from disk. */
717
+ pushTrialTrajectory(harborTrialId: string, trajectory: string): Promise<{
718
+ stored: boolean;
719
+ steps: number;
720
+ }>;
589
721
  /** Attach an external link (Slack message, Linear/GitHub issue, PR) to evt_… or iss_…. */
590
722
  addLink(id: string, url: string, label?: string): Promise<{
591
723
  event?: OwnerEvent;
@@ -604,6 +736,7 @@ type SendFeedbackOptions = {
604
736
  feedback: string;
605
737
  to?: string;
606
738
  dsn?: string;
739
+ registry?: string;
607
740
  category?: string;
608
741
  subject?: string;
609
742
  sentiment?: Sentiment$1;
@@ -660,9 +793,11 @@ type SendFeedbackResult = {
660
793
  /**
661
794
  * Build, enrich, validate, and deliver one feedback event.
662
795
  *
663
- * Throws FeedbackError only for caller-fixable problems (no destination, invalid
664
- * input, a file the server rejects). Network failures never throw: the event is
665
- * queued to the outbox and `{ delivered: false, queued: true }` is returned.
796
+ * Throws FeedbackError for caller-fixable problems (no destination, invalid
797
+ * input, a file the server rejects), and when a slug or domain can't be looked
798
+ * up and was never cached. Once the destination is known, network failures
799
+ * never throw: the event is queued to the outbox and
800
+ * `{ delivered: false, queued: true }` is returned.
666
801
  * Selected files upload first; if they can't be (network, server busy, a server
667
802
  * without file storage), the report still goes — or is queued — without them, and
668
803
  * `filesNotAttached` says so.
@@ -687,8 +822,8 @@ type PostEventResult = {
687
822
  kind: 'unreachable';
688
823
  error: string;
689
824
  };
690
- /** One POST, bounded by timeout. 4xx = rejected (do not retry); network/5xx, 408 and 429 =
691
- * unreachable (outbox-eligible). */
825
+ /** One POST, bounded by timeout. 4xx = rejected; network/5xx, 408, 429 and invalid
826
+ * receipts = unreachable (outbox-eligible). */
692
827
  declare function postEvent(options: PostEventOptions): Promise<PostEventResult>;
693
828
 
694
829
  declare const MAX_ATTACHMENT_BYTES: number;
@@ -865,8 +1000,19 @@ type FeedbackContext = z.infer<typeof feedbackContextSchema>;
865
1000
  */
866
1001
  declare const metadataSchema: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
867
1002
  type FeedbackMetadata = z.infer<typeof metadataSchema>;
1003
+ /** A thread: reports that share one form a feedback session and join one issue. */
1004
+ declare const threadSchema: z.ZodObject<{
1005
+ id: z.ZodString;
1006
+ }, z.core.$strip>;
1007
+ /**
1008
+ * A report. Only `feedback` (and `to`, unless a write key names the project) is
1009
+ * required: an agent with nothing but an HTTP client can POST
1010
+ * {"to":"acme","feedback":"…"}. The rest get defaults: the protocol version, a
1011
+ * new thread (echoed in the response, so the agent can continue it), an
1012
+ * anonymous client, and no telemetry consent.
1013
+ */
868
1014
  declare const feedbackEventSchema: z.ZodObject<{
869
- v: z.ZodLiteral<1>;
1015
+ v: z.ZodDefault<z.ZodLiteral<1>>;
870
1016
  to: z.ZodOptional<z.ZodString>;
871
1017
  feedback: z.ZodString;
872
1018
  category: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
@@ -894,9 +1040,13 @@ declare const feedbackEventSchema: z.ZodObject<{
894
1040
  human: "human";
895
1041
  hybrid: "hybrid";
896
1042
  }>>;
897
- thread: z.ZodObject<{
1043
+ thread: z.ZodPipe<z.ZodOptional<z.ZodObject<{
898
1044
  id: z.ZodString;
899
- }, z.core.$strip>;
1045
+ }, z.core.$strip>>, z.ZodTransform<{
1046
+ id: string;
1047
+ }, {
1048
+ id: string;
1049
+ } | undefined>>;
900
1050
  eval: z.ZodOptional<z.ZodObject<{
901
1051
  task: z.ZodString;
902
1052
  expected: z.ZodOptional<z.ZodString>;
@@ -939,13 +1089,13 @@ declare const feedbackEventSchema: z.ZodObject<{
939
1089
  }, z.core.$strip>>;
940
1090
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
941
1091
  idempotencyKey: z.ZodOptional<z.ZodString>;
942
- client: z.ZodObject<{
1092
+ client: z.ZodDefault<z.ZodObject<{
943
1093
  name: z.ZodString;
944
1094
  version: z.ZodString;
945
- }, z.core.$strip>;
946
- consent: z.ZodObject<{
1095
+ }, z.core.$strip>>;
1096
+ consent: z.ZodDefault<z.ZodObject<{
947
1097
  telemetry: z.ZodBoolean;
948
- }, z.core.$strip>;
1098
+ }, z.core.$strip>>;
949
1099
  }, z.core.$strip>;
950
1100
  type FeedbackEvent = z.infer<typeof feedbackEventSchema>;
951
1101
  type FeedbackEventInput = z.input<typeof feedbackEventSchema>;
@@ -1050,4 +1200,4 @@ declare function validateIngestResponse(input: unknown): ValidationResult<Ingest
1050
1200
  declare function feedbackEventJsonSchema(): Record<string, unknown>;
1051
1201
  declare function descriptorJsonSchema(): Record<string, unknown>;
1052
1202
 
1053
- export { type Attachment, type AttachmentTarget, CONFIG_FILE_NAME, type CollectContextOptions, DEFAULT_INGEST_PATH, DEFAULT_REGISTRY_URL, DSN_ENV_VAR, type DeliveredAttachment, type Descriptor, type Destination, EVENT_STATUSES, type EnvLike, type EvalReport, type EventStatus, FEEDBACK_CATEGORIES, type FeedbackAuthor, type FeedbackCategory, type FeedbackConfig, type FeedbackContext, FeedbackError, type FeedbackEvent, type FeedbackEventInput, type FeedbackMetadata, type FilesNotAttached, type FlushResult, HOME_ENV_VAR, ISSUE_STATUSES, type IngestResponse, type IssueStatus, type LocalAttachmentInput, MAX_ATTACHMENTS, MAX_ATTACHMENT_BYTES, MAX_FEEDBACK_LENGTH, MAX_GUIDANCE_LENGTH, MAX_SUBJECT_LENGTH, NO_TELEMETRY_ENV_VAR, type OutboxEntry, type OwnerApi, type OwnerApiOptions, type OwnerEvent, type OwnerFilters, type OwnerIssue, PROTOCOL_VERSION, type PostEventOptions, type PostEventResult, REGISTRY_ENV_VAR, type RepoEntry, type ResolveDestinationOptions, type SendFeedbackOptions, type SendFeedbackResult, type Sentiment, type SessionSource, THREAD_ID_PATTERN, type ValidationResult, WELL_KNOWN_PATH, WRITE_KEY_HEADER, WRITE_KEY_PATTERN, appendToOutbox, authorSchema, categorySchema, collectContext, descriptorJsonSchema, descriptorSchema, evalReportSchema, feedbackContextSchema, feedbackEventJsonSchema, feedbackEventSchema, feedbackHomeDir, findConfigFile, flushOutbox, generateThreadId, inferAuthor, ingestResponseSchema, isTelemetryDisabled, metadataSchema, outboxPath, ownerApi, parseDsn, postEvent, registryUrl, repoEntrySchema, repoListSchema, resolveApiOrigin, resolveDestination, resolveThreadId, sendFeedback, sentimentSchema, validateDescriptor, validateFeedbackEvent, validateIngestResponse };
1203
+ export { type Attachment, type AttachmentTarget, CONFIG_FILE_NAME, type CollectContextOptions, DEFAULT_INGEST_PATH, DEFAULT_REGISTRY_URL, DSN_ENV_VAR, type DeliveredAttachment, type Descriptor, type Destination, EVENT_STATUSES, type EnvLike, type EvalReport, type EventStatus, FEEDBACK_CATEGORIES, type FeedbackAuthor, type FeedbackCategory, type FeedbackConfig, type FeedbackContext, FeedbackError, type FeedbackEvent, type FeedbackEventInput, type FeedbackMetadata, type FilesNotAttached, type FlushResult, HOME_ENV_VAR, ISSUE_STATUSES, type IngestResponse, type IssueStatus, type LocalAttachmentInput, MAX_ATTACHMENTS, MAX_ATTACHMENT_BYTES, MAX_FEEDBACK_LENGTH, MAX_GUIDANCE_LENGTH, MAX_SUBJECT_LENGTH, NO_TELEMETRY_ENV_VAR, type OutboxEntry, type OwnerApi, type OwnerApiOptions, type OwnerEvent, type OwnerFilters, type OwnerIssue, PROTOCOL_VERSION, type PostEventOptions, type PostEventResult, REGISTRY_ENV_VAR, type RepoEntry, type ResolveDestinationOptions, type SendFeedbackOptions, type SendFeedbackResult, type Sentiment, type SessionSource, THREAD_ID_PATTERN, type ValidationResult, WELL_KNOWN_PATH, WRITE_KEY_HEADER, WRITE_KEY_PATTERN, appendToOutbox, authorSchema, categorySchema, collectContext, descriptorJsonSchema, descriptorSchema, evalReportSchema, feedbackContextSchema, feedbackEventJsonSchema, feedbackEventSchema, feedbackHomeDir, findConfigFile, flushOutbox, generateThreadId, inferAuthor, ingestResponseSchema, isTelemetryDisabled, metadataSchema, outboxPath, ownerApi, parseDsn, postEvent, registryUrl, repoEntrySchema, repoListSchema, resolveApiOrigin, resolveDestination, resolveThreadId, sendFeedback, sentimentSchema, threadSchema, validateDescriptor, validateFeedbackEvent, validateIngestResponse };
package/dist/index.d.ts CHANGED
@@ -40,6 +40,54 @@ declare const attachmentSchema$1: z.ZodObject<{
40
40
  description: z.ZodOptional<z.ZodString>;
41
41
  }, z.core.$strip>;
42
42
  type Attachment$1 = z.infer<typeof attachmentSchema$1>;
43
+ /** One Harbor trial, as `hivenet eval push` reads it from a job directory. */
44
+ declare const evalTrialUploadSchema: z.ZodObject<{
45
+ harbor_trial_id: z.ZodString;
46
+ harbor_job_id: z.ZodString;
47
+ harbor_job_name: z.ZodOptional<z.ZodString>;
48
+ source_harbor_trial_id: z.ZodOptional<z.ZodString>;
49
+ task_name: z.ZodString;
50
+ task_digest: z.ZodString;
51
+ agent: z.ZodString;
52
+ agent_version: z.ZodOptional<z.ZodString>;
53
+ model: z.ZodOptional<z.ZodString>;
54
+ effort: z.ZodOptional<z.ZodString>;
55
+ harbor_version: z.ZodOptional<z.ZodString>;
56
+ exception: z.ZodOptional<z.ZodObject<{
57
+ type: z.ZodString;
58
+ message: z.ZodString;
59
+ }, z.core.$strip>>;
60
+ rewards: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
61
+ criteria: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
62
+ metrics: z.ZodOptional<z.ZodObject<{
63
+ input_tokens: z.ZodOptional<z.ZodNumber>;
64
+ output_tokens: z.ZodOptional<z.ZodNumber>;
65
+ cache_tokens: z.ZodOptional<z.ZodNumber>;
66
+ cost_usd: z.ZodOptional<z.ZodNumber>;
67
+ setup_sec: z.ZodOptional<z.ZodNumber>;
68
+ agent_sec: z.ZodOptional<z.ZodNumber>;
69
+ verifier_sec: z.ZodOptional<z.ZodNumber>;
70
+ }, z.core.$strip>>;
71
+ started_at: z.ZodOptional<z.ZodISODateTime>;
72
+ finished_at: z.ZodOptional<z.ZodISODateTime>;
73
+ scenario: z.ZodOptional<z.ZodObject<{
74
+ mounts: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
+ skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
76
+ mcp_servers: z.ZodOptional<z.ZodArray<z.ZodString>>;
77
+ instructions: z.ZodOptional<z.ZodArray<z.ZodString>>;
78
+ agent_options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
79
+ }, z.core.$strip>>;
80
+ ci: z.ZodOptional<z.ZodObject<{
81
+ provider: z.ZodLiteral<"github">;
82
+ repository: z.ZodString;
83
+ commit: z.ZodOptional<z.ZodString>;
84
+ branch: z.ZodOptional<z.ZodString>;
85
+ pull_request: z.ZodOptional<z.ZodNumber>;
86
+ event: z.ZodOptional<z.ZodString>;
87
+ run_url: z.ZodOptional<z.ZodURL>;
88
+ }, z.core.$strip>>;
89
+ }, z.core.$strip>;
90
+ type EvalTrialUpload = z.infer<typeof evalTrialUploadSchema>;
43
91
  /** Triage lifecycle of a single feedback event (owner plane). */
44
92
  declare const EVENT_STATUSES: readonly ["new", "seen", "in_progress", "resolved", "wont_fix", "spam"];
45
93
  type EventStatus = (typeof EVENT_STATUSES)[number];
@@ -121,8 +169,15 @@ type FeedbackContext$1 = z.infer<typeof feedbackContextSchema$1>;
121
169
  */
122
170
  declare const metadataSchema$1: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
123
171
  type FeedbackMetadata$1 = z.infer<typeof metadataSchema$1>;
172
+ /**
173
+ * A report. Only `feedback` (and `to`, unless a write key names the project) is
174
+ * required: an agent with nothing but an HTTP client can POST
175
+ * {"to":"acme","feedback":"…"}. The rest get defaults: the protocol version, a
176
+ * new thread (echoed in the response, so the agent can continue it), an
177
+ * anonymous client, and no telemetry consent.
178
+ */
124
179
  declare const feedbackEventSchema$1: z.ZodObject<{
125
- v: z.ZodLiteral<1>;
180
+ v: z.ZodDefault<z.ZodLiteral<1>>;
126
181
  to: z.ZodOptional<z.ZodString>;
127
182
  feedback: z.ZodString;
128
183
  category: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
@@ -150,9 +205,13 @@ declare const feedbackEventSchema$1: z.ZodObject<{
150
205
  human: "human";
151
206
  hybrid: "hybrid";
152
207
  }>>;
153
- thread: z.ZodObject<{
208
+ thread: z.ZodPipe<z.ZodOptional<z.ZodObject<{
154
209
  id: z.ZodString;
155
- }, z.core.$strip>;
210
+ }, z.core.$strip>>, z.ZodTransform<{
211
+ id: string;
212
+ }, {
213
+ id: string;
214
+ } | undefined>>;
156
215
  eval: z.ZodOptional<z.ZodObject<{
157
216
  task: z.ZodString;
158
217
  expected: z.ZodOptional<z.ZodString>;
@@ -195,13 +254,13 @@ declare const feedbackEventSchema$1: z.ZodObject<{
195
254
  }, z.core.$strip>>;
196
255
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
197
256
  idempotencyKey: z.ZodOptional<z.ZodString>;
198
- client: z.ZodObject<{
257
+ client: z.ZodDefault<z.ZodObject<{
199
258
  name: z.ZodString;
200
259
  version: z.ZodString;
201
- }, z.core.$strip>;
202
- consent: z.ZodObject<{
260
+ }, z.core.$strip>>;
261
+ consent: z.ZodDefault<z.ZodObject<{
203
262
  telemetry: z.ZodBoolean;
204
- }, z.core.$strip>;
263
+ }, z.core.$strip>>;
205
264
  }, z.core.$strip>;
206
265
  type FeedbackEvent$1 = z.infer<typeof feedbackEventSchema$1>;
207
266
  /** The existing owner SDK's issue projection; distinct from reporter-visible KnownIssue. */
@@ -375,6 +434,8 @@ type FetchLike = typeof fetch;
375
434
  type ResolveDestinationOptions = {
376
435
  to?: string;
377
436
  dsn?: string;
437
+ /** Explicit registry origin; with a slug, pins this destination ahead of local settings. */
438
+ registry?: string;
378
439
  cwd?: string;
379
440
  env?: EnvLike;
380
441
  fetchImpl?: FetchLike;
@@ -394,7 +455,7 @@ declare function findConfigFile(startDir: string): {
394
455
  declare function registryUrl(env?: EnvLike): string;
395
456
  /**
396
457
  * Resolve where feedback goes. Priority:
397
- * explicit DSN → HIVENET_DSN → nearest feedback.config.json →
458
+ * explicit DSN → explicit registry + slug → HIVENET_DSN → nearest feedback.config.json →
398
459
  * --to slug (hosted registry) / --to domain (.well-known).
399
460
  */
400
461
  declare function resolveDestination(options?: ResolveDestinationOptions): Promise<Destination>;
@@ -406,8 +467,7 @@ type OutboxEntry = {
406
467
  queuedAt: string;
407
468
  };
408
469
  declare function outboxPath(env?: EnvLike): string;
409
- /** Queue an event that could not be delivered. Never throws — losing feedback is
410
- * acceptable, breaking the host process is not. */
470
+ /** Queue an event that could not be delivered without throwing into the host. */
411
471
  declare function appendToOutbox(entry: OutboxEntry, env?: EnvLike): boolean;
412
472
  type FlushResult = {
413
473
  delivered: number;
@@ -418,6 +478,8 @@ declare function flushOutbox(options?: {
418
478
  env?: EnvLike;
419
479
  fetchImpl?: typeof fetch;
420
480
  timeoutMs?: number;
481
+ /** Total request budget; reading and requeueing reports happen outside it. */
482
+ maxDurationMs?: number;
421
483
  }): Promise<FlushResult>;
422
484
 
423
485
  type OwnerEvent = {
@@ -487,6 +549,51 @@ type OwnerEval = {
487
549
  } | null;
488
550
  /** Active setup_request question id when reproduction state is still missing. */
489
551
  setup_pending: string | null;
552
+ /** The approved version `hivenet eval pull` serves. */
553
+ current_version: OwnerEvalVersionSummary | null;
554
+ /** The newest version, draft or approved. */
555
+ latest_version: OwnerEvalVersionSummary | null;
556
+ /** Results of the current version, else of the newest. */
557
+ results: OwnerEvalResults | null;
558
+ };
559
+ type OwnerEvalVersionSummary = {
560
+ id: string;
561
+ number: number;
562
+ status: 'draft' | 'approved';
563
+ digest: string;
564
+ created_at: string;
565
+ };
566
+ /** The fields the CLI shows; the server sends more (per-agent results, control counts). */
567
+ type OwnerEvalResults = {
568
+ graded: number;
569
+ passed: number;
570
+ errored: number;
571
+ validation: {
572
+ status: 'validated' | 'broken' | 'unvalidated';
573
+ };
574
+ };
575
+ /** A compiled Harbor task, as `hivenet eval pull` writes it. */
576
+ type OwnerEvalTask = {
577
+ eval_id: string;
578
+ title: string;
579
+ version: OwnerEvalVersionSummary;
580
+ files: Record<string, string>;
581
+ };
582
+ type OwnerTrialPushSummary = {
583
+ stored: number;
584
+ duplicates: number;
585
+ skipped: {
586
+ harbor_trial_id: string;
587
+ task_name: string;
588
+ reason: string;
589
+ }[];
590
+ /** Harbor trial ids whose trajectories Hivenet doesn't have yet. */
591
+ trajectories: string[];
592
+ /** Each run's page in the dashboard. */
593
+ runs: {
594
+ job_id: string;
595
+ url: string;
596
+ }[];
490
597
  };
491
598
  type OwnerFilters = {
492
599
  status?: EventStatus;
@@ -503,10 +610,16 @@ type OwnerApiOptions = {
503
610
  fetchImpl?: typeof fetch;
504
611
  timeoutMs?: number;
505
612
  };
506
- /** Derive the owner API origin from a slug/domain/DSN (same host as the ingest endpoint). */
613
+ /**
614
+ * Derive the owner API origin from a slug/domain/DSN (same host as the ingest endpoint).
615
+ * Resolves like reporting — --dsn, then HIVENET_DSN, then --to — and only falls back to
616
+ * the hosted API when nothing points elsewhere, so an owner agent aimed at another server
617
+ * never reaches production.
618
+ */
507
619
  declare function resolveApiOrigin(options: {
508
620
  to?: string;
509
621
  dsn?: string;
622
+ registry?: string;
510
623
  env?: EnvLike;
511
624
  fetchImpl?: typeof fetch;
512
625
  }): Promise<string>;
@@ -586,6 +699,25 @@ declare function ownerApi(options: OwnerApiOptions): {
586
699
  setEvalStatus(id: string, status: EvalStatus, note?: string): Promise<{
587
700
  eval: OwnerEval;
588
701
  }>;
702
+ /** Draft a runnable version of an eval (a person approves it in the dashboard). */
703
+ draftEvalVersion(id: string, fields: Record<string, unknown>): Promise<{
704
+ version: OwnerEvalVersionSummary & {
705
+ warnings: string[];
706
+ };
707
+ created: boolean;
708
+ }>;
709
+ /** Compiled Harbor tasks: every accepted eval's current version, or the given refs. */
710
+ pullEvalTasks(refs?: string[]): Promise<{
711
+ tasks: OwnerEvalTask[];
712
+ missing: string[];
713
+ }>;
714
+ /** Harbor trials read from a job directory, with their grades. */
715
+ pushEvalResults(trials: EvalTrialUpload[]): Promise<OwnerTrialPushSummary>;
716
+ /** A stored trial's ATIF trajectory (`agent/trajectory.json`), as read from disk. */
717
+ pushTrialTrajectory(harborTrialId: string, trajectory: string): Promise<{
718
+ stored: boolean;
719
+ steps: number;
720
+ }>;
589
721
  /** Attach an external link (Slack message, Linear/GitHub issue, PR) to evt_… or iss_…. */
590
722
  addLink(id: string, url: string, label?: string): Promise<{
591
723
  event?: OwnerEvent;
@@ -604,6 +736,7 @@ type SendFeedbackOptions = {
604
736
  feedback: string;
605
737
  to?: string;
606
738
  dsn?: string;
739
+ registry?: string;
607
740
  category?: string;
608
741
  subject?: string;
609
742
  sentiment?: Sentiment$1;
@@ -660,9 +793,11 @@ type SendFeedbackResult = {
660
793
  /**
661
794
  * Build, enrich, validate, and deliver one feedback event.
662
795
  *
663
- * Throws FeedbackError only for caller-fixable problems (no destination, invalid
664
- * input, a file the server rejects). Network failures never throw: the event is
665
- * queued to the outbox and `{ delivered: false, queued: true }` is returned.
796
+ * Throws FeedbackError for caller-fixable problems (no destination, invalid
797
+ * input, a file the server rejects), and when a slug or domain can't be looked
798
+ * up and was never cached. Once the destination is known, network failures
799
+ * never throw: the event is queued to the outbox and
800
+ * `{ delivered: false, queued: true }` is returned.
666
801
  * Selected files upload first; if they can't be (network, server busy, a server
667
802
  * without file storage), the report still goes — or is queued — without them, and
668
803
  * `filesNotAttached` says so.
@@ -687,8 +822,8 @@ type PostEventResult = {
687
822
  kind: 'unreachable';
688
823
  error: string;
689
824
  };
690
- /** One POST, bounded by timeout. 4xx = rejected (do not retry); network/5xx, 408 and 429 =
691
- * unreachable (outbox-eligible). */
825
+ /** One POST, bounded by timeout. 4xx = rejected; network/5xx, 408, 429 and invalid
826
+ * receipts = unreachable (outbox-eligible). */
692
827
  declare function postEvent(options: PostEventOptions): Promise<PostEventResult>;
693
828
 
694
829
  declare const MAX_ATTACHMENT_BYTES: number;
@@ -865,8 +1000,19 @@ type FeedbackContext = z.infer<typeof feedbackContextSchema>;
865
1000
  */
866
1001
  declare const metadataSchema: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
867
1002
  type FeedbackMetadata = z.infer<typeof metadataSchema>;
1003
+ /** A thread: reports that share one form a feedback session and join one issue. */
1004
+ declare const threadSchema: z.ZodObject<{
1005
+ id: z.ZodString;
1006
+ }, z.core.$strip>;
1007
+ /**
1008
+ * A report. Only `feedback` (and `to`, unless a write key names the project) is
1009
+ * required: an agent with nothing but an HTTP client can POST
1010
+ * {"to":"acme","feedback":"…"}. The rest get defaults: the protocol version, a
1011
+ * new thread (echoed in the response, so the agent can continue it), an
1012
+ * anonymous client, and no telemetry consent.
1013
+ */
868
1014
  declare const feedbackEventSchema: z.ZodObject<{
869
- v: z.ZodLiteral<1>;
1015
+ v: z.ZodDefault<z.ZodLiteral<1>>;
870
1016
  to: z.ZodOptional<z.ZodString>;
871
1017
  feedback: z.ZodString;
872
1018
  category: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
@@ -894,9 +1040,13 @@ declare const feedbackEventSchema: z.ZodObject<{
894
1040
  human: "human";
895
1041
  hybrid: "hybrid";
896
1042
  }>>;
897
- thread: z.ZodObject<{
1043
+ thread: z.ZodPipe<z.ZodOptional<z.ZodObject<{
898
1044
  id: z.ZodString;
899
- }, z.core.$strip>;
1045
+ }, z.core.$strip>>, z.ZodTransform<{
1046
+ id: string;
1047
+ }, {
1048
+ id: string;
1049
+ } | undefined>>;
900
1050
  eval: z.ZodOptional<z.ZodObject<{
901
1051
  task: z.ZodString;
902
1052
  expected: z.ZodOptional<z.ZodString>;
@@ -939,13 +1089,13 @@ declare const feedbackEventSchema: z.ZodObject<{
939
1089
  }, z.core.$strip>>;
940
1090
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
941
1091
  idempotencyKey: z.ZodOptional<z.ZodString>;
942
- client: z.ZodObject<{
1092
+ client: z.ZodDefault<z.ZodObject<{
943
1093
  name: z.ZodString;
944
1094
  version: z.ZodString;
945
- }, z.core.$strip>;
946
- consent: z.ZodObject<{
1095
+ }, z.core.$strip>>;
1096
+ consent: z.ZodDefault<z.ZodObject<{
947
1097
  telemetry: z.ZodBoolean;
948
- }, z.core.$strip>;
1098
+ }, z.core.$strip>>;
949
1099
  }, z.core.$strip>;
950
1100
  type FeedbackEvent = z.infer<typeof feedbackEventSchema>;
951
1101
  type FeedbackEventInput = z.input<typeof feedbackEventSchema>;
@@ -1050,4 +1200,4 @@ declare function validateIngestResponse(input: unknown): ValidationResult<Ingest
1050
1200
  declare function feedbackEventJsonSchema(): Record<string, unknown>;
1051
1201
  declare function descriptorJsonSchema(): Record<string, unknown>;
1052
1202
 
1053
- export { type Attachment, type AttachmentTarget, CONFIG_FILE_NAME, type CollectContextOptions, DEFAULT_INGEST_PATH, DEFAULT_REGISTRY_URL, DSN_ENV_VAR, type DeliveredAttachment, type Descriptor, type Destination, EVENT_STATUSES, type EnvLike, type EvalReport, type EventStatus, FEEDBACK_CATEGORIES, type FeedbackAuthor, type FeedbackCategory, type FeedbackConfig, type FeedbackContext, FeedbackError, type FeedbackEvent, type FeedbackEventInput, type FeedbackMetadata, type FilesNotAttached, type FlushResult, HOME_ENV_VAR, ISSUE_STATUSES, type IngestResponse, type IssueStatus, type LocalAttachmentInput, MAX_ATTACHMENTS, MAX_ATTACHMENT_BYTES, MAX_FEEDBACK_LENGTH, MAX_GUIDANCE_LENGTH, MAX_SUBJECT_LENGTH, NO_TELEMETRY_ENV_VAR, type OutboxEntry, type OwnerApi, type OwnerApiOptions, type OwnerEvent, type OwnerFilters, type OwnerIssue, PROTOCOL_VERSION, type PostEventOptions, type PostEventResult, REGISTRY_ENV_VAR, type RepoEntry, type ResolveDestinationOptions, type SendFeedbackOptions, type SendFeedbackResult, type Sentiment, type SessionSource, THREAD_ID_PATTERN, type ValidationResult, WELL_KNOWN_PATH, WRITE_KEY_HEADER, WRITE_KEY_PATTERN, appendToOutbox, authorSchema, categorySchema, collectContext, descriptorJsonSchema, descriptorSchema, evalReportSchema, feedbackContextSchema, feedbackEventJsonSchema, feedbackEventSchema, feedbackHomeDir, findConfigFile, flushOutbox, generateThreadId, inferAuthor, ingestResponseSchema, isTelemetryDisabled, metadataSchema, outboxPath, ownerApi, parseDsn, postEvent, registryUrl, repoEntrySchema, repoListSchema, resolveApiOrigin, resolveDestination, resolveThreadId, sendFeedback, sentimentSchema, validateDescriptor, validateFeedbackEvent, validateIngestResponse };
1203
+ export { type Attachment, type AttachmentTarget, CONFIG_FILE_NAME, type CollectContextOptions, DEFAULT_INGEST_PATH, DEFAULT_REGISTRY_URL, DSN_ENV_VAR, type DeliveredAttachment, type Descriptor, type Destination, EVENT_STATUSES, type EnvLike, type EvalReport, type EventStatus, FEEDBACK_CATEGORIES, type FeedbackAuthor, type FeedbackCategory, type FeedbackConfig, type FeedbackContext, FeedbackError, type FeedbackEvent, type FeedbackEventInput, type FeedbackMetadata, type FilesNotAttached, type FlushResult, HOME_ENV_VAR, ISSUE_STATUSES, type IngestResponse, type IssueStatus, type LocalAttachmentInput, MAX_ATTACHMENTS, MAX_ATTACHMENT_BYTES, MAX_FEEDBACK_LENGTH, MAX_GUIDANCE_LENGTH, MAX_SUBJECT_LENGTH, NO_TELEMETRY_ENV_VAR, type OutboxEntry, type OwnerApi, type OwnerApiOptions, type OwnerEvent, type OwnerFilters, type OwnerIssue, PROTOCOL_VERSION, type PostEventOptions, type PostEventResult, REGISTRY_ENV_VAR, type RepoEntry, type ResolveDestinationOptions, type SendFeedbackOptions, type SendFeedbackResult, type Sentiment, type SessionSource, THREAD_ID_PATTERN, type ValidationResult, WELL_KNOWN_PATH, WRITE_KEY_HEADER, WRITE_KEY_PATTERN, appendToOutbox, authorSchema, categorySchema, collectContext, descriptorJsonSchema, descriptorSchema, evalReportSchema, feedbackContextSchema, feedbackEventJsonSchema, feedbackEventSchema, feedbackHomeDir, findConfigFile, flushOutbox, generateThreadId, inferAuthor, ingestResponseSchema, isTelemetryDisabled, metadataSchema, outboxPath, ownerApi, parseDsn, postEvent, registryUrl, repoEntrySchema, repoListSchema, resolveApiOrigin, resolveDestination, resolveThreadId, sendFeedback, sentimentSchema, threadSchema, validateDescriptor, validateFeedbackEvent, validateIngestResponse };