@kosuke-ai/kosuke 1.0.34 → 1.0.36

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.36
4
+
5
+ - `kosuke projects merge-agent get` describes the Batch the queue is split by: its CI, review, QA, members and ejections.
6
+
7
+ ## 1.0.35
8
+
9
+ - Sensei reply cards can send Personal Files with a Gmail reply: `kosuke sensei cards set` takes `attachments` on a reply action, and `replyLabel` names a card's Reply button for its context. Sensei's own writing-style run gets `kosuke sensei writing get`, `writing set` and `writing-samples create`, usable only inside that run.
10
+
3
11
  ## 1.0.34
4
12
 
5
13
  - `kosuke workspaces sandbox-limit get` also returns `sandboxLimit` and `occupants`: every sandbox that holds a slot, with its kind (task, Preview, Deploy, a pool Kosuke is warming), its project and whether it can be stopped. In a Personal space, `--session-id` (a Todo task about to start) or `--project-id` (a new one) leaves out that project's pool sandboxes still warming when the task will run on one of them.
@@ -232,103 +232,106 @@ import { operation as o230 } from './sensei/threads-split.js';
232
232
  import { operation as o231 } from './sensei/tickets-merge.js';
233
233
  import { operation as o232 } from './sensei/watch-reads-finish.js';
234
234
  import { operation as o233 } from './sensei/widgets-get.js';
235
- import { operation as o234 } from './sessions/app-stack-start.js';
236
- import { operation as o235 } from './sessions/artifacts-create.js';
237
- import { operation as o236 } from './sessions/artifacts-get.js';
238
- import { operation as o237 } from './sessions/artifacts-list.js';
239
- import { operation as o238 } from './sessions/create.js';
240
- import { operation as o239 } from './sessions/delete.js';
241
- import { operation as o240 } from './sessions/desktop-control-set.js';
242
- import { operation as o241 } from './sessions/desktop-get.js';
243
- import { operation as o242 } from './sessions/desktop-start.js';
244
- import { operation as o243 } from './sessions/diff-comments-create.js';
245
- import { operation as o244 } from './sessions/diff-comments-delete.js';
246
- import { operation as o245 } from './sessions/diff-comments-list.js';
247
- import { operation as o246 } from './sessions/diff-comments-update.js';
248
- import { operation as o247 } from './sessions/diff-commits-list.js';
249
- import { operation as o248 } from './sessions/diff-files-list.js';
250
- import { operation as o249 } from './sessions/diff-patch-get.js';
251
- import { operation as o250 } from './sessions/files-get.js';
252
- import { operation as o251 } from './sessions/files-list.js';
253
- import { operation as o252 } from './sessions/files-set.js';
254
- import { operation as o253 } from './sessions/get.js';
255
- import { operation as o254 } from './sessions/git-state-get.js';
256
- import { operation as o255 } from './sessions/go-ahead-delete.js';
257
- import { operation as o256 } from './sessions/go-ahead-set.js';
258
- import { operation as o257 } from './sessions/jobs-cancel.js';
259
- import { operation as o258 } from './sessions/jobs-get.js';
260
- import { operation as o259 } from './sessions/jobs-list.js';
261
- import { operation as o260 } from './sessions/labels-set.js';
262
- import { operation as o261 } from './sessions/labels-update.js';
263
- import { operation as o262 } from './sessions/list.js';
264
- import { operation as o263 } from './sessions/list--all.js';
265
- import { operation as o264 } from './sessions/mark-read.js';
266
- import { operation as o265 } from './sessions/messages-get.js';
267
- import { operation as o266 } from './sessions/messages-list.js';
268
- import { operation as o267 } from './sessions/prompt-update.js';
269
- import { operation as o268 } from './sessions/qa-runs-finish.js';
270
- import { operation as o269 } from './sessions/qa-runs-fixes-create.js';
271
- import { operation as o270 } from './sessions/qa-runs-get.js';
272
- import { operation as o271 } from './sessions/qa-runs-results-create.js';
273
- import { operation as o272 } from './sessions/qa-runs-start.js';
274
- import { operation as o273 } from './sessions/qa-runs-stop.js';
275
- import { operation as o274 } from './sessions/qa-set.js';
276
- import { operation as o275 } from './sessions/queue-delete.js';
277
- import { operation as o276 } from './sessions/queue-list.js';
278
- import { operation as o277 } from './sessions/queue-move.js';
279
- import { operation as o278 } from './sessions/queue-resume.js';
280
- import { operation as o279 } from './sessions/queue-send.js';
281
- import { operation as o280 } from './sessions/queue-steer.js';
282
- import { operation as o281 } from './sessions/queue-update.js';
283
- import { operation as o282 } from './sessions/review-set.js';
284
- import { operation as o283 } from './sessions/runtime-commands-run.js';
285
- import { operation as o284 } from './sessions/search.js';
286
- import { operation as o285 } from './sessions/send.js';
287
- import { operation as o286 } from './sessions/start.js';
288
- import { operation as o287 } from './sessions/steer.js';
289
- import { operation as o288 } from './sessions/update.js';
290
- import { operation as o289 } from './skills/create.js';
291
- import { operation as o290 } from './skills/create--personal.js';
292
- import { operation as o291 } from './skills/delete.js';
293
- import { operation as o292 } from './skills/delete--personal.js';
294
- import { operation as o293 } from './skills/get.js';
295
- import { operation as o294 } from './skills/get--personal.js';
296
- import { operation as o295 } from './skills/list.js';
297
- import { operation as o296 } from './skills/list--personal.js';
298
- import { operation as o297 } from './skills/update.js';
299
- import { operation as o298 } from './skills/update--personal.js';
300
- import { operation as o299 } from './tasks/create.js';
301
- import { operation as o300 } from './tasks/create--personal.js';
302
- import { operation as o301 } from './tasks/delete.js';
303
- import { operation as o302 } from './tasks/delete--personal.js';
304
- import { operation as o303 } from './tasks/get.js';
305
- import { operation as o304 } from './tasks/get--personal.js';
306
- import { operation as o305 } from './tasks/labels-list.js';
307
- import { operation as o306 } from './tasks/list.js';
308
- import { operation as o307 } from './tasks/list--all.js';
309
- import { operation as o308 } from './tasks/list--personal.js';
310
- import { operation as o309 } from './tasks/move.js';
311
- import { operation as o310 } from './tasks/move--personal.js';
312
- import { operation as o311 } from './tasks/start.js';
313
- import { operation as o312 } from './tasks/start--personal.js';
314
- import { operation as o313 } from './tasks/update.js';
315
- import { operation as o314 } from './tasks/update--personal.js';
316
- import { operation as o315 } from './user/api-keys-delete.js';
317
- import { operation as o316 } from './user/profile-get.js';
318
- import { operation as o317 } from './user/push-devices-create.js';
319
- import { operation as o318 } from './user/push-devices-delete.js';
320
- import { operation as o319 } from './user/usage-get.js';
321
- import { operation as o320 } from './workspaces/artifacts-search.js';
322
- import { operation as o321 } from './workspaces/credits-get.js';
323
- import { operation as o322 } from './workspaces/get.js';
324
- import { operation as o323 } from './workspaces/list.js';
325
- import { operation as o324 } from './workspaces/members-list.js';
326
- import { operation as o325 } from './workspaces/members-list--all.js';
327
- import { operation as o326 } from './workspaces/sandbox-limit-get.js';
328
- import { operation as o327 } from './workspaces/sandboxes-stop.js';
329
- import { operation as o328 } from './workspaces/timezone-set.js';
330
- import { operation as o329 } from './workspaces/usage-breakdown-get.js';
331
- import { operation as o330 } from './workspaces/usage-get.js';
235
+ import { operation as o234 } from './sensei/writing-get.js';
236
+ import { operation as o235 } from './sensei/writing-set.js';
237
+ import { operation as o236 } from './sensei/writing-samples-create.js';
238
+ import { operation as o237 } from './sessions/app-stack-start.js';
239
+ import { operation as o238 } from './sessions/artifacts-create.js';
240
+ import { operation as o239 } from './sessions/artifacts-get.js';
241
+ import { operation as o240 } from './sessions/artifacts-list.js';
242
+ import { operation as o241 } from './sessions/create.js';
243
+ import { operation as o242 } from './sessions/delete.js';
244
+ import { operation as o243 } from './sessions/desktop-control-set.js';
245
+ import { operation as o244 } from './sessions/desktop-get.js';
246
+ import { operation as o245 } from './sessions/desktop-start.js';
247
+ import { operation as o246 } from './sessions/diff-comments-create.js';
248
+ import { operation as o247 } from './sessions/diff-comments-delete.js';
249
+ import { operation as o248 } from './sessions/diff-comments-list.js';
250
+ import { operation as o249 } from './sessions/diff-comments-update.js';
251
+ import { operation as o250 } from './sessions/diff-commits-list.js';
252
+ import { operation as o251 } from './sessions/diff-files-list.js';
253
+ import { operation as o252 } from './sessions/diff-patch-get.js';
254
+ import { operation as o253 } from './sessions/files-get.js';
255
+ import { operation as o254 } from './sessions/files-list.js';
256
+ import { operation as o255 } from './sessions/files-set.js';
257
+ import { operation as o256 } from './sessions/get.js';
258
+ import { operation as o257 } from './sessions/git-state-get.js';
259
+ import { operation as o258 } from './sessions/go-ahead-delete.js';
260
+ import { operation as o259 } from './sessions/go-ahead-set.js';
261
+ import { operation as o260 } from './sessions/jobs-cancel.js';
262
+ import { operation as o261 } from './sessions/jobs-get.js';
263
+ import { operation as o262 } from './sessions/jobs-list.js';
264
+ import { operation as o263 } from './sessions/labels-set.js';
265
+ import { operation as o264 } from './sessions/labels-update.js';
266
+ import { operation as o265 } from './sessions/list.js';
267
+ import { operation as o266 } from './sessions/list--all.js';
268
+ import { operation as o267 } from './sessions/mark-read.js';
269
+ import { operation as o268 } from './sessions/messages-get.js';
270
+ import { operation as o269 } from './sessions/messages-list.js';
271
+ import { operation as o270 } from './sessions/prompt-update.js';
272
+ import { operation as o271 } from './sessions/qa-runs-finish.js';
273
+ import { operation as o272 } from './sessions/qa-runs-fixes-create.js';
274
+ import { operation as o273 } from './sessions/qa-runs-get.js';
275
+ import { operation as o274 } from './sessions/qa-runs-results-create.js';
276
+ import { operation as o275 } from './sessions/qa-runs-start.js';
277
+ import { operation as o276 } from './sessions/qa-runs-stop.js';
278
+ import { operation as o277 } from './sessions/qa-set.js';
279
+ import { operation as o278 } from './sessions/queue-delete.js';
280
+ import { operation as o279 } from './sessions/queue-list.js';
281
+ import { operation as o280 } from './sessions/queue-move.js';
282
+ import { operation as o281 } from './sessions/queue-resume.js';
283
+ import { operation as o282 } from './sessions/queue-send.js';
284
+ import { operation as o283 } from './sessions/queue-steer.js';
285
+ import { operation as o284 } from './sessions/queue-update.js';
286
+ import { operation as o285 } from './sessions/review-set.js';
287
+ import { operation as o286 } from './sessions/runtime-commands-run.js';
288
+ import { operation as o287 } from './sessions/search.js';
289
+ import { operation as o288 } from './sessions/send.js';
290
+ import { operation as o289 } from './sessions/start.js';
291
+ import { operation as o290 } from './sessions/steer.js';
292
+ import { operation as o291 } from './sessions/update.js';
293
+ import { operation as o292 } from './skills/create.js';
294
+ import { operation as o293 } from './skills/create--personal.js';
295
+ import { operation as o294 } from './skills/delete.js';
296
+ import { operation as o295 } from './skills/delete--personal.js';
297
+ import { operation as o296 } from './skills/get.js';
298
+ import { operation as o297 } from './skills/get--personal.js';
299
+ import { operation as o298 } from './skills/list.js';
300
+ import { operation as o299 } from './skills/list--personal.js';
301
+ import { operation as o300 } from './skills/update.js';
302
+ import { operation as o301 } from './skills/update--personal.js';
303
+ import { operation as o302 } from './tasks/create.js';
304
+ import { operation as o303 } from './tasks/create--personal.js';
305
+ import { operation as o304 } from './tasks/delete.js';
306
+ import { operation as o305 } from './tasks/delete--personal.js';
307
+ import { operation as o306 } from './tasks/get.js';
308
+ import { operation as o307 } from './tasks/get--personal.js';
309
+ import { operation as o308 } from './tasks/labels-list.js';
310
+ import { operation as o309 } from './tasks/list.js';
311
+ import { operation as o310 } from './tasks/list--all.js';
312
+ import { operation as o311 } from './tasks/list--personal.js';
313
+ import { operation as o312 } from './tasks/move.js';
314
+ import { operation as o313 } from './tasks/move--personal.js';
315
+ import { operation as o314 } from './tasks/start.js';
316
+ import { operation as o315 } from './tasks/start--personal.js';
317
+ import { operation as o316 } from './tasks/update.js';
318
+ import { operation as o317 } from './tasks/update--personal.js';
319
+ import { operation as o318 } from './user/api-keys-delete.js';
320
+ import { operation as o319 } from './user/profile-get.js';
321
+ import { operation as o320 } from './user/push-devices-create.js';
322
+ import { operation as o321 } from './user/push-devices-delete.js';
323
+ import { operation as o322 } from './user/usage-get.js';
324
+ import { operation as o323 } from './workspaces/artifacts-search.js';
325
+ import { operation as o324 } from './workspaces/credits-get.js';
326
+ import { operation as o325 } from './workspaces/get.js';
327
+ import { operation as o326 } from './workspaces/list.js';
328
+ import { operation as o327 } from './workspaces/members-list.js';
329
+ import { operation as o328 } from './workspaces/members-list--all.js';
330
+ import { operation as o329 } from './workspaces/sandbox-limit-get.js';
331
+ import { operation as o330 } from './workspaces/sandboxes-stop.js';
332
+ import { operation as o331 } from './workspaces/timezone-set.js';
333
+ import { operation as o332 } from './workspaces/usage-breakdown-get.js';
334
+ import { operation as o333 } from './workspaces/usage-get.js';
332
335
  export const operations = [
333
336
  o0,
334
337
  o1,
@@ -661,4 +664,7 @@ export const operations = [
661
664
  o328,
662
665
  o329,
663
666
  o330,
667
+ o331,
668
+ o332,
669
+ o333,
664
670
  ];
@@ -6,7 +6,7 @@ export const operation = {
6
6
  "merge-agent",
7
7
  "get"
8
8
  ],
9
- "summary": "Read the project's Merge agent: its mode (train or batch), the base and whether it has GitHub's merge queue, the go-ahead pull requests waiting with their QA and GitHub's review decision now, and the open run and earlier runs. --live false reads Kosuke's own data only: no GitHub call, and GitHub's facts (each pull request's head and review decision, the merge queue) are null.",
9
+ "summary": "Read the project's Merge agent: its mode (train or batch), the base and whether it has GitHub's merge queue, the go-ahead pull requests waiting for the next run with their QA and GitHub's review decision now, the Batch the queue is split by (its CI, review, QA, members and ejections), and the open run and earlier runs. --live false reads Kosuke's own data only: no GitHub call, and GitHub's facts (each waiting pull request's head and review decision, the Batch pull request's review, the merge queue) are null.",
10
10
  "pathParams": [
11
11
  "projectId"
12
12
  ],
@@ -73,6 +73,13 @@ export const operation = {
73
73
  "required": false,
74
74
  "description": "The negative button's label: one word of 12 characters at most that says what the member's no does, such as \"Reject\", \"Skip\", \"Dismiss\" or \"Later\"; those are examples, not a list to pick from. Omit it for \"Reject\" on a card with a verb and \"Dismiss\" on one without. Set it when the default misdescribes the no. On a card with no destructive action, its tap skips the card and sends nothing; a destructive action takes this button's place and sends its prompt."
75
75
  },
76
+ {
77
+ "name": "replyLabel",
78
+ "flag": "reply-label",
79
+ "kind": "string",
80
+ "required": false,
81
+ "description": "The Reply button's label: one word of 12 characters at most that says what the member's typed words do on this card, such as \"Ask\", \"Change\", \"Edit\" or \"Answer\"; those are examples, not a list to pick from. Omit it for \"Reply\", and a card that drafts a reply reads \"Edit\" unless it is set. Set it when Reply misdescribes what typing here does."
82
+ },
76
83
  {
77
84
  "name": "negativeTone",
78
85
  "flag": "negative-tone",
@@ -0,0 +1,19 @@
1
+ export const operation = {
2
+ "method": "get",
3
+ "path": "/api/sensei/writing",
4
+ "command": [
5
+ "sensei",
6
+ "writing",
7
+ "get"
8
+ ],
9
+ "summary": "Read the member's writing.md and its revision. Only a writing-style system cron run may.",
10
+ "pathParams": [],
11
+ "query": [],
12
+ "body": null,
13
+ "multipart": null,
14
+ "attachments": false,
15
+ "anonymous": false,
16
+ "agents": [
17
+ "senseiToken"
18
+ ]
19
+ };
@@ -0,0 +1,43 @@
1
+ export const operation = {
2
+ "method": "post",
3
+ "path": "/api/sensei/writing/classify",
4
+ "command": [
5
+ "sensei",
6
+ "writing-samples",
7
+ "create"
8
+ ],
9
+ "summary": "Keep the messages the member typed themselves: what Sensei sent for them is left out, and Jev judges the rest against their own Sensei prompts. At most 50 per call. Only a writing-style system cron run may.",
10
+ "pathParams": [],
11
+ "query": [],
12
+ "body": {
13
+ "fields": [
14
+ {
15
+ "name": "channel",
16
+ "flag": "channel",
17
+ "kind": "string",
18
+ "required": true,
19
+ "description": "The channel the messages were sent on.",
20
+ "choices": [
21
+ "gmail",
22
+ "slack",
23
+ "whatsapp",
24
+ "telegram"
25
+ ]
26
+ },
27
+ {
28
+ "name": "messages",
29
+ "flag": "messages",
30
+ "kind": "json",
31
+ "required": true,
32
+ "description": "At most 50 messages the member sent."
33
+ }
34
+ ],
35
+ "required": true
36
+ },
37
+ "multipart": null,
38
+ "attachments": false,
39
+ "anonymous": false,
40
+ "agents": [
41
+ "senseiToken"
42
+ ]
43
+ };
@@ -0,0 +1,37 @@
1
+ export const operation = {
2
+ "method": "put",
3
+ "path": "/api/sensei/writing",
4
+ "command": [
5
+ "sensei",
6
+ "writing",
7
+ "set"
8
+ ],
9
+ "summary": "Save the member's whole writing.md at the revision you read. Refused with 409 when it changed since. Only a writing-style system cron run may.",
10
+ "pathParams": [],
11
+ "query": [],
12
+ "body": {
13
+ "fields": [
14
+ {
15
+ "name": "content",
16
+ "flag": "content",
17
+ "kind": "string",
18
+ "required": true,
19
+ "description": "The whole writing.md, as Markdown."
20
+ },
21
+ {
22
+ "name": "ifRevision",
23
+ "flag": "if-revision",
24
+ "kind": "integer",
25
+ "required": true,
26
+ "description": "The revision you read the file at; 0 for a member with no file yet."
27
+ }
28
+ ],
29
+ "required": true
30
+ },
31
+ "multipart": null,
32
+ "attachments": false,
33
+ "anonymous": false,
34
+ "agents": [
35
+ "senseiToken"
36
+ ]
37
+ };
package/openapi.json CHANGED
@@ -17161,7 +17161,7 @@
17161
17161
  "/api/projects/{projectId}/merge-agent": {
17162
17162
  "get": {
17163
17163
  "operationId": "projectsMergeAgentGet",
17164
- "summary": "Read the project's Merge agent: its mode (train or batch), the base and whether it has GitHub's merge queue, the go-ahead pull requests waiting with their QA and GitHub's review decision now, and the open run and earlier runs. --live false reads Kosuke's own data only: no GitHub call, and GitHub's facts (each pull request's head and review decision, the merge queue) are null.",
17164
+ "summary": "Read the project's Merge agent: its mode (train or batch), the base and whether it has GitHub's merge queue, the go-ahead pull requests waiting for the next run with their QA and GitHub's review decision now, the Batch the queue is split by (its CI, review, QA, members and ejections), and the open run and earlier runs. --live false reads Kosuke's own data only: no GitHub call, and GitHub's facts (each waiting pull request's head and review decision, the Batch pull request's review, the merge queue) are null.",
17165
17165
  "tags": ["projects"],
17166
17166
  "x-kosuke-command": ["projects", "merge-agent", "get"],
17167
17167
  "x-kosuke-sandbox-token": true,
@@ -21483,6 +21483,12 @@
21483
21483
  "minLength": 1,
21484
21484
  "maxLength": 20
21485
21485
  },
21486
+ "replyLabel": {
21487
+ "description": "The Reply button's label: one word of 12 characters at most that says what the member's typed words do on this card, such as \"Ask\", \"Change\", \"Edit\" or \"Answer\"; those are examples, not a list to pick from. Omit it for \"Reply\", and a card that drafts a reply reads \"Edit\" unless it is set. Set it when Reply misdescribes what typing here does.",
21488
+ "type": "string",
21489
+ "minLength": 1,
21490
+ "maxLength": 20
21491
+ },
21486
21492
  "negativeTone": {
21487
21493
  "description": "How the negative button reads, set apart from its label: destructive (red) for a no that turns something down, neutral for one that only sets the card aside. Omit it for destructive on a card with a verb and neutral on one without.",
21488
21494
  "type": "string",
@@ -22004,6 +22010,44 @@
22004
22010
  "minLength": 1,
22005
22011
  "maxLength": 4000,
22006
22012
  "description": "The reply as written, without the Sign as Sensei marker: Kosuke adds it at send when the member has it on."
22013
+ },
22014
+ "attachments": {
22015
+ "description": "Personal Files sent with the reply, Gmail only: fileId, version, name, mediaType and byteSize exactly as `kosuke files get personal <fileId>` prints them.",
22016
+ "minItems": 1,
22017
+ "maxItems": 3,
22018
+ "type": "array",
22019
+ "items": {
22020
+ "type": "object",
22021
+ "properties": {
22022
+ "fileId": {
22023
+ "type": "string",
22024
+ "format": "uuid",
22025
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
22026
+ },
22027
+ "version": {
22028
+ "type": "integer",
22029
+ "exclusiveMinimum": 0,
22030
+ "maximum": 9007199254740991
22031
+ },
22032
+ "name": {
22033
+ "type": "string",
22034
+ "minLength": 1,
22035
+ "maxLength": 255
22036
+ },
22037
+ "mediaType": {
22038
+ "type": "string",
22039
+ "minLength": 1,
22040
+ "maxLength": 255
22041
+ },
22042
+ "byteSize": {
22043
+ "type": "integer",
22044
+ "exclusiveMinimum": 0,
22045
+ "maximum": 9007199254740991
22046
+ }
22047
+ },
22048
+ "required": ["fileId", "version", "name", "mediaType", "byteSize"],
22049
+ "additionalProperties": false
22050
+ }
22007
22051
  }
22008
22052
  },
22009
22053
  "required": ["type", "connection", "conversation", "messageId", "text"],
@@ -24590,6 +24634,193 @@
24590
24634
  }
24591
24635
  }
24592
24636
  },
24637
+ "/api/sensei/writing": {
24638
+ "get": {
24639
+ "operationId": "senseiWritingGet",
24640
+ "summary": "Read the member's writing.md and its revision. Only a writing-style system cron run may.",
24641
+ "tags": ["sensei"],
24642
+ "x-kosuke-command": ["sensei", "writing", "get"],
24643
+ "x-kosuke-sensei-token": true,
24644
+ "responses": {
24645
+ "2XX": {
24646
+ "description": "Success envelope",
24647
+ "content": {
24648
+ "application/json": {
24649
+ "schema": {
24650
+ "$ref": "#/components/schemas/ApiSuccess"
24651
+ }
24652
+ }
24653
+ }
24654
+ },
24655
+ "4XX": {
24656
+ "description": "Error envelope",
24657
+ "content": {
24658
+ "application/json": {
24659
+ "schema": {
24660
+ "$ref": "#/components/schemas/ApiError"
24661
+ }
24662
+ }
24663
+ }
24664
+ },
24665
+ "5XX": {
24666
+ "description": "Error envelope",
24667
+ "content": {
24668
+ "application/json": {
24669
+ "schema": {
24670
+ "$ref": "#/components/schemas/ApiError"
24671
+ }
24672
+ }
24673
+ }
24674
+ }
24675
+ }
24676
+ },
24677
+ "put": {
24678
+ "operationId": "senseiWritingSet",
24679
+ "summary": "Save the member's whole writing.md at the revision you read. Refused with 409 when it changed since. Only a writing-style system cron run may.",
24680
+ "tags": ["sensei"],
24681
+ "x-kosuke-command": ["sensei", "writing", "set"],
24682
+ "x-kosuke-sensei-token": true,
24683
+ "requestBody": {
24684
+ "required": true,
24685
+ "content": {
24686
+ "application/json": {
24687
+ "schema": {
24688
+ "type": "object",
24689
+ "properties": {
24690
+ "content": {
24691
+ "type": "string",
24692
+ "minLength": 1,
24693
+ "maxLength": 10000,
24694
+ "description": "The whole writing.md, as Markdown."
24695
+ },
24696
+ "ifRevision": {
24697
+ "type": "integer",
24698
+ "minimum": 0,
24699
+ "maximum": 9007199254740991,
24700
+ "description": "The revision you read the file at; 0 for a member with no file yet."
24701
+ }
24702
+ },
24703
+ "required": ["content", "ifRevision"]
24704
+ }
24705
+ }
24706
+ }
24707
+ },
24708
+ "responses": {
24709
+ "2XX": {
24710
+ "description": "Success envelope",
24711
+ "content": {
24712
+ "application/json": {
24713
+ "schema": {
24714
+ "$ref": "#/components/schemas/ApiSuccess"
24715
+ }
24716
+ }
24717
+ }
24718
+ },
24719
+ "4XX": {
24720
+ "description": "Error envelope",
24721
+ "content": {
24722
+ "application/json": {
24723
+ "schema": {
24724
+ "$ref": "#/components/schemas/ApiError"
24725
+ }
24726
+ }
24727
+ }
24728
+ },
24729
+ "5XX": {
24730
+ "description": "Error envelope",
24731
+ "content": {
24732
+ "application/json": {
24733
+ "schema": {
24734
+ "$ref": "#/components/schemas/ApiError"
24735
+ }
24736
+ }
24737
+ }
24738
+ }
24739
+ }
24740
+ }
24741
+ },
24742
+ "/api/sensei/writing/classify": {
24743
+ "post": {
24744
+ "operationId": "senseiWritingSamplesCreate",
24745
+ "summary": "Keep the messages the member typed themselves: what Sensei sent for them is left out, and Jev judges the rest against their own Sensei prompts. At most 50 per call. Only a writing-style system cron run may.",
24746
+ "tags": ["sensei"],
24747
+ "x-kosuke-command": ["sensei", "writing-samples", "create"],
24748
+ "x-kosuke-sensei-token": true,
24749
+ "requestBody": {
24750
+ "required": true,
24751
+ "content": {
24752
+ "application/json": {
24753
+ "schema": {
24754
+ "type": "object",
24755
+ "properties": {
24756
+ "channel": {
24757
+ "type": "string",
24758
+ "enum": ["gmail", "slack", "whatsapp", "telegram"],
24759
+ "description": "The channel the messages were sent on."
24760
+ },
24761
+ "messages": {
24762
+ "minItems": 1,
24763
+ "maxItems": 50,
24764
+ "type": "array",
24765
+ "items": {
24766
+ "type": "object",
24767
+ "properties": {
24768
+ "id": {
24769
+ "type": "string",
24770
+ "minLength": 1,
24771
+ "maxLength": 512,
24772
+ "description": "The message's id on its channel."
24773
+ },
24774
+ "text": {
24775
+ "type": "string",
24776
+ "maxLength": 20000,
24777
+ "description": "What the member sent, exactly."
24778
+ }
24779
+ },
24780
+ "required": ["id", "text"]
24781
+ },
24782
+ "description": "At most 50 messages the member sent."
24783
+ }
24784
+ },
24785
+ "required": ["channel", "messages"]
24786
+ }
24787
+ }
24788
+ }
24789
+ },
24790
+ "responses": {
24791
+ "2XX": {
24792
+ "description": "Success envelope",
24793
+ "content": {
24794
+ "application/json": {
24795
+ "schema": {
24796
+ "$ref": "#/components/schemas/ApiSuccess"
24797
+ }
24798
+ }
24799
+ }
24800
+ },
24801
+ "4XX": {
24802
+ "description": "Error envelope",
24803
+ "content": {
24804
+ "application/json": {
24805
+ "schema": {
24806
+ "$ref": "#/components/schemas/ApiError"
24807
+ }
24808
+ }
24809
+ }
24810
+ },
24811
+ "5XX": {
24812
+ "description": "Error envelope",
24813
+ "content": {
24814
+ "application/json": {
24815
+ "schema": {
24816
+ "$ref": "#/components/schemas/ApiError"
24817
+ }
24818
+ }
24819
+ }
24820
+ }
24821
+ }
24822
+ }
24823
+ },
24593
24824
  "/api/shared-previews/{slug}": {
24594
24825
  "get": {
24595
24826
  "operationId": "previewSharedGet",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosuke-ai/kosuke",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "description": "Kosuke platform CLI. The client customers install to drive app.kosuke.ai from their own machine.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -40,13 +40,10 @@
40
40
  "vitest": "^4.1.12"
41
41
  },
42
42
  "kosukeRelease": {
43
- "sourceCommit": "86278ec09a864dcde0bb3e16ed23afadae40c911",
44
- "sourceIdentity": "a0c9733331bfa8195d4ef9f64e65b845ca52ab4b327aaf5faf71ae2d19979401",
43
+ "sourceCommit": "cb51bc11871728ee3f28d65bf3a04c1fe1f6de53",
44
+ "sourceIdentity": "c19893ccb7983c9906e001070169c72fe8214a961aa02880fea7326c73197315",
45
45
  "fragments": [
46
- "sandbox-limit-occupants-7r2k9p.json",
47
- "sensei-assess-stage-estimate-shn9cu.json",
48
- "provider-help-request-slice-a.json",
49
- "sensei-cards-ids-19r4bu.json"
46
+ "merge-agent-batch-split-bprvoz.json"
50
47
  ]
51
48
  }
52
49
  }