@ellipsis-dev/sdk 0.15.1 → 0.17.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ellipsis-dev/sdk",
3
- "version": "0.15.1",
3
+ "version": "0.17.0",
4
4
  "description": "TypeScript SDK for the Ellipsis agents platform: /v1 REST types + client, the session stream WebSocket client, and the session transcript store.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,7 +39,6 @@
39
39
  "default": {
40
40
  "description": null,
41
41
  "enabled": true,
42
- "interactive": true,
43
42
  "metadata": {
44
43
  "annotations": {},
45
44
  "labels": []
@@ -49,7 +48,14 @@
49
48
  }
50
49
  },
51
50
  "environment": {
52
- "$ref": "#/$defs/AgentConfigEnvironment",
51
+ "anyOf": [
52
+ {
53
+ "type": "string"
54
+ },
55
+ {
56
+ "$ref": "#/$defs/AgentConfigEnvironment"
57
+ }
58
+ ],
53
59
  "default": {
54
60
  "compute": {
55
61
  "cpu": null,
@@ -64,9 +70,11 @@
64
70
  "dockerfile_append": null,
65
71
  "setup": null
66
72
  },
73
+ "mcp_servers": [],
67
74
  "repositories": [],
68
75
  "variables": []
69
- }
76
+ },
77
+ "title": "Environment"
70
78
  },
71
79
  "input": {
72
80
  "anyOf": [
@@ -79,21 +87,6 @@
79
87
  ],
80
88
  "default": null
81
89
  },
82
- "mcp_servers": {
83
- "default": [],
84
- "items": {
85
- "anyOf": [
86
- {
87
- "type": "string"
88
- },
89
- {
90
- "$ref": "#/$defs/AgentConfigMcpServer"
91
- }
92
- ]
93
- },
94
- "title": "Mcp Servers",
95
- "type": "array"
96
- },
97
90
  "output": {
98
91
  "anyOf": [
99
92
  {
@@ -161,7 +154,6 @@
161
154
  "ellipsis",
162
155
  "environment",
163
156
  "input",
164
- "mcp_servers",
165
157
  "output",
166
158
  "permissions",
167
159
  "skills",
@@ -497,7 +489,7 @@
497
489
  },
498
490
  "AgentConfigEllipsis": {
499
491
  "additionalProperties": false,
500
- "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, whether the agent is `enabled`, and the\nhuman-access flag `interactive`. The presence of a top-level `ellipsis:`\nmapping is what marks a YAML file as an Ellipsis agent config (vs arbitrary\nYAML that merely lives under a config directory) \u2014 see\n`yaml_is_ellipsis_config`.\n\n`enabled`/`interactive` are agent behavior, not freeform metadata, so they\nstay inside the config `sha` (only `metadata` is sha-excluded).\n`interactive` lets a human `agent session connect` to a live session (CLI\nrelay). It does not decide whether a session is ephemeral or durable \u2014 that\nis the trigger's job.",
492
+ "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, and whether the agent is `enabled`. The\npresence of a top-level `ellipsis:` mapping is what marks a YAML file as\nan Ellipsis agent config (vs arbitrary YAML that merely lives under a\nconfig directory) \u2014 see `yaml_is_ellipsis_config`.\n\n`enabled` is agent behavior, not freeform metadata, so it stays inside\nthe config `sha` (only `metadata` is sha-excluded). Whether a session\naccepts messages is a per-run choice (POST /v1/sessions `interactive`),\nnot a config one.",
501
493
  "properties": {
502
494
  "description": {
503
495
  "anyOf": [
@@ -516,11 +508,6 @@
516
508
  "title": "Enabled",
517
509
  "type": "boolean"
518
510
  },
519
- "interactive": {
520
- "default": true,
521
- "title": "Interactive",
522
- "type": "boolean"
523
- },
524
511
  "metadata": {
525
512
  "$ref": "#/$defs/AgentConfigMetadata",
526
513
  "default": {
@@ -549,7 +536,6 @@
549
536
  "required": [
550
537
  "description",
551
538
  "enabled",
552
- "interactive",
553
539
  "metadata",
554
540
  "name",
555
541
  "version"
@@ -614,6 +600,27 @@
614
600
  "setup": null
615
601
  }
616
602
  },
603
+ "mcp_servers": {
604
+ "default": [],
605
+ "items": {
606
+ "anyOf": [
607
+ {
608
+ "type": "string"
609
+ },
610
+ {
611
+ "$ref": "#/$defs/AgentConfigMcpServer"
612
+ },
613
+ {
614
+ "$ref": "#/$defs/AgentConfigMcpStdioServer"
615
+ },
616
+ {
617
+ "$ref": "#/$defs/AgentConfigMcpRemoteServer"
618
+ }
619
+ ]
620
+ },
621
+ "title": "Mcp Servers",
622
+ "type": "array"
623
+ },
617
624
  "repositories": {
618
625
  "default": [],
619
626
  "items": {
@@ -635,6 +642,7 @@
635
642
  "compute",
636
643
  "hooks",
637
644
  "image",
645
+ "mcp_servers",
638
646
  "repositories",
639
647
  "variables"
640
648
  ],
@@ -824,9 +832,38 @@
824
832
  "title": "AgentConfigInput",
825
833
  "type": "object"
826
834
  },
835
+ "AgentConfigMcpRemoteServer": {
836
+ "additionalProperties": false,
837
+ "description": "A bring-your-own remote MCP server: the harness talks HTTP to `url`.\nNothing runs in the sandbox image. `headers` carry static auth (e.g.\n`Authorization: Bearer ${TOKEN}`); values may embed `${NAME}` secret\nreferences, resolved at run time from the account's secrets store.",
838
+ "properties": {
839
+ "headers": {
840
+ "additionalProperties": {
841
+ "type": "string"
842
+ },
843
+ "default": {},
844
+ "title": "Headers",
845
+ "type": "object"
846
+ },
847
+ "name": {
848
+ "title": "Name",
849
+ "type": "string"
850
+ },
851
+ "url": {
852
+ "title": "Url",
853
+ "type": "string"
854
+ }
855
+ },
856
+ "required": [
857
+ "headers",
858
+ "name",
859
+ "url"
860
+ ],
861
+ "title": "AgentConfigMcpRemoteServer",
862
+ "type": "object"
863
+ },
827
864
  "AgentConfigMcpServer": {
828
865
  "additionalProperties": false,
829
- "description": "One built-in MCP server this agent opts into by name (`linear`/`slack`).\nThis is a name reference over the connected built-in set, NOT a custom-server\ndefinition \u2014 there is no command/url/headers shape (that was the old,\nremoved field, and Ellipsis does not support bring-your-own MCP servers).\nIt only matters when the named integration is set to `opt_in` inclusion; an\nintegration in the default `all_sessions` mode is added regardless.",
866
+ "description": "One built-in MCP server this agent opts into by name (`linear`/`slack`).\nA name reference over the connected built-in set \u2014 the platform manages the\nserver's transport and credentials. It only matters when the named\nintegration is set to `opt_in` inclusion; an integration in the default\n`all_sessions` mode is added regardless. For a server the platform does not\nprovide, define it instead (`AgentConfigMcpStdioServer` /\n`AgentConfigMcpRemoteServer`).",
830
867
  "properties": {
831
868
  "name": {
832
869
  "title": "Name",
@@ -839,6 +876,44 @@
839
876
  "title": "AgentConfigMcpServer",
840
877
  "type": "object"
841
878
  },
879
+ "AgentConfigMcpStdioServer": {
880
+ "additionalProperties": false,
881
+ "description": "A bring-your-own stdio MCP server: the harness spawns `command` inside\nthe sandbox and speaks JSON-RPC over its stdin/stdout. The command must be\nrunnable in the sandbox image \u2014 install its runtime via `image.setup` /\n`image.dockerfile_append` if the base image lacks it.\n\n`env` values may embed `${NAME}` references, resolved at run time from the\naccount's secrets store (see `mcp_secret_refs`); everything else is passed\nliterally.",
882
+ "properties": {
883
+ "args": {
884
+ "default": [],
885
+ "items": {
886
+ "type": "string"
887
+ },
888
+ "title": "Args",
889
+ "type": "array"
890
+ },
891
+ "command": {
892
+ "title": "Command",
893
+ "type": "string"
894
+ },
895
+ "env": {
896
+ "additionalProperties": {
897
+ "type": "string"
898
+ },
899
+ "default": {},
900
+ "title": "Env",
901
+ "type": "object"
902
+ },
903
+ "name": {
904
+ "title": "Name",
905
+ "type": "string"
906
+ }
907
+ },
908
+ "required": [
909
+ "args",
910
+ "command",
911
+ "env",
912
+ "name"
913
+ ],
914
+ "title": "AgentConfigMcpStdioServer",
915
+ "type": "object"
916
+ },
842
917
  "AgentConfigMemorySize": {
843
918
  "additionalProperties": false,
844
919
  "description": "A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).\nSet any of `gb`/`mb` (at least one). The alternative to the `8GB`-style\nshorthand string.",
@@ -2526,6 +2601,18 @@
2526
2601
  "title": "EllipsisGrant",
2527
2602
  "type": "object"
2528
2603
  },
2604
+ "EnvironmentSource": {
2605
+ "description": "How a session's environment was chosen. None (the field is nullable)\nwhen the config carried an inline environment block and no resolution ran \u2014\nan inline environment is not a reference, so there is nothing to record.\n\nNot derivable from the row: `environment_id` says WHICH environment, not\nhow it was chosen, and is null for the built-in basic sandbox.",
2606
+ "enum": [
2607
+ "request",
2608
+ "agent_config",
2609
+ "repo_default",
2610
+ "account_default",
2611
+ "platform_default"
2612
+ ],
2613
+ "title": "EnvironmentSource",
2614
+ "type": "string"
2615
+ },
2529
2616
  "ErrorFrame": {
2530
2617
  "description": "Terminal error marker, sent before the server closes with code 1011.",
2531
2618
  "properties": {
@@ -3191,6 +3278,7 @@
3191
3278
  "reviews",
3192
3279
  "configs",
3193
3280
  "defaults",
3281
+ "environments",
3194
3282
  "secrets",
3195
3283
  "templates",
3196
3284
  "integrations",
@@ -4024,6 +4112,10 @@
4024
4112
  "title": "Created At",
4025
4113
  "type": "string"
4026
4114
  },
4115
+ "environment": {
4116
+ "$ref": "#/$defs/SessionEnvironment",
4117
+ "description": "The environment the session resolved: the saved environment's id and how it was chosen. The environment's frozen body is inside agent.config.environment."
4118
+ },
4027
4119
  "exit_status": {
4028
4120
  "anyOf": [
4029
4121
  {
@@ -4036,6 +4128,18 @@
4036
4128
  "default": null,
4037
4129
  "description": "How the session ended; null until it is terminal."
4038
4130
  },
4131
+ "git": {
4132
+ "anyOf": [
4133
+ {
4134
+ "$ref": "#/$defs/SessionGit"
4135
+ },
4136
+ {
4137
+ "type": "null"
4138
+ }
4139
+ ],
4140
+ "default": null,
4141
+ "description": "What the session did to git, one entry per repository in its workspace: the commit and branch it sits on, per-file line counts for its uncommitted changes, and the pull requests it opened. Null if nothing was ever captured."
4142
+ },
4039
4143
  "harness": {
4040
4144
  "$ref": "#/$defs/Harness",
4041
4145
  "description": "The coding-agent harness the session runs on."
@@ -4082,34 +4186,6 @@
4082
4186
  "title": "Metadata",
4083
4187
  "type": "object"
4084
4188
  },
4085
- "output_diff": {
4086
- "anyOf": [
4087
- {
4088
- "$ref": "#/$defs/SessionDiff"
4089
- },
4090
- {
4091
- "type": "null"
4092
- }
4093
- ],
4094
- "default": null,
4095
- "description": "Per-file line counts for the uncommitted changes in the session's workspace. Work the session committed is not included here \u2014 see output_prs. Null if no diff was ever captured."
4096
- },
4097
- "output_prs": {
4098
- "anyOf": [
4099
- {
4100
- "items": {
4101
- "$ref": "#/$defs/SessionPr"
4102
- },
4103
- "type": "array"
4104
- },
4105
- {
4106
- "type": "null"
4107
- }
4108
- ],
4109
- "default": null,
4110
- "description": "Pull requests the session created or updated.",
4111
- "title": "Output Prs"
4112
- },
4113
4189
  "parent": {
4114
4190
  "$ref": "#/$defs/SessionParent",
4115
4191
  "description": "What preceded this session, if anything."
@@ -4210,14 +4286,14 @@
4210
4286
  "context_repository",
4211
4287
  "cost",
4212
4288
  "created_at",
4289
+ "environment",
4213
4290
  "exit_status",
4291
+ "git",
4214
4292
  "harness",
4215
4293
  "id",
4216
4294
  "last_activity_at",
4217
4295
  "last_message_at",
4218
4296
  "metadata",
4219
- "output_diff",
4220
- "output_prs",
4221
4297
  "parent",
4222
4298
  "prompt",
4223
4299
  "prompting",
@@ -4397,55 +4473,40 @@
4397
4473
  "title": "SessionCost",
4398
4474
  "type": "object"
4399
4475
  },
4400
- "SessionDiff": {
4401
- "description": "The counts half of a session's working-tree diff, small enough to ride on\nagent_sessions and be returned by every session read. The patch text lives\nin `agent_session_diffs` and is fetched on demand.\n\nScope is UNCOMMITTED work only (`git diff HEAD`), so this answers \"is there\nunlanded work in this sandbox?\" \u2014 a session that committed and pushed shows\nno files here and its created PR instead.",
4476
+ "SessionEnvironment": {
4477
+ "description": "The environment this session resolved: which saved environment (as it\nexists now) and how it was chosen. The environment's frozen BODY rides\ninside `agent.config.environment` \u2014 substitution happens before the config\nsnapshot freezes \u2014 so this object is provenance, not payload.",
4402
4478
  "properties": {
4403
- "files": {
4404
- "items": {
4405
- "$ref": "#/$defs/SessionDiffFile"
4406
- },
4407
- "title": "Files",
4408
- "type": "array"
4409
- }
4410
- },
4411
- "required": [
4412
- "files"
4413
- ],
4414
- "title": "SessionDiff",
4415
- "type": "object"
4416
- },
4417
- "SessionDiffFile": {
4418
- "description": "One file's uncommitted change in a session's sandbox, as `git diff HEAD`\n--numstat reports it (with intent-to-add so new files count).",
4419
- "properties": {
4420
- "additions": {
4421
- "title": "Additions",
4422
- "type": "integer"
4423
- },
4424
- "deletions": {
4425
- "title": "Deletions",
4426
- "type": "integer"
4427
- },
4428
- "path": {
4429
- "title": "Path",
4430
- "type": "string"
4431
- },
4432
- "repo": {
4433
- "title": "Repo",
4434
- "type": "string"
4479
+ "environment_id": {
4480
+ "anyOf": [
4481
+ {
4482
+ "type": "string"
4483
+ },
4484
+ {
4485
+ "type": "null"
4486
+ }
4487
+ ],
4488
+ "default": null,
4489
+ "description": "Identifier of the saved environment the session's config resolved. Null for an inline environment block or the built-in basic sandbox.",
4490
+ "title": "Environment Id"
4435
4491
  },
4436
- "status": {
4437
- "title": "Status",
4438
- "type": "string"
4492
+ "source": {
4493
+ "anyOf": [
4494
+ {
4495
+ "$ref": "#/$defs/EnvironmentSource"
4496
+ },
4497
+ {
4498
+ "type": "null"
4499
+ }
4500
+ ],
4501
+ "default": null,
4502
+ "description": "How the environment was chosen (request, agent_config, repo_default, account_default, platform_default). Null when the config carried its own inline environment."
4439
4503
  }
4440
4504
  },
4441
4505
  "required": [
4442
- "additions",
4443
- "deletions",
4444
- "path",
4445
- "repo",
4446
- "status"
4506
+ "environment_id",
4507
+ "source"
4447
4508
  ],
4448
- "title": "SessionDiffFile",
4509
+ "title": "SessionEnvironment",
4449
4510
  "type": "object"
4450
4511
  },
4451
4512
  "SessionExitStatus": {
@@ -4490,6 +4551,169 @@
4490
4551
  "title": "SessionFrame",
4491
4552
  "type": "object"
4492
4553
  },
4554
+ "SessionGit": {
4555
+ "description": "Every repo the session touched. Small enough to ride on `agent_sessions`\nand be returned by every session read.",
4556
+ "properties": {
4557
+ "repos": {
4558
+ "default": [],
4559
+ "items": {
4560
+ "$ref": "#/$defs/SessionGitRepo"
4561
+ },
4562
+ "title": "Repos",
4563
+ "type": "array"
4564
+ }
4565
+ },
4566
+ "required": [
4567
+ "repos"
4568
+ ],
4569
+ "title": "SessionGit",
4570
+ "type": "object"
4571
+ },
4572
+ "SessionGitFile": {
4573
+ "description": "One file's uncommitted change, as `git diff HEAD --numstat` reports it\n(with intent-to-add, so a brand-new file still counts).",
4574
+ "properties": {
4575
+ "additions": {
4576
+ "title": "Additions",
4577
+ "type": "integer"
4578
+ },
4579
+ "deletions": {
4580
+ "title": "Deletions",
4581
+ "type": "integer"
4582
+ },
4583
+ "path": {
4584
+ "title": "Path",
4585
+ "type": "string"
4586
+ },
4587
+ "status": {
4588
+ "title": "Status",
4589
+ "type": "string"
4590
+ }
4591
+ },
4592
+ "required": [
4593
+ "additions",
4594
+ "deletions",
4595
+ "path",
4596
+ "status"
4597
+ ],
4598
+ "title": "SessionGitFile",
4599
+ "type": "object"
4600
+ },
4601
+ "SessionGitPr": {
4602
+ "description": "A pull request the session opened in this repo, denormalized at capture\ntime so a surface renders a labeled link without joining gh_prs. Live PR\nstate (open/merged/closed) is not stored \u2014 read gh_prs where a view needs\nit. The repo is the parent object, so it is not repeated here.",
4603
+ "properties": {
4604
+ "gh_pr_id": {
4605
+ "anyOf": [
4606
+ {
4607
+ "type": "integer"
4608
+ },
4609
+ {
4610
+ "type": "null"
4611
+ }
4612
+ ],
4613
+ "default": null,
4614
+ "title": "Gh Pr Id"
4615
+ },
4616
+ "number": {
4617
+ "title": "Number",
4618
+ "type": "integer"
4619
+ },
4620
+ "title": {
4621
+ "anyOf": [
4622
+ {
4623
+ "type": "string"
4624
+ },
4625
+ {
4626
+ "type": "null"
4627
+ }
4628
+ ],
4629
+ "default": null,
4630
+ "title": "Title"
4631
+ },
4632
+ "url": {
4633
+ "title": "Url",
4634
+ "type": "string"
4635
+ }
4636
+ },
4637
+ "required": [
4638
+ "gh_pr_id",
4639
+ "number",
4640
+ "title",
4641
+ "url"
4642
+ ],
4643
+ "title": "SessionGitPr",
4644
+ "type": "object"
4645
+ },
4646
+ "SessionGitRepo": {
4647
+ "description": "One checkout in the session's sandbox and everything the session did to\nit, split by whether it survived the sandbox.",
4648
+ "properties": {
4649
+ "full_name": {
4650
+ "title": "Full Name",
4651
+ "type": "string"
4652
+ },
4653
+ "local_commit": {
4654
+ "anyOf": [
4655
+ {
4656
+ "type": "string"
4657
+ },
4658
+ {
4659
+ "type": "null"
4660
+ }
4661
+ ],
4662
+ "default": null,
4663
+ "title": "Local Commit"
4664
+ },
4665
+ "local_uncommitted_files": {
4666
+ "default": [],
4667
+ "items": {
4668
+ "$ref": "#/$defs/SessionGitFile"
4669
+ },
4670
+ "title": "Local Uncommitted Files",
4671
+ "type": "array"
4672
+ },
4673
+ "prs": {
4674
+ "default": [],
4675
+ "items": {
4676
+ "$ref": "#/$defs/SessionGitPr"
4677
+ },
4678
+ "title": "Prs",
4679
+ "type": "array"
4680
+ },
4681
+ "remote_branch": {
4682
+ "anyOf": [
4683
+ {
4684
+ "type": "string"
4685
+ },
4686
+ {
4687
+ "type": "null"
4688
+ }
4689
+ ],
4690
+ "default": null,
4691
+ "title": "Remote Branch"
4692
+ },
4693
+ "remote_commit": {
4694
+ "anyOf": [
4695
+ {
4696
+ "type": "string"
4697
+ },
4698
+ {
4699
+ "type": "null"
4700
+ }
4701
+ ],
4702
+ "default": null,
4703
+ "title": "Remote Commit"
4704
+ }
4705
+ },
4706
+ "required": [
4707
+ "full_name",
4708
+ "local_commit",
4709
+ "local_uncommitted_files",
4710
+ "prs",
4711
+ "remote_branch",
4712
+ "remote_commit"
4713
+ ],
4714
+ "title": "SessionGitRepo",
4715
+ "type": "object"
4716
+ },
4493
4717
  "SessionLiveness": {
4494
4718
  "description": "The durable conversation axis (backs the surfaced `session` field).",
4495
4719
  "enum": [
@@ -4681,56 +4905,6 @@
4681
4905
  "title": "SessionParent",
4682
4906
  "type": "object"
4683
4907
  },
4684
- "SessionPr": {
4685
- "description": "A pull request this session created, denormalized at capture time so\nsession surfaces render a labeled link without joining gh_prs. Live PR\nstate (open/merged/closed) is not stored here \u2014 read it from gh_prs where\na view needs it.",
4686
- "properties": {
4687
- "gh_pr_id": {
4688
- "anyOf": [
4689
- {
4690
- "type": "integer"
4691
- },
4692
- {
4693
- "type": "null"
4694
- }
4695
- ],
4696
- "default": null,
4697
- "title": "Gh Pr Id"
4698
- },
4699
- "number": {
4700
- "title": "Number",
4701
- "type": "integer"
4702
- },
4703
- "repo_full_name": {
4704
- "title": "Repo Full Name",
4705
- "type": "string"
4706
- },
4707
- "title": {
4708
- "anyOf": [
4709
- {
4710
- "type": "string"
4711
- },
4712
- {
4713
- "type": "null"
4714
- }
4715
- ],
4716
- "default": null,
4717
- "title": "Title"
4718
- },
4719
- "url": {
4720
- "title": "Url",
4721
- "type": "string"
4722
- }
4723
- },
4724
- "required": [
4725
- "gh_pr_id",
4726
- "number",
4727
- "repo_full_name",
4728
- "title",
4729
- "url"
4730
- ],
4731
- "title": "SessionPr",
4732
- "type": "object"
4733
- },
4734
4908
  "SessionPrompting": {
4735
4909
  "description": "The prompt-affordance projection. `enabled` answers \"would a send work\",\nand when it wouldn't, `blocked_reason` + `detail` say why.\n\n`surface_name` is set only for MENTION_SURFACE, naming where to reply.",
4736
4910
  "properties": {