@kosuke-ai/cli 5.8.0 → 5.10.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.
@@ -45,121 +45,125 @@ import { operation as o43 } from './projects/env-vars-remove.js';
45
45
  import { operation as o44 } from './projects/get.js';
46
46
  import { operation as o45 } from './projects/labels.js';
47
47
  import { operation as o46 } from './projects/labels-color.js';
48
- import { operation as o47 } from './projects/list.js';
49
- import { operation as o48 } from './projects/services-add.js';
50
- import { operation as o49 } from './projects/services-list.js';
51
- import { operation as o50 } from './projects/services-remove.js';
52
- import { operation as o51 } from './projects/services-update.js';
53
- import { operation as o52 } from './projects/settings-get.js';
54
- import { operation as o53 } from './projects/settings-import.js';
55
- import { operation as o54 } from './projects/settings-update.js';
56
- import { operation as o55 } from './projects/skills.js';
57
- import { operation as o56 } from './projects/update.js';
58
- import { operation as o57 } from './sessions/activate.js';
59
- import { operation as o58 } from './sessions/all.js';
60
- import { operation as o59 } from './sessions/artifacts-attach.js';
61
- import { operation as o60 } from './sessions/artifacts-get.js';
62
- import { operation as o61 } from './sessions/artifacts-list.js';
63
- import { operation as o62 } from './sessions/comments-add.js';
64
- import { operation as o63 } from './sessions/comments-delete.js';
65
- import { operation as o64 } from './sessions/comments-list.js';
66
- import { operation as o65 } from './sessions/comments-update.js';
67
- import { operation as o66 } from './sessions/create.js';
68
- import { operation as o67 } from './sessions/delete.js';
69
- import { operation as o68 } from './sessions/diff-comments-add.js';
70
- import { operation as o69 } from './sessions/diff-comments-delete.js';
71
- import { operation as o70 } from './sessions/diff-comments-list.js';
72
- import { operation as o71 } from './sessions/diff-comments-update.js';
73
- import { operation as o72 } from './sessions/diff-commits.js';
74
- import { operation as o73 } from './sessions/diff-files.js';
75
- import { operation as o74 } from './sessions/diff-patch.js';
76
- import { operation as o75 } from './sessions/edit-prompt.js';
77
- import { operation as o76 } from './sessions/files-get.js';
78
- import { operation as o77 } from './sessions/files-list.js';
79
- import { operation as o78 } from './sessions/files-write.js';
80
- import { operation as o79 } from './sessions/get.js';
81
- import { operation as o80 } from './sessions/git-commit.js';
82
- import { operation as o81 } from './sessions/git-commit-message.js';
83
- import { operation as o82 } from './sessions/git-push.js';
84
- import { operation as o83 } from './sessions/git-state.js';
85
- import { operation as o84 } from './sessions/jobs-cancel.js';
86
- import { operation as o85 } from './sessions/jobs-get.js';
87
- import { operation as o86 } from './sessions/jobs-list.js';
88
- import { operation as o87 } from './sessions/labels-edit.js';
89
- import { operation as o88 } from './sessions/labels-set.js';
90
- import { operation as o89 } from './sessions/list.js';
91
- import { operation as o90 } from './sessions/mark-read.js';
92
- import { operation as o91 } from './sessions/messages.js';
93
- import { operation as o92 } from './sessions/needs-you.js';
94
- import { operation as o93 } from './sessions/qa-slot.js';
95
- import { operation as o94 } from './sessions/queue-delete.js';
96
- import { operation as o95 } from './sessions/queue-list.js';
97
- import { operation as o96 } from './sessions/queue-move.js';
98
- import { operation as o97 } from './sessions/queue-resume.js';
99
- import { operation as o98 } from './sessions/queue-send.js';
100
- import { operation as o99 } from './sessions/queue-steer.js';
101
- import { operation as o100 } from './sessions/queue-update.js';
102
- import { operation as o101 } from './sessions/runtime-command.js';
103
- import { operation as o102 } from './sessions/search.js';
104
- import { operation as o103 } from './sessions/send.js';
105
- import { operation as o104 } from './sessions/steer.js';
106
- import { operation as o105 } from './sessions/title-generate.js';
107
- import { operation as o106 } from './sessions/update.js';
108
- import { operation as o107 } from './user/auth-token-revoke.js';
109
- import { operation as o108 } from './user/plugins-list.js';
110
- import { operation as o109 } from './user/plugins-update.js';
111
- import { operation as o110 } from './user/profile.js';
112
- import { operation as o111 } from './user/push-devices-register.js';
113
- import { operation as o112 } from './user/push-devices-remove.js';
114
- import { operation as o113 } from './user/skills-create.js';
115
- import { operation as o114 } from './user/skills-delete.js';
116
- import { operation as o115 } from './user/skills-get.js';
117
- import { operation as o116 } from './user/skills-list.js';
118
- import { operation as o117 } from './user/skills-update.js';
119
- import { operation as o118 } from './user/subscriptions-delete.js';
120
- import { operation as o119 } from './user/subscriptions-get.js';
121
- import { operation as o120 } from './user/subscriptions-login-claude-complete.js';
122
- import { operation as o121 } from './user/subscriptions-login-claude-start.js';
123
- import { operation as o122 } from './user/subscriptions-login-codex-complete.js';
124
- import { operation as o123 } from './user/subscriptions-login-codex-start.js';
125
- import { operation as o124 } from './user/subscriptions-set-default-model.js';
126
- import { operation as o125 } from './user/subscriptions-set-key.js';
127
- import { operation as o126 } from './user/subscriptions-usage.js';
128
- import { operation as o127 } from './workspaces/access-status.js';
129
- import { operation as o128 } from './workspaces/ai-provider-get.js';
130
- import { operation as o129 } from './workspaces/ai-provider-remove.js';
131
- import { operation as o130 } from './workspaces/ai-provider-set.js';
132
- import { operation as o131 } from './workspaces/ai-provider-usage-claude.js';
133
- import { operation as o132 } from './workspaces/ai-provider-usage-codex.js';
134
- import { operation as o133 } from './workspaces/ai-provider-usage-coding-plan.js';
135
- import { operation as o134 } from './workspaces/artifacts.js';
136
- import { operation as o135 } from './workspaces/credits.js';
137
- import { operation as o136 } from './workspaces/get.js';
138
- import { operation as o137 } from './workspaces/getting-started-get.js';
139
- import { operation as o138 } from './workspaces/getting-started-update.js';
140
- import { operation as o139 } from './workspaces/integrations-sentry-get.js';
141
- import { operation as o140 } from './workspaces/integrations-sentry-remove.js';
142
- import { operation as o141 } from './workspaces/integrations-slack-get.js';
143
- import { operation as o142 } from './workspaces/lead-cards.js';
144
- import { operation as o143 } from './workspaces/lead-notifications-open.js';
145
- import { operation as o144 } from './workspaces/lead-proposals-create.js';
146
- import { operation as o145 } from './workspaces/lead-triage.js';
147
- import { operation as o146 } from './workspaces/list.js';
148
- import { operation as o147 } from './workspaces/members.js';
149
- import { operation as o148 } from './workspaces/plugins-list.js';
150
- import { operation as o149 } from './workspaces/plugins-update.js';
151
- import { operation as o150 } from './workspaces/provider-login-claude-complete.js';
152
- import { operation as o151 } from './workspaces/provider-login-claude-start.js';
153
- import { operation as o152 } from './workspaces/provider-login-codex-complete.js';
154
- import { operation as o153 } from './workspaces/provider-login-codex-start.js';
155
- import { operation as o154 } from './workspaces/sandbox-limit.js';
156
- import { operation as o155 } from './workspaces/skills-create.js';
157
- import { operation as o156 } from './workspaces/skills-delete.js';
158
- import { operation as o157 } from './workspaces/skills-get.js';
159
- import { operation as o158 } from './workspaces/skills-list.js';
160
- import { operation as o159 } from './workspaces/skills-update.js';
161
- import { operation as o160 } from './workspaces/stop-sandboxes.js';
162
- import { operation as o161 } from './workspaces/usage.js';
48
+ import { operation as o47 } from './projects/labels-delete.js';
49
+ import { operation as o48 } from './projects/labels-usage.js';
50
+ import { operation as o49 } from './projects/list.js';
51
+ import { operation as o50 } from './projects/qa-guide-get.js';
52
+ import { operation as o51 } from './projects/qa-guide-set.js';
53
+ import { operation as o52 } from './projects/services-add.js';
54
+ import { operation as o53 } from './projects/services-list.js';
55
+ import { operation as o54 } from './projects/services-remove.js';
56
+ import { operation as o55 } from './projects/services-update.js';
57
+ import { operation as o56 } from './projects/settings-get.js';
58
+ import { operation as o57 } from './projects/settings-import.js';
59
+ import { operation as o58 } from './projects/settings-update.js';
60
+ import { operation as o59 } from './projects/skills.js';
61
+ import { operation as o60 } from './projects/update.js';
62
+ import { operation as o61 } from './sessions/activate.js';
63
+ import { operation as o62 } from './sessions/all.js';
64
+ import { operation as o63 } from './sessions/artifacts-attach.js';
65
+ import { operation as o64 } from './sessions/artifacts-get.js';
66
+ import { operation as o65 } from './sessions/artifacts-list.js';
67
+ import { operation as o66 } from './sessions/comments-add.js';
68
+ import { operation as o67 } from './sessions/comments-delete.js';
69
+ import { operation as o68 } from './sessions/comments-list.js';
70
+ import { operation as o69 } from './sessions/comments-update.js';
71
+ import { operation as o70 } from './sessions/create.js';
72
+ import { operation as o71 } from './sessions/delete.js';
73
+ import { operation as o72 } from './sessions/diff-comments-add.js';
74
+ import { operation as o73 } from './sessions/diff-comments-delete.js';
75
+ import { operation as o74 } from './sessions/diff-comments-list.js';
76
+ import { operation as o75 } from './sessions/diff-comments-update.js';
77
+ import { operation as o76 } from './sessions/diff-commits.js';
78
+ import { operation as o77 } from './sessions/diff-files.js';
79
+ import { operation as o78 } from './sessions/diff-patch.js';
80
+ import { operation as o79 } from './sessions/edit-prompt.js';
81
+ import { operation as o80 } from './sessions/files-get.js';
82
+ import { operation as o81 } from './sessions/files-list.js';
83
+ import { operation as o82 } from './sessions/files-write.js';
84
+ import { operation as o83 } from './sessions/get.js';
85
+ import { operation as o84 } from './sessions/git-commit.js';
86
+ import { operation as o85 } from './sessions/git-commit-message.js';
87
+ import { operation as o86 } from './sessions/git-push.js';
88
+ import { operation as o87 } from './sessions/git-state.js';
89
+ import { operation as o88 } from './sessions/jobs-cancel.js';
90
+ import { operation as o89 } from './sessions/jobs-get.js';
91
+ import { operation as o90 } from './sessions/jobs-list.js';
92
+ import { operation as o91 } from './sessions/labels-edit.js';
93
+ import { operation as o92 } from './sessions/labels-set.js';
94
+ import { operation as o93 } from './sessions/list.js';
95
+ import { operation as o94 } from './sessions/mark-read.js';
96
+ import { operation as o95 } from './sessions/messages.js';
97
+ import { operation as o96 } from './sessions/needs-you.js';
98
+ import { operation as o97 } from './sessions/qa-slot.js';
99
+ import { operation as o98 } from './sessions/queue-delete.js';
100
+ import { operation as o99 } from './sessions/queue-list.js';
101
+ import { operation as o100 } from './sessions/queue-move.js';
102
+ import { operation as o101 } from './sessions/queue-resume.js';
103
+ import { operation as o102 } from './sessions/queue-send.js';
104
+ import { operation as o103 } from './sessions/queue-steer.js';
105
+ import { operation as o104 } from './sessions/queue-update.js';
106
+ import { operation as o105 } from './sessions/runtime-command.js';
107
+ import { operation as o106 } from './sessions/search.js';
108
+ import { operation as o107 } from './sessions/send.js';
109
+ import { operation as o108 } from './sessions/steer.js';
110
+ import { operation as o109 } from './sessions/title-generate.js';
111
+ import { operation as o110 } from './sessions/update.js';
112
+ import { operation as o111 } from './user/auth-token-revoke.js';
113
+ import { operation as o112 } from './user/plugins-list.js';
114
+ import { operation as o113 } from './user/plugins-update.js';
115
+ import { operation as o114 } from './user/profile.js';
116
+ import { operation as o115 } from './user/push-devices-register.js';
117
+ import { operation as o116 } from './user/push-devices-remove.js';
118
+ import { operation as o117 } from './user/skills-create.js';
119
+ import { operation as o118 } from './user/skills-delete.js';
120
+ import { operation as o119 } from './user/skills-get.js';
121
+ import { operation as o120 } from './user/skills-list.js';
122
+ import { operation as o121 } from './user/skills-update.js';
123
+ import { operation as o122 } from './user/subscriptions-delete.js';
124
+ import { operation as o123 } from './user/subscriptions-get.js';
125
+ import { operation as o124 } from './user/subscriptions-login-claude-complete.js';
126
+ import { operation as o125 } from './user/subscriptions-login-claude-start.js';
127
+ import { operation as o126 } from './user/subscriptions-login-codex-complete.js';
128
+ import { operation as o127 } from './user/subscriptions-login-codex-start.js';
129
+ import { operation as o128 } from './user/subscriptions-set-default-model.js';
130
+ import { operation as o129 } from './user/subscriptions-set-key.js';
131
+ import { operation as o130 } from './user/subscriptions-usage.js';
132
+ import { operation as o131 } from './workspaces/access-status.js';
133
+ import { operation as o132 } from './workspaces/ai-provider-get.js';
134
+ import { operation as o133 } from './workspaces/ai-provider-remove.js';
135
+ import { operation as o134 } from './workspaces/ai-provider-set.js';
136
+ import { operation as o135 } from './workspaces/ai-provider-usage-claude.js';
137
+ import { operation as o136 } from './workspaces/ai-provider-usage-codex.js';
138
+ import { operation as o137 } from './workspaces/ai-provider-usage-coding-plan.js';
139
+ import { operation as o138 } from './workspaces/artifacts.js';
140
+ import { operation as o139 } from './workspaces/credits.js';
141
+ import { operation as o140 } from './workspaces/get.js';
142
+ import { operation as o141 } from './workspaces/getting-started-get.js';
143
+ import { operation as o142 } from './workspaces/getting-started-update.js';
144
+ import { operation as o143 } from './workspaces/integrations-sentry-get.js';
145
+ import { operation as o144 } from './workspaces/integrations-sentry-remove.js';
146
+ import { operation as o145 } from './workspaces/integrations-slack-get.js';
147
+ import { operation as o146 } from './workspaces/lead-cards.js';
148
+ import { operation as o147 } from './workspaces/lead-notifications-open.js';
149
+ import { operation as o148 } from './workspaces/lead-proposals-create.js';
150
+ import { operation as o149 } from './workspaces/lead-triage.js';
151
+ import { operation as o150 } from './workspaces/list.js';
152
+ import { operation as o151 } from './workspaces/members.js';
153
+ import { operation as o152 } from './workspaces/plugins-list.js';
154
+ import { operation as o153 } from './workspaces/plugins-update.js';
155
+ import { operation as o154 } from './workspaces/provider-login-claude-complete.js';
156
+ import { operation as o155 } from './workspaces/provider-login-claude-start.js';
157
+ import { operation as o156 } from './workspaces/provider-login-codex-complete.js';
158
+ import { operation as o157 } from './workspaces/provider-login-codex-start.js';
159
+ import { operation as o158 } from './workspaces/sandbox-limit.js';
160
+ import { operation as o159 } from './workspaces/skills-create.js';
161
+ import { operation as o160 } from './workspaces/skills-delete.js';
162
+ import { operation as o161 } from './workspaces/skills-get.js';
163
+ import { operation as o162 } from './workspaces/skills-list.js';
164
+ import { operation as o163 } from './workspaces/skills-update.js';
165
+ import { operation as o164 } from './workspaces/stop-sandboxes.js';
166
+ import { operation as o165 } from './workspaces/usage.js';
163
167
  export const operations = [
164
168
  o0,
165
169
  o1,
@@ -323,4 +327,8 @@ export const operations = [
323
327
  o159,
324
328
  o160,
325
329
  o161,
330
+ o162,
331
+ o163,
332
+ o164,
333
+ o165,
326
334
  ];
@@ -0,0 +1,54 @@
1
+ export const operation = {
2
+ "method": "delete",
3
+ "path": "/api/projects/{projectId}/labels",
4
+ "command": [
5
+ "projects",
6
+ "labels",
7
+ "delete"
8
+ ],
9
+ "summary": "Delete a Session Label from the project's catalog. A label sessions still carry is refused with 409 and the list of them unless removeFromSessions is true, which removes it from each of them and resyncs their pull requests; the repository label on GitHub stays. Deleting a name the project does not have, including one already deleted, answers 404.",
10
+ "pathParams": [
11
+ "projectId"
12
+ ],
13
+ "query": [],
14
+ "body": {
15
+ "fields": [
16
+ {
17
+ "name": "name",
18
+ "flag": "name",
19
+ "kind": "string",
20
+ "required": true,
21
+ "description": "The Session Label to delete, matched case-insensitively."
22
+ },
23
+ {
24
+ "name": "removeFromSessions",
25
+ "flag": "remove-from-sessions",
26
+ "kind": "boolean",
27
+ "required": false,
28
+ "description": "Also remove the label from every session carrying it, archived and completed included, and resync their pull requests. Without it, deleting a label any session carries fails with 409 and lists them."
29
+ },
30
+ {
31
+ "name": "expectedSessionCount",
32
+ "flag": "expected-session-count",
33
+ "kind": "integer",
34
+ "required": false,
35
+ "description": "Fail with 409 when the number of sessions carrying the label changed."
36
+ },
37
+ {
38
+ "name": "expectedSessionIds",
39
+ "flag": "expected-session-ids",
40
+ "kind": "json",
41
+ "required": false,
42
+ "description": "JSON array of the confirmed session IDs. Fail with 409 if the affected sessions changed, even when their count stayed the same."
43
+ }
44
+ ],
45
+ "required": true
46
+ },
47
+ "multipart": null,
48
+ "attachments": false,
49
+ "anonymous": false,
50
+ "sandboxToken": false,
51
+ "orchestratorToken": false,
52
+ "cronToken": false,
53
+ "leadToken": false
54
+ };
@@ -0,0 +1,30 @@
1
+ export const operation = {
2
+ "method": "get",
3
+ "path": "/api/projects/{projectId}/labels/usage",
4
+ "command": [
5
+ "projects",
6
+ "labels",
7
+ "usage"
8
+ ],
9
+ "summary": "List the sessions carrying a Session Label, in every status including archived and completed, as { projectName, sessions: [{ id, title, status, pullRequestNumber }] }. Answers 404 when the project has no label by that name.",
10
+ "pathParams": [
11
+ "projectId"
12
+ ],
13
+ "query": [
14
+ {
15
+ "name": "name",
16
+ "flag": "name",
17
+ "kind": "string",
18
+ "required": true,
19
+ "description": "The Session Label to look up, matched case-insensitively."
20
+ }
21
+ ],
22
+ "body": null,
23
+ "multipart": null,
24
+ "attachments": false,
25
+ "anonymous": false,
26
+ "sandboxToken": true,
27
+ "orchestratorToken": true,
28
+ "cronToken": true,
29
+ "leadToken": true
30
+ };
@@ -0,0 +1,22 @@
1
+ export const operation = {
2
+ "method": "get",
3
+ "path": "/api/projects/{projectId}/settings/qa-guide",
4
+ "command": [
5
+ "projects",
6
+ "qa-guide",
7
+ "get"
8
+ ],
9
+ "summary": "Read the project's saved Project QA Guide. It can be newer than the one a running session started with.",
10
+ "pathParams": [
11
+ "projectId"
12
+ ],
13
+ "query": [],
14
+ "body": null,
15
+ "multipart": null,
16
+ "attachments": false,
17
+ "anonymous": false,
18
+ "sandboxToken": true,
19
+ "orchestratorToken": true,
20
+ "cronToken": true,
21
+ "leadToken": true
22
+ };
@@ -0,0 +1,33 @@
1
+ export const operation = {
2
+ "method": "put",
3
+ "path": "/api/projects/{projectId}/settings/qa-guide",
4
+ "command": [
5
+ "projects",
6
+ "qa-guide",
7
+ "set"
8
+ ],
9
+ "summary": "Save the project's Project QA Guide. Chat sessions created after the save get it; running sessions keep the one they started with.",
10
+ "pathParams": [
11
+ "projectId"
12
+ ],
13
+ "query": [],
14
+ "body": {
15
+ "fields": [
16
+ {
17
+ "name": "content",
18
+ "flag": "content",
19
+ "kind": "string",
20
+ "required": true,
21
+ "description": "The whole Project QA Guide, in Markdown. It replaces the saved one."
22
+ }
23
+ ],
24
+ "required": true
25
+ },
26
+ "multipart": null,
27
+ "attachments": false,
28
+ "anonymous": false,
29
+ "sandboxToken": true,
30
+ "orchestratorToken": true,
31
+ "cronToken": true,
32
+ "leadToken": true
33
+ };
@@ -55,6 +55,13 @@ export const operation = {
55
55
  "required": false,
56
56
  "description": "Git branch that submitted PRs target (e.g. \"main\"). Null/omitted uses the repository default branch."
57
57
  },
58
+ {
59
+ "name": "qaGuide",
60
+ "flag": "qa-guide",
61
+ "kind": "string",
62
+ "required": false,
63
+ "description": "The Project QA Guide: markdown on how to test this project in a sandbox. automated-qa writes it through `kosuke projects qa-guide set`."
64
+ },
58
65
  {
59
66
  "name": "sandboxTier",
60
67
  "flag": "sandbox-tier",
@@ -6,7 +6,7 @@ export const operation = {
6
6
  "settings",
7
7
  "update"
8
8
  ],
9
- "summary": "Change setup commands, branches, working directory or sandbox tier.",
9
+ "summary": "Change setup commands, branches, working directory, sandbox tier or the Project QA Guide.",
10
10
  "pathParams": [
11
11
  "projectId"
12
12
  ],
@@ -55,6 +55,13 @@ export const operation = {
55
55
  "required": false,
56
56
  "description": "Git branch that submitted PRs target (e.g. \"main\"). Null/omitted uses the repository default branch."
57
57
  },
58
+ {
59
+ "name": "qaGuide",
60
+ "flag": "qa-guide",
61
+ "kind": "string",
62
+ "required": false,
63
+ "description": "The Project QA Guide: markdown on how to test this project in a sandbox. automated-qa writes it through `kosuke projects qa-guide set`."
64
+ },
58
65
  {
59
66
  "name": "sandboxTier",
60
67
  "flag": "sandbox-tier",
@@ -5,7 +5,7 @@ export const operation = {
5
5
  "projects",
6
6
  "skills"
7
7
  ],
8
- "summary": "List the skills the agent can invoke in this project, for one provider. From a sandbox, sessionId defaults to its own chat session.",
8
+ "summary": "List the skills the agent can invoke in this project, for one provider: the project's own, the workspace's and the member's, the plugins', and Kosuke's own skills in the kosuke plugin, which every chat session carries as kosuke:<name>. From a sandbox, sessionId defaults to its own chat session.",
9
9
  "pathParams": [
10
10
  "projectId"
11
11
  ],
@@ -5,7 +5,7 @@ export const operation = {
5
5
  "sessions",
6
6
  "activate"
7
7
  ],
8
- "summary": "Start a backlog session: claim a sandbox and run its saved prompt as the first turn. With --skill ship the first turn is /ship on that prompt.",
8
+ "summary": "Start a backlog session: claim a sandbox and run its saved prompt as the first turn. With --skill ship the first turn is /kosuke:ship on that prompt.",
9
9
  "pathParams": [
10
10
  "projectId",
11
11
  "sessionId"
@@ -18,7 +18,7 @@ export const operation = {
18
18
  "flag": "skill",
19
19
  "kind": "string",
20
20
  "required": false,
21
- "description": "Run the saved prompt through this skill: `ship` starts `/ship` on the ticket.",
21
+ "description": "Run the saved prompt through this skill: `ship` starts `/kosuke:ship` on the ticket.",
22
22
  "choices": [
23
23
  "ship"
24
24
  ]
@@ -20,6 +20,20 @@ export const operation = {
20
20
  "kind": "json",
21
21
  "required": true,
22
22
  "description": "JSON array of the labels the session keeps, replacing the ones it has. Up to 20, each up to 50 characters, stored lowercase. [] removes them all."
23
+ },
24
+ {
25
+ "name": "expectedLabels",
26
+ "flag": "expected-labels",
27
+ "kind": "json",
28
+ "required": false,
29
+ "description": "JSON array of the labels the caller last saw on the session. When given, the edit fails with 409 if the session carries different labels by now, or if a label it adds is no longer in the project's labels and is not listed in created."
30
+ },
31
+ {
32
+ "name": "created",
33
+ "flag": "created",
34
+ "kind": "json",
35
+ "required": false,
36
+ "description": "JSON array of the labels the caller means to create. With expectedLabels, only these may join the project's labels; without expectedLabels, every new name joins them."
23
37
  }
24
38
  ],
25
39
  "required": true
@@ -6,7 +6,7 @@ export const operation = {
6
6
  "skills",
7
7
  "create"
8
8
  ],
9
- "summary": "Add a custom skill from its files. A SKILL.md is required; its frontmatter carries the kebab-case name, the description and an optional argument-hint. Text files only, 100 KiB each, 50 files and 1 MiB in all. Pass factoryId to save these files as the workspace version of that factory skill, which keeps its name and hides the catalog entry until a delete resets it. Admins only. Answers 201 with the id of the new skill.",
9
+ "summary": "Add a custom skill from its files. A SKILL.md is required; its frontmatter carries the kebab-case name, the description and an optional argument-hint. Text files only, 100 KiB each, 50 files and 1 MiB in all. Admins only. Answers 201 with the id of the new skill.",
10
10
  "pathParams": [
11
11
  "workspaceId"
12
12
  ],
@@ -24,12 +24,6 @@ export const operation = {
24
24
  "flag": "enabled",
25
25
  "kind": "boolean",
26
26
  "required": false
27
- },
28
- {
29
- "name": "factoryId",
30
- "flag": "factory-id",
31
- "kind": "string",
32
- "required": false
33
27
  }
34
28
  ],
35
29
  "required": true
@@ -6,7 +6,7 @@ export const operation = {
6
6
  "skills",
7
7
  "delete"
8
8
  ],
9
- "summary": "Delete a custom skill, or reset one edited from a factory skill back to the factory version, which restores the catalog entry with the enabled state it was left in. On a factory skill with added files, removes them; one without any cannot be deleted, only disabled. Admins only.",
9
+ "summary": "Delete a custom skill and its files. Admins only.",
10
10
  "pathParams": [
11
11
  "workspaceId",
12
12
  "skillId"
@@ -6,7 +6,7 @@ export const operation = {
6
6
  "skills",
7
7
  "get"
8
8
  ],
9
- "summary": "Get one workspace skill with every file it holds, SKILL.md included. addedPaths lists the files a workspace added to a factory skill.",
9
+ "summary": "Get one custom skill with every file it holds, SKILL.md included.",
10
10
  "pathParams": [
11
11
  "workspaceId",
12
12
  "skillId"
@@ -6,7 +6,7 @@ export const operation = {
6
6
  "skills",
7
7
  "list"
8
8
  ],
9
- "summary": "List the workspace skills, factory and custom: what each SKILL.md declares, how many files the skill holds, and whether it is enabled.",
9
+ "summary": "List the workspace's custom skills: what each SKILL.md declares, how many files the skill holds, and whether it is enabled. Kosuke's own skills are not listed: every chat session carries them, always on, as kosuke:<name>.",
10
10
  "pathParams": [
11
11
  "workspaceId"
12
12
  ],
@@ -6,7 +6,7 @@ export const operation = {
6
6
  "skills",
7
7
  "update"
8
8
  ],
9
- "summary": "Enable or disable a skill, or replace every file of a custom one; at least one of enabled and files. A factory skill takes files here only when every file Kosuke ships comes back unchanged: the other paths become its added files, replacing the previous set, and it stays a factory skill. To change a shipped file, POST the files with factoryId to save the workspace version instead. A custom skill edited from a factory skill keeps its name. Admins only. Answers 204.",
9
+ "summary": "Enable or disable a custom skill, or replace every file it holds; at least one of enabled and files. Admins only. Answers 204.",
10
10
  "pathParams": [
11
11
  "workspaceId",
12
12
  "skillId"
package/openapi.json CHANGED
@@ -3939,7 +3939,7 @@
3939
3939
  "/api/organizations/{workspaceId}/skills": {
3940
3940
  "get": {
3941
3941
  "operationId": "workspacesSkillsList",
3942
- "summary": "List the workspace skills, factory and custom: what each SKILL.md declares, how many files the skill holds, and whether it is enabled.",
3942
+ "summary": "List the workspace's custom skills: what each SKILL.md declares, how many files the skill holds, and whether it is enabled. Kosuke's own skills are not listed: every chat session carries them, always on, as kosuke:<name>.",
3943
3943
  "tags": ["workspaces"],
3944
3944
  "x-kosuke-command": ["workspaces", "skills", "list"],
3945
3945
  "x-kosuke-sandbox-token": true,
@@ -3992,7 +3992,7 @@
3992
3992
  },
3993
3993
  "post": {
3994
3994
  "operationId": "workspacesSkillsCreate",
3995
- "summary": "Add a custom skill from its files. A SKILL.md is required; its frontmatter carries the kebab-case name, the description and an optional argument-hint. Text files only, 100 KiB each, 50 files and 1 MiB in all. Pass factoryId to save these files as the workspace version of that factory skill, which keeps its name and hides the catalog entry until a delete resets it. Admins only. Answers 201 with the id of the new skill.",
3995
+ "summary": "Add a custom skill from its files. A SKILL.md is required; its frontmatter carries the kebab-case name, the description and an optional argument-hint. Text files only, 100 KiB each, 50 files and 1 MiB in all. Admins only. Answers 201 with the id of the new skill.",
3996
3996
  "tags": ["workspaces"],
3997
3997
  "x-kosuke-command": ["workspaces", "skills", "create"],
3998
3998
  "x-kosuke-sandbox-token": true,
@@ -4035,11 +4035,6 @@
4035
4035
  },
4036
4036
  "enabled": {
4037
4037
  "type": "boolean"
4038
- },
4039
- "factoryId": {
4040
- "type": "string",
4041
- "minLength": 1,
4042
- "maxLength": 128
4043
4038
  }
4044
4039
  },
4045
4040
  "required": ["files"],
@@ -4085,7 +4080,7 @@
4085
4080
  "/api/organizations/{workspaceId}/skills/{skillId}": {
4086
4081
  "get": {
4087
4082
  "operationId": "workspacesSkillsGet",
4088
- "summary": "Get one workspace skill with every file it holds, SKILL.md included. addedPaths lists the files a workspace added to a factory skill.",
4083
+ "summary": "Get one custom skill with every file it holds, SKILL.md included.",
4089
4084
  "tags": ["workspaces"],
4090
4085
  "x-kosuke-command": ["workspaces", "skills", "get"],
4091
4086
  "x-kosuke-sandbox-token": true,
@@ -4147,7 +4142,7 @@
4147
4142
  },
4148
4143
  "patch": {
4149
4144
  "operationId": "workspacesSkillsUpdate",
4150
- "summary": "Enable or disable a skill, or replace every file of a custom one; at least one of enabled and files. A factory skill takes files here only when every file Kosuke ships comes back unchanged: the other paths become its added files, replacing the previous set, and it stays a factory skill. To change a shipped file, POST the files with factoryId to save the workspace version instead. A custom skill edited from a factory skill keeps its name. Admins only. Answers 204.",
4145
+ "summary": "Enable or disable a custom skill, or replace every file it holds; at least one of enabled and files. Admins only. Answers 204.",
4151
4146
  "tags": ["workspaces"],
4152
4147
  "x-kosuke-command": ["workspaces", "skills", "update"],
4153
4148
  "x-kosuke-sandbox-token": true,
@@ -4241,7 +4236,7 @@
4241
4236
  },
4242
4237
  "delete": {
4243
4238
  "operationId": "workspacesSkillsDelete",
4244
- "summary": "Delete a custom skill, or reset one edited from a factory skill back to the factory version, which restores the catalog entry with the enabled state it was left in. On a factory skill with added files, removes them; one without any cannot be deleted, only disabled. Admins only.",
4239
+ "summary": "Delete a custom skill and its files. Admins only.",
4245
4240
  "tags": ["workspaces"],
4246
4241
  "x-kosuke-command": ["workspaces", "skills", "delete"],
4247
4242
  "parameters": [
@@ -5363,7 +5358,7 @@
5363
5358
  "/api/projects/{projectId}/chat-sessions/{sessionId}/activate": {
5364
5359
  "post": {
5365
5360
  "operationId": "sessionsActivate",
5366
- "summary": "Start a backlog session: claim a sandbox and run its saved prompt as the first turn. With --skill ship the first turn is /ship on that prompt.",
5361
+ "summary": "Start a backlog session: claim a sandbox and run its saved prompt as the first turn. With --skill ship the first turn is /kosuke:ship on that prompt.",
5367
5362
  "tags": ["sessions"],
5368
5363
  "x-kosuke-command": ["sessions", "activate"],
5369
5364
  "x-kosuke-sandbox-token": true,
@@ -5400,7 +5395,7 @@
5400
5395
  "type": "object",
5401
5396
  "properties": {
5402
5397
  "skill": {
5403
- "description": "Run the saved prompt through this skill: `ship` starts `/ship` on the ticket.",
5398
+ "description": "Run the saved prompt through this skill: `ship` starts `/kosuke:ship` on the ticket.",
5404
5399
  "type": "string",
5405
5400
  "enum": ["ship"]
5406
5401
  }
@@ -6490,6 +6485,28 @@
6490
6485
  "maxLength": 50,
6491
6486
  "pattern": "^[^\\x00-\\x1f\\x7f]+$"
6492
6487
  }
6488
+ },
6489
+ "expectedLabels": {
6490
+ "description": "JSON array of the labels the caller last saw on the session. When given, the edit fails with 409 if the session carries different labels by now, or if a label it adds is no longer in the project's labels and is not listed in created.",
6491
+ "maxItems": 20,
6492
+ "type": "array",
6493
+ "items": {
6494
+ "type": "string",
6495
+ "minLength": 1,
6496
+ "maxLength": 50,
6497
+ "pattern": "^[^\\x00-\\x1f\\x7f]+$"
6498
+ }
6499
+ },
6500
+ "created": {
6501
+ "description": "JSON array of the labels the caller means to create. With expectedLabels, only these may join the project's labels; without expectedLabels, every new name joins them.",
6502
+ "maxItems": 20,
6503
+ "type": "array",
6504
+ "items": {
6505
+ "type": "string",
6506
+ "minLength": 1,
6507
+ "maxLength": 50,
6508
+ "pattern": "^[^\\x00-\\x1f\\x7f]+$"
6509
+ }
6493
6510
  }
6494
6511
  },
6495
6512
  "required": ["labels"]
@@ -9173,7 +9190,8 @@
9173
9190
  "description": "The Session Label to recolor.",
9174
9191
  "type": "string",
9175
9192
  "minLength": 1,
9176
- "maxLength": 50
9193
+ "maxLength": 50,
9194
+ "pattern": "^[^\\x00-\\x1f\\x7f]+$"
9177
9195
  },
9178
9196
  "color": {
9179
9197
  "description": "Six hex digits, with or without a leading #, as GitHub stores label colors.",
@@ -9217,6 +9235,164 @@
9217
9235
  }
9218
9236
  }
9219
9237
  }
9238
+ },
9239
+ "delete": {
9240
+ "operationId": "projectsLabelsDelete",
9241
+ "summary": "Delete a Session Label from the project's catalog. A label sessions still carry is refused with 409 and the list of them unless removeFromSessions is true, which removes it from each of them and resyncs their pull requests; the repository label on GitHub stays. Deleting a name the project does not have, including one already deleted, answers 404.",
9242
+ "tags": ["projects"],
9243
+ "x-kosuke-command": ["projects", "labels", "delete"],
9244
+ "parameters": [
9245
+ {
9246
+ "name": "projectId",
9247
+ "in": "path",
9248
+ "required": true,
9249
+ "schema": {
9250
+ "type": "string",
9251
+ "format": "uuid",
9252
+ "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)$"
9253
+ }
9254
+ }
9255
+ ],
9256
+ "requestBody": {
9257
+ "required": true,
9258
+ "content": {
9259
+ "application/json": {
9260
+ "schema": {
9261
+ "type": "object",
9262
+ "properties": {
9263
+ "name": {
9264
+ "description": "The Session Label to delete, matched case-insensitively.",
9265
+ "type": "string",
9266
+ "minLength": 1,
9267
+ "maxLength": 50,
9268
+ "pattern": "^[^\\x00-\\x1f\\x7f]+$"
9269
+ },
9270
+ "removeFromSessions": {
9271
+ "description": "Also remove the label from every session carrying it, archived and completed included, and resync their pull requests. Without it, deleting a label any session carries fails with 409 and lists them.",
9272
+ "type": "boolean"
9273
+ },
9274
+ "expectedSessionCount": {
9275
+ "description": "Fail with 409 when the number of sessions carrying the label changed.",
9276
+ "type": "integer",
9277
+ "minimum": 0,
9278
+ "maximum": 9007199254740991
9279
+ },
9280
+ "expectedSessionIds": {
9281
+ "description": "JSON array of the confirmed session IDs. Fail with 409 if the affected sessions changed, even when their count stayed the same.",
9282
+ "type": "array",
9283
+ "items": {
9284
+ "type": "string",
9285
+ "format": "uuid",
9286
+ "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)$"
9287
+ }
9288
+ }
9289
+ },
9290
+ "required": ["name"]
9291
+ }
9292
+ }
9293
+ }
9294
+ },
9295
+ "responses": {
9296
+ "2XX": {
9297
+ "description": "Success envelope",
9298
+ "content": {
9299
+ "application/json": {
9300
+ "schema": {
9301
+ "$ref": "#/components/schemas/ApiSuccess"
9302
+ }
9303
+ }
9304
+ }
9305
+ },
9306
+ "4XX": {
9307
+ "description": "Error envelope",
9308
+ "content": {
9309
+ "application/json": {
9310
+ "schema": {
9311
+ "$ref": "#/components/schemas/ApiError"
9312
+ }
9313
+ }
9314
+ }
9315
+ },
9316
+ "5XX": {
9317
+ "description": "Error envelope",
9318
+ "content": {
9319
+ "application/json": {
9320
+ "schema": {
9321
+ "$ref": "#/components/schemas/ApiError"
9322
+ }
9323
+ }
9324
+ }
9325
+ }
9326
+ }
9327
+ }
9328
+ },
9329
+ "/api/projects/{projectId}/labels/usage": {
9330
+ "get": {
9331
+ "operationId": "projectsLabelsUsage",
9332
+ "summary": "List the sessions carrying a Session Label, in every status including archived and completed, as { projectName, sessions: [{ id, title, status, pullRequestNumber }] }. Answers 404 when the project has no label by that name.",
9333
+ "tags": ["projects"],
9334
+ "x-kosuke-command": ["projects", "labels", "usage"],
9335
+ "x-kosuke-sandbox-token": true,
9336
+ "x-kosuke-orchestrator-token": true,
9337
+ "x-kosuke-cron-token": true,
9338
+ "x-kosuke-lead-token": true,
9339
+ "parameters": [
9340
+ {
9341
+ "name": "projectId",
9342
+ "in": "path",
9343
+ "required": true,
9344
+ "schema": {
9345
+ "type": "string",
9346
+ "format": "uuid",
9347
+ "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)$"
9348
+ }
9349
+ },
9350
+ {
9351
+ "name": "name",
9352
+ "in": "query",
9353
+ "required": true,
9354
+ "description": "The Session Label to look up, matched case-insensitively.",
9355
+ "schema": {
9356
+ "description": "The Session Label to look up, matched case-insensitively.",
9357
+ "type": "string",
9358
+ "minLength": 1,
9359
+ "maxLength": 50,
9360
+ "pattern": "^[^\\x00-\\x1f\\x7f]+$"
9361
+ }
9362
+ }
9363
+ ],
9364
+ "responses": {
9365
+ "2XX": {
9366
+ "description": "Success envelope",
9367
+ "content": {
9368
+ "application/json": {
9369
+ "schema": {
9370
+ "$ref": "#/components/schemas/ApiSuccess"
9371
+ }
9372
+ }
9373
+ }
9374
+ },
9375
+ "4XX": {
9376
+ "description": "Error envelope",
9377
+ "content": {
9378
+ "application/json": {
9379
+ "schema": {
9380
+ "$ref": "#/components/schemas/ApiError"
9381
+ }
9382
+ }
9383
+ }
9384
+ },
9385
+ "5XX": {
9386
+ "description": "Error envelope",
9387
+ "content": {
9388
+ "application/json": {
9389
+ "schema": {
9390
+ "$ref": "#/components/schemas/ApiError"
9391
+ }
9392
+ }
9393
+ }
9394
+ }
9395
+ }
9220
9396
  }
9221
9397
  },
9222
9398
  "/api/projects/{projectId}/preview": {
@@ -9703,7 +9879,7 @@
9703
9879
  },
9704
9880
  "patch": {
9705
9881
  "operationId": "projectsSettingsUpdate",
9706
- "summary": "Change setup commands, branches, working directory or sandbox tier.",
9882
+ "summary": "Change setup commands, branches, working directory, sandbox tier or the Project QA Guide.",
9707
9883
  "tags": ["projects"],
9708
9884
  "x-kosuke-command": ["projects", "settings", "update"],
9709
9885
  "x-kosuke-sandbox-token": true,
@@ -9803,6 +9979,18 @@
9803
9979
  }
9804
9980
  ]
9805
9981
  },
9982
+ "qaGuide": {
9983
+ "description": "The Project QA Guide: markdown on how to test this project in a sandbox. automated-qa writes it through `kosuke projects qa-guide set`.",
9984
+ "anyOf": [
9985
+ {
9986
+ "type": "string",
9987
+ "maxLength": 102400
9988
+ },
9989
+ {
9990
+ "type": "null"
9991
+ }
9992
+ ]
9993
+ },
9806
9994
  "sandboxTier": {
9807
9995
  "description": "Sandbox resource tier provisioned for the preview: SMALL, MEDIUM, LARGE, or XLARGE. Omitted leaves the current tier. A first deploy boots on XLARGE (unknown footprint) — measure actual peak usage and set the right-sized tier here so later sandboxes use it.",
9808
9996
  "type": "string",
@@ -10833,6 +11021,18 @@
10833
11021
  }
10834
11022
  ]
10835
11023
  },
11024
+ "qaGuide": {
11025
+ "description": "The Project QA Guide: markdown on how to test this project in a sandbox. automated-qa writes it through `kosuke projects qa-guide set`.",
11026
+ "anyOf": [
11027
+ {
11028
+ "type": "string",
11029
+ "maxLength": 102400
11030
+ },
11031
+ {
11032
+ "type": "null"
11033
+ }
11034
+ ]
11035
+ },
10836
11036
  "sandboxTier": {
10837
11037
  "description": "Sandbox resource tier provisioned for the preview: SMALL, MEDIUM, LARGE, or XLARGE. Omitted leaves the current tier. A first deploy boots on XLARGE (unknown footprint) — measure actual peak usage and set the right-sized tier here so later sandboxes use it.",
10838
11038
  "type": "string",
@@ -11000,6 +11200,135 @@
11000
11200
  }
11001
11201
  }
11002
11202
  },
11203
+ "/api/projects/{projectId}/settings/qa-guide": {
11204
+ "get": {
11205
+ "operationId": "projectsQaGuideGet",
11206
+ "summary": "Read the project's saved Project QA Guide. It can be newer than the one a running session started with.",
11207
+ "tags": ["projects"],
11208
+ "x-kosuke-command": ["projects", "qa-guide", "get"],
11209
+ "x-kosuke-sandbox-token": true,
11210
+ "x-kosuke-orchestrator-token": true,
11211
+ "x-kosuke-cron-token": true,
11212
+ "x-kosuke-lead-token": true,
11213
+ "parameters": [
11214
+ {
11215
+ "name": "projectId",
11216
+ "in": "path",
11217
+ "required": true,
11218
+ "schema": {
11219
+ "type": "string",
11220
+ "format": "uuid",
11221
+ "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)$"
11222
+ }
11223
+ }
11224
+ ],
11225
+ "responses": {
11226
+ "2XX": {
11227
+ "description": "Success envelope",
11228
+ "content": {
11229
+ "application/json": {
11230
+ "schema": {
11231
+ "$ref": "#/components/schemas/ApiSuccess"
11232
+ }
11233
+ }
11234
+ }
11235
+ },
11236
+ "4XX": {
11237
+ "description": "Error envelope",
11238
+ "content": {
11239
+ "application/json": {
11240
+ "schema": {
11241
+ "$ref": "#/components/schemas/ApiError"
11242
+ }
11243
+ }
11244
+ }
11245
+ },
11246
+ "5XX": {
11247
+ "description": "Error envelope",
11248
+ "content": {
11249
+ "application/json": {
11250
+ "schema": {
11251
+ "$ref": "#/components/schemas/ApiError"
11252
+ }
11253
+ }
11254
+ }
11255
+ }
11256
+ }
11257
+ },
11258
+ "put": {
11259
+ "operationId": "projectsQaGuideSet",
11260
+ "summary": "Save the project's Project QA Guide. Chat sessions created after the save get it; running sessions keep the one they started with.",
11261
+ "tags": ["projects"],
11262
+ "x-kosuke-command": ["projects", "qa-guide", "set"],
11263
+ "x-kosuke-sandbox-token": true,
11264
+ "x-kosuke-orchestrator-token": true,
11265
+ "x-kosuke-cron-token": true,
11266
+ "x-kosuke-lead-token": true,
11267
+ "parameters": [
11268
+ {
11269
+ "name": "projectId",
11270
+ "in": "path",
11271
+ "required": true,
11272
+ "schema": {
11273
+ "type": "string",
11274
+ "format": "uuid",
11275
+ "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)$"
11276
+ }
11277
+ }
11278
+ ],
11279
+ "requestBody": {
11280
+ "required": true,
11281
+ "content": {
11282
+ "application/json": {
11283
+ "schema": {
11284
+ "type": "object",
11285
+ "properties": {
11286
+ "content": {
11287
+ "type": "string",
11288
+ "minLength": 1,
11289
+ "maxLength": 102400,
11290
+ "description": "The whole Project QA Guide, in Markdown. It replaces the saved one."
11291
+ }
11292
+ },
11293
+ "required": ["content"]
11294
+ }
11295
+ }
11296
+ }
11297
+ },
11298
+ "responses": {
11299
+ "2XX": {
11300
+ "description": "Success envelope",
11301
+ "content": {
11302
+ "application/json": {
11303
+ "schema": {
11304
+ "$ref": "#/components/schemas/ApiSuccess"
11305
+ }
11306
+ }
11307
+ }
11308
+ },
11309
+ "4XX": {
11310
+ "description": "Error envelope",
11311
+ "content": {
11312
+ "application/json": {
11313
+ "schema": {
11314
+ "$ref": "#/components/schemas/ApiError"
11315
+ }
11316
+ }
11317
+ }
11318
+ },
11319
+ "5XX": {
11320
+ "description": "Error envelope",
11321
+ "content": {
11322
+ "application/json": {
11323
+ "schema": {
11324
+ "$ref": "#/components/schemas/ApiError"
11325
+ }
11326
+ }
11327
+ }
11328
+ }
11329
+ }
11330
+ }
11331
+ },
11003
11332
  "/api/projects/{projectId}/settings/services": {
11004
11333
  "get": {
11005
11334
  "operationId": "projectsServicesList",
@@ -11435,7 +11764,7 @@
11435
11764
  "/api/projects/{projectId}/skills": {
11436
11765
  "get": {
11437
11766
  "operationId": "projectsSkills",
11438
- "summary": "List the skills the agent can invoke in this project, for one provider. From a sandbox, sessionId defaults to its own chat session.",
11767
+ "summary": "List the skills the agent can invoke in this project, for one provider: the project's own, the workspace's and the member's, the plugins', and Kosuke's own skills in the kosuke plugin, which every chat session carries as kosuke:<name>. From a sandbox, sessionId defaults to its own chat session.",
11439
11768
  "tags": ["projects"],
11440
11769
  "x-kosuke-command": ["projects", "skills"],
11441
11770
  "x-kosuke-sandbox-token": true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosuke-ai/cli",
3
- "version": "5.8.0",
3
+ "version": "5.10.0",
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": {