@kosuke-ai/cli 5.8.0 → 5.9.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.
@@ -46,120 +46,122 @@ 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
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';
49
+ import { operation as o48 } from './projects/qa-guide-get.js';
50
+ import { operation as o49 } from './projects/qa-guide-set.js';
51
+ import { operation as o50 } from './projects/services-add.js';
52
+ import { operation as o51 } from './projects/services-list.js';
53
+ import { operation as o52 } from './projects/services-remove.js';
54
+ import { operation as o53 } from './projects/services-update.js';
55
+ import { operation as o54 } from './projects/settings-get.js';
56
+ import { operation as o55 } from './projects/settings-import.js';
57
+ import { operation as o56 } from './projects/settings-update.js';
58
+ import { operation as o57 } from './projects/skills.js';
59
+ import { operation as o58 } from './projects/update.js';
60
+ import { operation as o59 } from './sessions/activate.js';
61
+ import { operation as o60 } from './sessions/all.js';
62
+ import { operation as o61 } from './sessions/artifacts-attach.js';
63
+ import { operation as o62 } from './sessions/artifacts-get.js';
64
+ import { operation as o63 } from './sessions/artifacts-list.js';
65
+ import { operation as o64 } from './sessions/comments-add.js';
66
+ import { operation as o65 } from './sessions/comments-delete.js';
67
+ import { operation as o66 } from './sessions/comments-list.js';
68
+ import { operation as o67 } from './sessions/comments-update.js';
69
+ import { operation as o68 } from './sessions/create.js';
70
+ import { operation as o69 } from './sessions/delete.js';
71
+ import { operation as o70 } from './sessions/diff-comments-add.js';
72
+ import { operation as o71 } from './sessions/diff-comments-delete.js';
73
+ import { operation as o72 } from './sessions/diff-comments-list.js';
74
+ import { operation as o73 } from './sessions/diff-comments-update.js';
75
+ import { operation as o74 } from './sessions/diff-commits.js';
76
+ import { operation as o75 } from './sessions/diff-files.js';
77
+ import { operation as o76 } from './sessions/diff-patch.js';
78
+ import { operation as o77 } from './sessions/edit-prompt.js';
79
+ import { operation as o78 } from './sessions/files-get.js';
80
+ import { operation as o79 } from './sessions/files-list.js';
81
+ import { operation as o80 } from './sessions/files-write.js';
82
+ import { operation as o81 } from './sessions/get.js';
83
+ import { operation as o82 } from './sessions/git-commit.js';
84
+ import { operation as o83 } from './sessions/git-commit-message.js';
85
+ import { operation as o84 } from './sessions/git-push.js';
86
+ import { operation as o85 } from './sessions/git-state.js';
87
+ import { operation as o86 } from './sessions/jobs-cancel.js';
88
+ import { operation as o87 } from './sessions/jobs-get.js';
89
+ import { operation as o88 } from './sessions/jobs-list.js';
90
+ import { operation as o89 } from './sessions/labels-edit.js';
91
+ import { operation as o90 } from './sessions/labels-set.js';
92
+ import { operation as o91 } from './sessions/list.js';
93
+ import { operation as o92 } from './sessions/mark-read.js';
94
+ import { operation as o93 } from './sessions/messages.js';
95
+ import { operation as o94 } from './sessions/needs-you.js';
96
+ import { operation as o95 } from './sessions/qa-slot.js';
97
+ import { operation as o96 } from './sessions/queue-delete.js';
98
+ import { operation as o97 } from './sessions/queue-list.js';
99
+ import { operation as o98 } from './sessions/queue-move.js';
100
+ import { operation as o99 } from './sessions/queue-resume.js';
101
+ import { operation as o100 } from './sessions/queue-send.js';
102
+ import { operation as o101 } from './sessions/queue-steer.js';
103
+ import { operation as o102 } from './sessions/queue-update.js';
104
+ import { operation as o103 } from './sessions/runtime-command.js';
105
+ import { operation as o104 } from './sessions/search.js';
106
+ import { operation as o105 } from './sessions/send.js';
107
+ import { operation as o106 } from './sessions/steer.js';
108
+ import { operation as o107 } from './sessions/title-generate.js';
109
+ import { operation as o108 } from './sessions/update.js';
110
+ import { operation as o109 } from './user/auth-token-revoke.js';
111
+ import { operation as o110 } from './user/plugins-list.js';
112
+ import { operation as o111 } from './user/plugins-update.js';
113
+ import { operation as o112 } from './user/profile.js';
114
+ import { operation as o113 } from './user/push-devices-register.js';
115
+ import { operation as o114 } from './user/push-devices-remove.js';
116
+ import { operation as o115 } from './user/skills-create.js';
117
+ import { operation as o116 } from './user/skills-delete.js';
118
+ import { operation as o117 } from './user/skills-get.js';
119
+ import { operation as o118 } from './user/skills-list.js';
120
+ import { operation as o119 } from './user/skills-update.js';
121
+ import { operation as o120 } from './user/subscriptions-delete.js';
122
+ import { operation as o121 } from './user/subscriptions-get.js';
123
+ import { operation as o122 } from './user/subscriptions-login-claude-complete.js';
124
+ import { operation as o123 } from './user/subscriptions-login-claude-start.js';
125
+ import { operation as o124 } from './user/subscriptions-login-codex-complete.js';
126
+ import { operation as o125 } from './user/subscriptions-login-codex-start.js';
127
+ import { operation as o126 } from './user/subscriptions-set-default-model.js';
128
+ import { operation as o127 } from './user/subscriptions-set-key.js';
129
+ import { operation as o128 } from './user/subscriptions-usage.js';
130
+ import { operation as o129 } from './workspaces/access-status.js';
131
+ import { operation as o130 } from './workspaces/ai-provider-get.js';
132
+ import { operation as o131 } from './workspaces/ai-provider-remove.js';
133
+ import { operation as o132 } from './workspaces/ai-provider-set.js';
134
+ import { operation as o133 } from './workspaces/ai-provider-usage-claude.js';
135
+ import { operation as o134 } from './workspaces/ai-provider-usage-codex.js';
136
+ import { operation as o135 } from './workspaces/ai-provider-usage-coding-plan.js';
137
+ import { operation as o136 } from './workspaces/artifacts.js';
138
+ import { operation as o137 } from './workspaces/credits.js';
139
+ import { operation as o138 } from './workspaces/get.js';
140
+ import { operation as o139 } from './workspaces/getting-started-get.js';
141
+ import { operation as o140 } from './workspaces/getting-started-update.js';
142
+ import { operation as o141 } from './workspaces/integrations-sentry-get.js';
143
+ import { operation as o142 } from './workspaces/integrations-sentry-remove.js';
144
+ import { operation as o143 } from './workspaces/integrations-slack-get.js';
145
+ import { operation as o144 } from './workspaces/lead-cards.js';
146
+ import { operation as o145 } from './workspaces/lead-notifications-open.js';
147
+ import { operation as o146 } from './workspaces/lead-proposals-create.js';
148
+ import { operation as o147 } from './workspaces/lead-triage.js';
149
+ import { operation as o148 } from './workspaces/list.js';
150
+ import { operation as o149 } from './workspaces/members.js';
151
+ import { operation as o150 } from './workspaces/plugins-list.js';
152
+ import { operation as o151 } from './workspaces/plugins-update.js';
153
+ import { operation as o152 } from './workspaces/provider-login-claude-complete.js';
154
+ import { operation as o153 } from './workspaces/provider-login-claude-start.js';
155
+ import { operation as o154 } from './workspaces/provider-login-codex-complete.js';
156
+ import { operation as o155 } from './workspaces/provider-login-codex-start.js';
157
+ import { operation as o156 } from './workspaces/sandbox-limit.js';
158
+ import { operation as o157 } from './workspaces/skills-create.js';
159
+ import { operation as o158 } from './workspaces/skills-delete.js';
160
+ import { operation as o159 } from './workspaces/skills-get.js';
161
+ import { operation as o160 } from './workspaces/skills-list.js';
162
+ import { operation as o161 } from './workspaces/skills-update.js';
163
+ import { operation as o162 } from './workspaces/stop-sandboxes.js';
164
+ import { operation as o163 } from './workspaces/usage.js';
163
165
  export const operations = [
164
166
  o0,
165
167
  o1,
@@ -323,4 +325,6 @@ export const operations = [
323
325
  o159,
324
326
  o160,
325
327
  o161,
328
+ o162,
329
+ o163,
326
330
  ];
@@ -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
  ]
@@ -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
  }
@@ -9703,7 +9698,7 @@
9703
9698
  },
9704
9699
  "patch": {
9705
9700
  "operationId": "projectsSettingsUpdate",
9706
- "summary": "Change setup commands, branches, working directory or sandbox tier.",
9701
+ "summary": "Change setup commands, branches, working directory, sandbox tier or the Project QA Guide.",
9707
9702
  "tags": ["projects"],
9708
9703
  "x-kosuke-command": ["projects", "settings", "update"],
9709
9704
  "x-kosuke-sandbox-token": true,
@@ -9803,6 +9798,18 @@
9803
9798
  }
9804
9799
  ]
9805
9800
  },
9801
+ "qaGuide": {
9802
+ "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`.",
9803
+ "anyOf": [
9804
+ {
9805
+ "type": "string",
9806
+ "maxLength": 102400
9807
+ },
9808
+ {
9809
+ "type": "null"
9810
+ }
9811
+ ]
9812
+ },
9806
9813
  "sandboxTier": {
9807
9814
  "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
9815
  "type": "string",
@@ -10833,6 +10840,18 @@
10833
10840
  }
10834
10841
  ]
10835
10842
  },
10843
+ "qaGuide": {
10844
+ "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`.",
10845
+ "anyOf": [
10846
+ {
10847
+ "type": "string",
10848
+ "maxLength": 102400
10849
+ },
10850
+ {
10851
+ "type": "null"
10852
+ }
10853
+ ]
10854
+ },
10836
10855
  "sandboxTier": {
10837
10856
  "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
10857
  "type": "string",
@@ -11000,6 +11019,135 @@
11000
11019
  }
11001
11020
  }
11002
11021
  },
11022
+ "/api/projects/{projectId}/settings/qa-guide": {
11023
+ "get": {
11024
+ "operationId": "projectsQaGuideGet",
11025
+ "summary": "Read the project's saved Project QA Guide. It can be newer than the one a running session started with.",
11026
+ "tags": ["projects"],
11027
+ "x-kosuke-command": ["projects", "qa-guide", "get"],
11028
+ "x-kosuke-sandbox-token": true,
11029
+ "x-kosuke-orchestrator-token": true,
11030
+ "x-kosuke-cron-token": true,
11031
+ "x-kosuke-lead-token": true,
11032
+ "parameters": [
11033
+ {
11034
+ "name": "projectId",
11035
+ "in": "path",
11036
+ "required": true,
11037
+ "schema": {
11038
+ "type": "string",
11039
+ "format": "uuid",
11040
+ "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)$"
11041
+ }
11042
+ }
11043
+ ],
11044
+ "responses": {
11045
+ "2XX": {
11046
+ "description": "Success envelope",
11047
+ "content": {
11048
+ "application/json": {
11049
+ "schema": {
11050
+ "$ref": "#/components/schemas/ApiSuccess"
11051
+ }
11052
+ }
11053
+ }
11054
+ },
11055
+ "4XX": {
11056
+ "description": "Error envelope",
11057
+ "content": {
11058
+ "application/json": {
11059
+ "schema": {
11060
+ "$ref": "#/components/schemas/ApiError"
11061
+ }
11062
+ }
11063
+ }
11064
+ },
11065
+ "5XX": {
11066
+ "description": "Error envelope",
11067
+ "content": {
11068
+ "application/json": {
11069
+ "schema": {
11070
+ "$ref": "#/components/schemas/ApiError"
11071
+ }
11072
+ }
11073
+ }
11074
+ }
11075
+ }
11076
+ },
11077
+ "put": {
11078
+ "operationId": "projectsQaGuideSet",
11079
+ "summary": "Save the project's Project QA Guide. Chat sessions created after the save get it; running sessions keep the one they started with.",
11080
+ "tags": ["projects"],
11081
+ "x-kosuke-command": ["projects", "qa-guide", "set"],
11082
+ "x-kosuke-sandbox-token": true,
11083
+ "x-kosuke-orchestrator-token": true,
11084
+ "x-kosuke-cron-token": true,
11085
+ "x-kosuke-lead-token": true,
11086
+ "parameters": [
11087
+ {
11088
+ "name": "projectId",
11089
+ "in": "path",
11090
+ "required": true,
11091
+ "schema": {
11092
+ "type": "string",
11093
+ "format": "uuid",
11094
+ "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)$"
11095
+ }
11096
+ }
11097
+ ],
11098
+ "requestBody": {
11099
+ "required": true,
11100
+ "content": {
11101
+ "application/json": {
11102
+ "schema": {
11103
+ "type": "object",
11104
+ "properties": {
11105
+ "content": {
11106
+ "type": "string",
11107
+ "minLength": 1,
11108
+ "maxLength": 102400,
11109
+ "description": "The whole Project QA Guide, in Markdown. It replaces the saved one."
11110
+ }
11111
+ },
11112
+ "required": ["content"]
11113
+ }
11114
+ }
11115
+ }
11116
+ },
11117
+ "responses": {
11118
+ "2XX": {
11119
+ "description": "Success envelope",
11120
+ "content": {
11121
+ "application/json": {
11122
+ "schema": {
11123
+ "$ref": "#/components/schemas/ApiSuccess"
11124
+ }
11125
+ }
11126
+ }
11127
+ },
11128
+ "4XX": {
11129
+ "description": "Error envelope",
11130
+ "content": {
11131
+ "application/json": {
11132
+ "schema": {
11133
+ "$ref": "#/components/schemas/ApiError"
11134
+ }
11135
+ }
11136
+ }
11137
+ },
11138
+ "5XX": {
11139
+ "description": "Error envelope",
11140
+ "content": {
11141
+ "application/json": {
11142
+ "schema": {
11143
+ "$ref": "#/components/schemas/ApiError"
11144
+ }
11145
+ }
11146
+ }
11147
+ }
11148
+ }
11149
+ }
11150
+ },
11003
11151
  "/api/projects/{projectId}/settings/services": {
11004
11152
  "get": {
11005
11153
  "operationId": "projectsServicesList",
@@ -11435,7 +11583,7 @@
11435
11583
  "/api/projects/{projectId}/skills": {
11436
11584
  "get": {
11437
11585
  "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.",
11586
+ "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
11587
  "tags": ["projects"],
11440
11588
  "x-kosuke-command": ["projects", "skills"],
11441
11589
  "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.9.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": {