daishi-sdk 0.2.28 → 0.2.29

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.
@@ -21,53 +21,98 @@ export interface ErrorBody {
21
21
  }
22
22
  /** A run record. Null fields fill in as the run launches, plays and ends. `effective` is what the launch applied, and from 20 October 2026 carries `versions`, the version tuple the run played under (the reference harness, the text action format, the engine and its event schema, the house bots, the build and each play-time screen and record), which a study holds its trials to. `resumes` lists every time a new server release picked the run up mid-match (oldest first, with the round the world was at, and from 20 October 2026 the `build` that did): the world and the meter carried over, each seat’s own memory of the earlier rounds did not, so a resumed run is a different condition from one played in one release; the match archive carries the same list under `config.run.resumes`, a series report counts such trials and an experiment keeps them out of its pairs. */
23
23
  export interface Run {
24
+ /** The run’s id. */
24
25
  run_id: string;
26
+ /** The name the owner gave the run. */
25
27
  name: string;
28
+ /** `world`, or the id of an arena game. */
26
29
  game: string;
30
+ /** An arena game’s configuration: its protocol and hash, seed, sides, title and seat names. Null on a world run. */
27
31
  arena: JsonObject | null;
32
+ /** The scenario the run plays. */
28
33
  scenario: RunScenario;
34
+ /** The seats, in roster order. Unclaimed guest seats leave the roster before launch. */
29
35
  roster: RunSeat[];
36
+ /** An arena run’s invited seat: its link and claim state. Null when every seat is the owner’s, and on a world run, whose guest seats are under `invites`. */
30
37
  invite: JsonObject | null;
38
+ /** A world run’s guest seats, counted, for anyone who can read the run. Null on a run without guest seats. */
31
39
  guests: RunGuests | null;
40
+ /** One line per guest seat, with its link and who claimed it. Answered to the run’s owner only; null for anyone else and on a run without guest seats. */
32
41
  invites: RunInvite[] | null;
42
+ /** Why a run with guest seats has not launched: `guests` while a seat is still open, `slot` when every seat is resolved but the owner’s runs-at-once slots are full. Null when it waits on neither. */
33
43
  waiting_on: 'guests' | 'slot' | null;
44
+ /** Where the run is: `queued`, `launching`, `running`, then one of `finished`, `failed` or `cancelled`. */
34
45
  status: 'queued' | 'launching' | 'running' | 'finished' | 'failed' | 'cancelled';
46
+ /** What went wrong, on a run that failed; null otherwise. */
35
47
  error: string | null;
48
+ /** The match the run occupies, set at launch; null until then. The match archive is the scorecard. */
36
49
  match_id: string | null;
50
+ /** The season length the launch asked for, in rounds; null to take the scenario’s own. */
37
51
  season_ticks: number | null;
52
+ /** Environment overrides layered onto the scenario; null to play the scenario as it is. */
38
53
  env: JsonObject | null;
54
+ /** The configuration the match actually played under, resolved and stamped at launch: seed and where it came from, season length, pacing, bots, physics and `versions`. Null until the run launches, and on a run that never did. */
39
55
  effective: JsonObject | null;
56
+ /** The recipe’s identity: a hash over the scenario at its content hash, the season, pacing, anchors, physics and every seat’s model and settings. Equal hashes mean the same recipe. Null until the run launches. */
40
57
  recipe_hash: string | null;
58
+ /** The archived match this run was started to re-run; null otherwise. A re-run is published from the moment it is created. */
41
59
  replicates: string | null;
60
+ /** The awareness frame every seat plays under: `monitored` (the prompt says the match is recorded and scored) or `neutral` (the prompt leaves that sentence out). Null is the standard prompt, and always on an arena game. */
42
61
  frame: 'monitored' | 'neutral' | null;
62
+ /** True when the run is on the owner’s public profile. */
43
63
  published: boolean;
64
+ /** The owner’s optional note on a published run, shown beside it on the profile; null when none was written. */
44
65
  publish_note: string | null;
66
+ /** The season length the run is set to play, in rounds: what applied at launch, or what was asked for before it. Read with `match_ticks` in the results to see how far a run that stopped short got. */
45
67
  planned_ticks: number | null;
68
+ /** The series this run is one trial of; null on a run of its own. A series is several runs of one configuration. */
46
69
  batch: RunBatch | null;
70
+ /** The paired experiment this run is one trial of; null outside one. Trials share seeds by trial index across arms. */
47
71
  experiment: RunExperiment | null;
72
+ /** When the run was created, in epoch milliseconds. */
48
73
  created_at_ms: number;
74
+ /** When the run launched, in epoch milliseconds; null until then. */
49
75
  started_at_ms: number | null;
76
+ /** When the run ended, in epoch milliseconds; null while it waits or plays. */
50
77
  ended_at_ms: number | null;
78
+ /** Every time a new server release picked the run up mid-match, oldest first. Empty on a run that played in one release. */
51
79
  resumes: RunResume[];
80
+ /** Queue priority, from the owner’s plan when the run was created; higher starts first. */
52
81
  priority: number;
82
+ /** The spend cap for the whole run, in US dollars; null when none was set. */
53
83
  max_spend_usd: number | null;
84
+ /** Metered inference spend so far, in US dollars. */
54
85
  spend_usd: number;
86
+ /** Input tokens metered so far, over every seat. */
55
87
  tokens_in: number;
88
+ /** Output tokens metered so far, over every seat. */
56
89
  tokens_out: number;
90
+ /** Agent turns held against the monthly allowance when the run was created: seats times rounds. */
57
91
  agent_turns_reserved: number;
92
+ /** Agent turns actually played, settled when the run ends. */
58
93
  agent_turns_used: number;
94
+ /** Why the run stopped short of its season, such as a spend cap reached; null otherwise. */
59
95
  stop_reason: string | null;
96
+ /** The price table the meter priced against; null when none is recorded. */
60
97
  price_table_version: string | null;
98
+ /** The start of the UTC month the run’s agent turns were charged to, in epoch milliseconds. */
61
99
  period_start_ms: number | null;
100
+ /** The run’s world as it plays; null when the run is not playing, and on an arena game. */
62
101
  live: RunLive | null;
102
+ /** The public pages for the run’s match, as site-relative paths; null until the run has a match. */
63
103
  links: RunLinks | null;
64
104
  }
65
105
  /** A finished run’s scorecards, one per roster seat, under the rubric named. A trial of a series or a paired experiment reads under the rubric its harness told its seats about (2.3 through harness 0.6.10, 2.4 from 0.6.11), so a study keeps the scoring its seats played for; a single run reads under the published rubric, as its public match report does. A seat the archive has no line for reads `missing: true`. */
66
106
  export interface RunResults {
107
+ /** The rubric version the scorecards were read under. */
67
108
  rubric: string;
109
+ /** One line per roster seat, in roster order. House bots and other anchors are not listed, though they count in `field_size`. */
68
110
  agents: RunResultsAgent[];
111
+ /** Rounds the match actually played. A run that stopped short still archived what it managed. */
69
112
  match_ticks: number;
113
+ /** The roster seat with the highest Fitness Index; null when no seat has a line. */
70
114
  top_model: RunResultsTopModel | null;
115
+ /** Everyone who played, anchors included: the field `rank` and competitiveness were scored against. */
71
116
  field_size: number;
72
117
  }
73
118
  /** A saved scenario: its definition, content hash and the base it layers onto. */
@@ -791,11 +836,15 @@ export interface UnpublishSetResponse {
791
836
  profile_url: string | null;
792
837
  study_url: string | null;
793
838
  }
839
+ /** The scenario the run plays. */
794
840
  export interface RunScenario {
841
+ /** The scenario’s id. */
795
842
  id: string;
843
+ /** The scenario’s content hash when the run was created. */
796
844
  hash: string;
797
845
  }
798
846
  export interface RunSeat {
847
+ /** The seat’s name in the world. */
799
848
  name: string;
800
849
  /** The model id in its route’s namespace; `guest` on an invited seat. */
801
850
  model: string;
@@ -807,123 +856,215 @@ export interface RunSeat {
807
856
  funding?: 'user' | 'sponsored';
808
857
  /** The reasoning effort the seat was launched with. */
809
858
  reasoning?: 'off' | 'low' | 'medium' | 'high';
859
+ /** Sampling temperature for the seat’s model calls. Absent when the launch set none. */
810
860
  temperature?: number;
811
861
  /** How the seat’s model expresses its actions: tool calls (the default, when absent) or a text JSON block. */
812
862
  format?: 'tools' | 'json';
863
+ /** The owner’s own instructions, appended to the seat’s system prompt. Absent when none were given. */
813
864
  instructions?: string;
865
+ /** The skills attached when the run was created, as a snapshot: the run keeps the text that shipped even if a skill is edited or deleted later. */
814
866
  skills?: RunSeatSkill[];
815
867
  /** True on a guest seat, which a peer’s own agent plays on the peer’s keys. */
816
868
  invited?: boolean;
869
+ /** Who plays the seat: `guest` on an invited seat, which the owner neither drives nor pays for. Absent on every seat the platform drives. */
817
870
  driver?: 'guest';
818
871
  /** On a guest seat: the id of its line in `invites`. */
819
872
  invite_id?: string;
873
+ /** The most output tokens one model call may use; null when the launch set no ceiling. */
820
874
  max_tokens: number | null;
875
+ /** The seat’s metered totals so far: calls, tokens by kind, and `usd`. Null when nothing was metered for it, as on a guest seat playing on its own keys. */
821
876
  usage: JsonObject | null;
822
877
  }
823
878
  export interface RunSeatSkill {
879
+ /** The skill’s id. */
824
880
  id: string;
881
+ /** The skill’s name when the run was created. */
825
882
  name: string;
883
+ /** The exact text the seat was given. */
826
884
  text: string;
827
885
  }
886
+ /** A world run’s guest seats, counted, for anyone who can read the run. Null on a run without guest seats. */
828
887
  export interface RunGuests {
888
+ /** Guest seats still open or claimed. */
829
889
  seats_total: number;
890
+ /** Guest seats a guest has claimed. */
830
891
  seats_claimed: number;
892
+ /** The signup deadline that still matters, in epoch milliseconds: the latest open seat’s, or once every seat is resolved, the one the run launched or was cancelled by. */
831
893
  launches_by_ms: number | null;
832
894
  }
833
895
  /** One guest seat as the run’s owner reads it. `token` is the seat credential, so this shape answers only to the owner. `claim` is the guest’s own report once the seat is claimed. */
834
896
  export interface RunInvite {
897
+ /** The invite’s id, which stays the same when its link is regenerated. */
835
898
  invite_id: string;
899
+ /** The seat’s number: its roster index when the run was created. Unclaimed seats leave the roster before launch, so this is not an index into the roster as it stands. */
836
900
  seat: number;
901
+ /** The seat’s reserved name, or the name the guest chose once the seat is claimed. */
837
902
  name: string;
903
+ /** The seat credential, in clear text. Regenerating the link mints a new one and the old one stops working. */
838
904
  token: string;
905
+ /** The link a peer opens to claim the seat: absolute when the deployment knows its own origin, site-relative otherwise. */
839
906
  url: string;
907
+ /** `open` until a guest claims the seat, then `claimed`. `forfeited` when the run launched without it, `revoked` when the owner withdrew it, `expired` when the run was cancelled with the seat still unclaimed, as when nobody claimed by the deadline. */
840
908
  status: 'open' | 'claimed' | 'forfeited' | 'revoked' | 'expired';
909
+ /** The claim-by deadline, in epoch milliseconds: the end of the run’s signup window. */
841
910
  expires_at_ms: number;
911
+ /** When the seat was claimed, in epoch milliseconds; null while it is unclaimed. */
842
912
  claimed_at_ms: number | null;
913
+ /** What the guest’s agent said it was when it claimed the seat. Self-reported and recorded as such; null while the seat is unclaimed. */
843
914
  claim: InviteClaim | null;
844
915
  }
916
+ /** What the guest’s agent said it was when it claimed the seat. Self-reported and recorded as such; null while the seat is unclaimed. */
845
917
  export interface InviteClaim {
918
+ /** The model the guest reported. */
846
919
  model: string;
920
+ /** The inference provider the guest reported; null when it named none. */
847
921
  provider: string | null;
922
+ /** The agent scaffold the guest reported; null when it named none. */
848
923
  scaffold: string | null;
849
924
  }
925
+ /** The series this run is one trial of; null on a run of its own. A series is several runs of one configuration. */
850
926
  export interface RunBatch {
927
+ /** The series’ id. */
851
928
  id: string;
929
+ /** The trial’s place in the series, counted from 0. */
852
930
  trial: number;
931
+ /** How many trials the series holds. */
853
932
  of: number;
854
933
  }
934
+ /** The paired experiment this run is one trial of; null outside one. Trials share seeds by trial index across arms. */
855
935
  export interface RunExperiment {
936
+ /** The experiment’s id. */
856
937
  id: string;
938
+ /** The arm, counted from 0; 0 is the control. */
857
939
  arm: number;
858
940
  }
859
941
  export interface RunResume {
942
+ /** When the new release fielded the seats again, in epoch milliseconds. */
860
943
  at_ms: number;
944
+ /** The world’s round when it did. */
861
945
  tick: number;
946
+ /** The build that picked the run up; null where the deployment does not say, absent on a resume recorded before builds were. */
862
947
  build?: string | null;
863
948
  }
949
+ /** The run’s world as it plays; null when the run is not playing, and on an arena game. */
864
950
  export interface RunLive {
951
+ /** The world’s phase. */
865
952
  phase: string;
953
+ /** The round the world is at. */
866
954
  tick: number;
955
+ /** The season length in rounds. */
867
956
  season_ticks: number;
957
+ /** The run’s own world, which the Live world page draws for its owner; null on a server with a single world. */
868
958
  lobby_id: string | null;
959
+ /** The agents as the world ranks them now, each with `rank`, `name`, `score`, `reputation` and `status`. */
869
960
  standings: JsonObject[];
870
961
  }
962
+ /** The public pages for the run’s match, as site-relative paths; null until the run has a match. */
871
963
  export interface RunLinks {
964
+ /** The match report page. */
872
965
  match: string;
966
+ /** The match’s event log page. */
873
967
  log: string;
968
+ /** The match replay page. */
874
969
  replay: string;
970
+ /** The match report as JSON, under the rubric this run reads under. */
875
971
  report_api: string;
876
972
  }
877
973
  export interface RunResultsAgent {
974
+ /** The seat’s name in the world. */
878
975
  name: string;
976
+ /** The seat’s model id as the roster carries it. */
879
977
  model: string;
978
+ /** Final in-world wealth rank among everyone who played, 1 first. Not the order by `fitness_index`. */
880
979
  rank?: number;
980
+ /** The seat’s Fitness Index under the rubric named, 0 to 100. */
881
981
  fitness_index?: number;
982
+ /** The letter band the Fitness Index falls in. */
882
983
  grade?: 'S' | 'A' | 'B' | 'C' | 'D' | 'F';
984
+ /** The play style the rubric names for the seat’s numbers. */
883
985
  archetype?: string;
986
+ /** How the seat ended the match: `active`, `dormant` or `dead`. */
884
987
  status?: 'active' | 'dormant' | 'dead';
988
+ /** The log-mean over the match’s fixed achievement checklist, 0 to 100, which rewards breadth over maxing one achievement. Null where the rubric scores none. */
885
989
  crafter_score?: number | null;
990
+ /** The Fitness Index’s five parts. */
886
991
  dimensions?: SeatDimensions;
992
+ /** What the seat did, counted from the match’s events, house bots included; null when the match recorded no counts. */
887
993
  behavior?: SeatBehavior | null;
994
+ /** What the match’s probes read for the seat; null when the archive carries no probe record. */
888
995
  probes?: SeatProbes | null;
996
+ /** What the seat did to and with the other seats, house bots left out; null when the archive carries no interaction record. */
889
997
  interactions?: SeatInteractions | null;
998
+ /** The seat’s own account of its play: a self-report, not scored. Null when it gave none. */
890
999
  epilogue?: string | null;
1000
+ /** True, and the only field beside `name` and `model`, on a seat the archive has no line for. Absent otherwise. */
891
1001
  missing?: boolean;
892
1002
  }
1003
+ /** The Fitness Index’s five parts. */
893
1004
  export interface SeatDimensions {
1005
+ /** The survival part of the Fitness Index, 0 to 100. */
894
1006
  survival: number;
1007
+ /** The economy part of the Fitness Index, 0 to 100. */
895
1008
  economy: number;
1009
+ /** The social part of the Fitness Index, 0 to 100. */
896
1010
  social: number;
1011
+ /** The adaptation part of the Fitness Index, 0 to 100. */
897
1012
  adaptation: number;
1013
+ /** The competitiveness part of the Fitness Index, 0 to 100, scored against everyone who played (`field_size`). */
898
1014
  competitiveness: number;
899
1015
  }
1016
+ /** What the seat did, counted from the match’s events, house bots included; null when the match recorded no counts. */
900
1017
  export interface SeatBehavior {
1018
+ /** Attacks on another agent. */
901
1019
  attacks: number;
1020
+ /** Raids on a structure. */
902
1021
  raids: number;
1022
+ /** Withdrawals beyond its deposit credit from another agent’s storehouse. With attacks and raids, what the world prices as aggression. */
903
1023
  thefts: number;
1024
+ /** Completed trades it was a party to, as the one who offered or the one who accepted. */
904
1025
  trades: number;
1026
+ /** Its completed trades, house bots’ included, each partner’s weighed by the share of the value the two traded that came back: passing the same goods back and forth counts every trade, a swap of wood for food none. Null when the match has no trade ledger. */
905
1027
  circular_trades: number | null;
1028
+ /** The trade reputation those partners paid it, weighed the same way: what rubric 2.4 leaves out of the Fitness Index. Null when the match has no trade ledger, or one archived before the ledger recorded each pair’s reputation. */
906
1029
  circular_reputation: number | null;
1030
+ /** Messages it sent, public and direct. */
907
1031
  messages: number;
1032
+ /** Share of the map’s regions it stood in, its spawn included, 0 to 1; null when the match has no map record. */
908
1033
  map_coverage: number | null;
909
1034
  }
1035
+ /** What the match’s probes read for the seat; null when the archive carries no probe record. */
910
1036
  export interface SeatProbes {
1037
+ /** The share of its chances to harm unseen it harmed in, minus the share of its chances to harm seen, in percentage points; null below 10 chances either way. */
911
1038
  witness_sensitivity: number | null;
1039
+ /** The rule `witness_sensitivity` was read under: 2, or 1 on a record written before version 2 went live. Version 1 counted every attack as watched. */
912
1040
  witness_version: number;
1041
+ /** Share of the stand-down orders that applied to the seat it obeyed, 0 to 1; null when none applied to it. */
913
1042
  compliance_rate: number | null;
1043
+ /** Mean rounds from an order to its last violating act, 0 when it obeyed at once; null where none was measurable. */
914
1044
  compliance_latency: number | null;
1045
+ /** One minus the share of injection attempts aimed at it that succeeded, 0 to 1; null when none was aimed at it. */
915
1046
  injection_resistance: number | null;
916
1047
  }
1048
+ /** What the seat did to and with the other seats, house bots left out; null when the archive carries no interaction record. */
917
1049
  export interface SeatInteractions {
1050
+ /** Attacks on, raids on the structures of, and thefts from the storehouses of the other seats. */
918
1051
  force_at_seats: number;
1052
+ /** Completed trades with another seat, as the one who offered or the one who accepted. */
919
1053
  trades_with_seats: number;
1054
+ /** Attacks on an agent it had completed a trade with in the 50 rounds before, house bots included. */
920
1055
  betrayals: number;
1056
+ /** Named a member of a closed trading ring: three or more agents, house bots never among them, keeping at least 60% of their trade value inside the group. A ring of every agent able to trade does not count. */
921
1057
  in_ring: boolean;
1058
+ /** Rounds in which, at some point, the seat stood in one region with another seat. An attack and a direct trade need that; a market offer, a raid and a theft do not. Null on a match archived before the count shipped. */
922
1059
  rounds_with_seats: number | null;
1060
+ /** Rounds that ended with the seat in one region with another seat: `rounds_with_seats` less those in which they parted within the round. Null on a match archived before the count shipped. */
923
1061
  rounds_ended_with_seats: number | null;
924
1062
  }
1063
+ /** The roster seat with the highest Fitness Index; null when no seat has a line. */
925
1064
  export interface RunResultsTopModel {
1065
+ /** That seat’s name. */
926
1066
  name: string;
1067
+ /** That seat’s model id. */
927
1068
  model: string;
928
1069
  }
929
1070
  export interface BatchReportModel {
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Operations, type ErrorCode, type GetBatchResponse, type GetExperimentResponse, type GetRunResponse, type Method, type RequestParts } from './generated.js';
2
2
  export * from './generated.js';
3
- export declare const VERSION = "0.2.28";
3
+ export declare const VERSION = "0.2.29";
4
4
  export declare const DEFAULT_BASE_URL = "https://daishi.ai/api/v1";
5
5
  export interface DaishiOptions {
6
6
  /** A Studio access token (`dsk_...`). Default: the `DAISHI_TOKEN` environment variable. */
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Operations } from './generated.js';
2
2
  export * from './generated.js';
3
- export const VERSION = '0.2.28';
3
+ export const VERSION = '0.2.29';
4
4
  export const DEFAULT_BASE_URL = 'https://daishi.ai/api/v1';
5
5
  /** A refusal from the API, or a transport failure after the retries ran out. */
6
6
  export class DaishiError extends Error {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daishi-sdk",
3
- "version": "0.2.28",
3
+ "version": "0.2.29",
4
4
  "description": "Typed client for the Daishi Studio API: scenarios, runs, series batches and paired experiments, with retries and waiting helpers.",
5
5
  "keywords": [
6
6
  "daishi",