@kosuke-ai/kosuke 1.0.12 → 1.0.14
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 +9 -0
- package/dist/generated/commands/devices/list.js +1 -1
- package/dist/generated/commands/integrations/tools-call.js +1 -1
- package/dist/generated/commands/integrations/tools-list.js +1 -1
- package/dist/generated/commands/mac/browser-connections-list.js +1 -1
- package/dist/generated/commands/mac/browser-connections-update.js +1 -1
- package/dist/generated/commands/mac/browser-login.js +2 -2
- package/dist/generated/commands/projects/create.js +2 -2
- package/dist/generated/commands/sensei/device-requests-list.js +1 -1
- package/dist/generated/commands/sessions/create.js +14 -0
- package/dist/generated/commands/sessions/delete.js +1 -1
- package/dist/generated/commands/tasks/create.js +14 -0
- package/openapi.json +35 -11
- package/package.json +5 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.14
|
|
4
|
+
|
|
5
|
+
- `kosuke devices list` says whether another session or Sensei already uses each device, and `kosuke sensei device-requests list` says it for each pending request.
|
|
6
|
+
- `kosuke tasks create` and `kosuke sessions create` take --branch: the session works on that existing branch.
|
|
7
|
+
|
|
8
|
+
## 1.0.13
|
|
9
|
+
|
|
10
|
+
- Update help text: Sensei deletes Backlog sessions, imports into Personal and reuses browser sign-ins in any Turn, whatever started it.
|
|
11
|
+
|
|
3
12
|
## 1.0.12
|
|
4
13
|
|
|
5
14
|
- Add `kosuke user usage get`: what used your AI work, with calendar-day counts by work, repository and model.
|
|
@@ -5,7 +5,7 @@ export const operation = {
|
|
|
5
5
|
"devices",
|
|
6
6
|
"list"
|
|
7
7
|
],
|
|
8
|
-
"summary": "From a Chat Session: the devices it may ask for, the workspace's devices and the session member's own Macs, each with its id, kind, whether it is online, the tools it offers
|
|
8
|
+
"summary": "From a Chat Session: the devices it may ask for, the workspace's devices and the session member's own Macs, each with its id, kind, whether it is online, the tools it offers, this session's access: none, pending or approved, and occupied with occupiedBy (session or sensei) when someone else uses it now. Pick an online device with the tools the test needs: a workspace device first, and the member's own Mac only when no workspace device fits, whatever the names or past approvals. Of those, pick a free one, and ask for an occupied one only when no free device fits. Request one with `kosuke devices requests create` before any mac command, and use one only when the test truly needs a real Mac.",
|
|
9
9
|
"pathParams": [],
|
|
10
10
|
"query": [],
|
|
11
11
|
"body": null,
|
|
@@ -7,7 +7,7 @@ export const operation = {
|
|
|
7
7
|
"call"
|
|
8
8
|
],
|
|
9
9
|
"hidden": true,
|
|
10
|
-
"summary": "Run one integration tool. An agent runs it for its own workspace, or on the member’s personal connection
|
|
10
|
+
"summary": "Run one integration tool. An agent runs it for its own workspace, or on the member’s personal connection in any of their Sensei Turns or a session turn that member started. With an API key, name a workspace you belong to: the call runs only on your own personal connections, and one on a workspace connection is refused. The answer names the connection it ran on, or lists the connections to choose from when the call needs one. A tool failure answers 200 with isError true. Some integrations require an enabled workspace to be named. A Connector Token or a browser session is refused.",
|
|
11
11
|
"pathParams": [],
|
|
12
12
|
"query": [
|
|
13
13
|
{
|
|
@@ -7,7 +7,7 @@ export const operation = {
|
|
|
7
7
|
"list"
|
|
8
8
|
],
|
|
9
9
|
"hidden": true,
|
|
10
|
-
"summary": "List the integration tools you can run now, with the connections that run them. An agent reads its own workspace. With an API key, name a workspace you belong to: it shows that workspace’s connections and your own personal ones. Some integrations require an enabled workspace to be named. A Connector Token or a browser session is refused. Each toolkit is personal or workspace, never both. A personal connection reaches
|
|
10
|
+
"summary": "List the integration tools you can run now, with the connections that run them. An agent reads its own workspace. With an API key, name a workspace you belong to: it shows that workspace’s connections and your own personal ones. Some integrations require an enabled workspace to be named. A Connector Token or a browser session is refused. Each toolkit is personal or workspace, never both. A personal connection reaches every Sensei Turn of its member, and a session turn its member started (in a workspace chat, only the session's Assignee); a workspace Cron, Deploy Chat, a Turn another member sent and unassigned work reach workspace connections only. In the Personal space the owner's own Turns reach both kinds.",
|
|
11
11
|
"pathParams": [],
|
|
12
12
|
"query": [
|
|
13
13
|
{
|
|
@@ -7,7 +7,7 @@ export const operation = {
|
|
|
7
7
|
"connections",
|
|
8
8
|
"list"
|
|
9
9
|
],
|
|
10
|
-
"summary": "List the member's LinkedIn and X browser connections, oldest first: each is one account Sensei may act as, with its id, revision, account (null until Sensei fills it in), device (id, name, removed), profile (id, name), the last check (unchecked, connected, signed_out, other_account) with checkedAt, and connectThreadId, the only thread whose Turn may fill the account in. Pass its device id and profile id to every browser call for it. Only Sensei calls it
|
|
10
|
+
"summary": "List the member's LinkedIn and X browser connections, oldest first: each is one account Sensei may act as, with its id, revision, account (null until Sensei fills it in), device (id, name, removed), profile (id, name), the last check (unchecked, connected, signed_out, other_account) with checkedAt, and connectThreadId, the only thread whose Turn may fill the account in. Pass its device id and profile id to every browser call for it. Only Sensei calls it.",
|
|
11
11
|
"pathParams": [],
|
|
12
12
|
"query": [
|
|
13
13
|
{
|
|
@@ -7,7 +7,7 @@ export const operation = {
|
|
|
7
7
|
"connections",
|
|
8
8
|
"update"
|
|
9
9
|
],
|
|
10
|
-
"summary": "Report what one check of the live page saw for a browser connection, with the revision `kosuke mac browser connections list` answered: connected with the account's name and handle, signed_out, or other_account with the name found. The first connected fills the account in, only from a Turn of its connectThreadId (else 403 NOT_CONNECT_THREAD); afterwards the handle must match it (else 409 ACCOUNT_MISMATCH). 409 STALE_REVISION after a newer Connect or Reconnect: read again. 404 once the member disconnected it. Only Sensei calls it
|
|
10
|
+
"summary": "Report what one check of the live page saw for a browser connection, with the revision `kosuke mac browser connections list` answered: connected with the account's name and handle, signed_out, or other_account with the name found. The first connected fills the account in, only from a Turn of its connectThreadId (else 403 NOT_CONNECT_THREAD); afterwards the handle must match it (else 409 ACCOUNT_MISMATCH). 409 STALE_REVISION after a newer Connect or Reconnect: read again. 404 once the member disconnected it. Only Sensei calls it.",
|
|
11
11
|
"pathParams": [],
|
|
12
12
|
"query": [],
|
|
13
13
|
"body": {
|
|
@@ -6,7 +6,7 @@ export const operation = {
|
|
|
6
6
|
"browser",
|
|
7
7
|
"login"
|
|
8
8
|
],
|
|
9
|
-
"summary": "Get a site signed in in this Sensei Thread's browser from the member's everyday Chrome: pass the browser call's profile and deviceId, and the site as a bare hostname (twitter.com is x.com; Google's sites are refused). --reuse picks up the sign-in that profile in their Chrome holds by itself, with no tap:
|
|
9
|
+
"summary": "Get a site signed in in this Sensei Thread's browser from the member's everyday Chrome: pass the browser call's profile and deviceId, and the site as a bare hostname (twitter.com is x.com; Google's sites are refused). --reuse picks up the sign-in that profile in their Chrome holds by itself, with no tap: once per site and profile in a Turn, with the profile's exact ID. It never opens Chrome or waits for anyone, and answers opened false and signedIn false with chrome none (their Chrome holds no sign-in for the site, so nothing changed), same (the one this thread's browser already holds) or different (taken into this thread's browser, taken true). Then, unless it answered none or same, open the site with browser and check the account. On SIGN_IN_NEEDS_TAP or UPDATE_REQUIRED, put the sign-in card. A --reuse spends no tap, so it gives no card back. Every tapped mode (`sign-in`, `take`, `waitNew`) needs the member's tap on the sign-in card in this thread; `--forget` and `--reuse` need none. A sign-in takes the sign-in that profile in their Chrome holds when it differs from this thread's, without opening anything, and answers taken true, opened false and signedIn false, since the site has not confirmed it; or else it opens --url, or the site's page, in their Chrome and waits up to 8 minutes for the member to sign in. On LinkedIn and X it answers signedIn true and opened true. On any other site a change of the site's cookies is taken and answered taken true and signedIn false, since a change is not a sign-in, and an end with no change answers taken false; a desktop app too old to watch the site opens it and answers at once, with no taken. Every answer with taken true carries waitNewLeft: while it is above 0 and the site is still signed out, --wait-new (with the same --url), in the same Turn and with no new tap, waits for a newer sign-in, never taking the one taken already, and opens the site only when this Turn has not; once the tap's time has run out it fails with SIGN_IN_WINDOW_ENDED, and no card comes back. After the member's I'm signed in tap, --take takes that site's cookies, never Google's, and answers taken. --forget removes a sign-in this Turn took, a --reuse's included, for an account other than the one expected, and needs no tap. Each tap allows one call: a call without one, or a --wait-new that no take armed, fails with SIGN_IN_NEEDS_TAP. Then open the site with browser and check the account before account-specific work. On DEVICE_OFFLINE, TIMEOUT, SIGN_IN_TIMEOUT and KEYCHAIN_UNAVAILABLE Kosuke gives the member's card back by itself. Fails with SIGN_IN_TIMEOUT when Kosuke saw no new sign-in to LinkedIn or X within 8 minutes, PROFILE_DISCONNECTED for a profile turned off in Settings → Devices, KEYCHAIN_UNAVAILABLE when macOS did not let Kosuke read Chrome's sign-ins, STALE_TURN when the Turn stopped, and UPDATE_REQUIRED on a desktop app too old for it. Only Sensei calls it.",
|
|
10
10
|
"pathParams": [],
|
|
11
11
|
"query": [],
|
|
12
12
|
"body": {
|
|
@@ -65,7 +65,7 @@ export const operation = {
|
|
|
65
65
|
"flag": "reuse",
|
|
66
66
|
"kind": "boolean",
|
|
67
67
|
"required": false,
|
|
68
|
-
"description": "Pick up the site’s sign-in from everyday Chrome by itself, without opening anything and with no tap:
|
|
68
|
+
"description": "Pick up the site’s sign-in from everyday Chrome by itself, without opening anything and with no tap: once per site and profile in a Turn. Name the profile by its exact ID. Answers chrome none, same or different, with taken."
|
|
69
69
|
}
|
|
70
70
|
],
|
|
71
71
|
"required": true
|
|
@@ -5,7 +5,7 @@ export const operation = {
|
|
|
5
5
|
"projects",
|
|
6
6
|
"create"
|
|
7
7
|
],
|
|
8
|
-
"summary": "Connect a GitHub repository as a project in a workspace, or describe what to build to create a YOLO project on a new Kosuke-Org repository. Pass workflow yolo with a repository to import it in YOLO mode, with an optional prompt as its first message. Pass personal instead of orgId to create it in your Personal: your own credential, or your Sensei
|
|
8
|
+
"summary": "Connect a GitHub repository as a project in a workspace, or describe what to build to create a YOLO project on a new Kosuke-Org repository. Pass workflow yolo with a repository to import it in YOLO mode, with an optional prompt as its first message. Pass personal instead of orgId to create it in your Personal: your own credential, or your Sensei. Its first Deploy starts by itself, as the caller's; sessions start once it lands. Imports only a repository your own GitHub Connection can write to: 403 GITHUB_REPOSITORY_ACCESS_REQUIRED otherwise, 401 GITHUB_RECONNECT_REQUIRED when GitHub no longer accepts your connection. Pass workflow yolo or personal only when the member asked for it. Report a chatError; on BRANCH_PROTECTED give its message and do not retry.",
|
|
9
9
|
"pathParams": [],
|
|
10
10
|
"query": [],
|
|
11
11
|
"body": {
|
|
@@ -60,7 +60,7 @@ export const operation = {
|
|
|
60
60
|
"flag": "personal",
|
|
61
61
|
"kind": "boolean",
|
|
62
62
|
"required": false,
|
|
63
|
-
"description": "Create a personal project instead of naming a workspace with orgId. Requires your own credential, or your Sensei
|
|
63
|
+
"description": "Create a personal project instead of naming a workspace with orgId. Requires your own credential, or your Sensei."
|
|
64
64
|
}
|
|
65
65
|
],
|
|
66
66
|
"required": true
|
|
@@ -6,7 +6,7 @@ export const operation = {
|
|
|
6
6
|
"device-requests",
|
|
7
7
|
"list"
|
|
8
8
|
],
|
|
9
|
-
"summary": "List the Device Requests of a Chat Session, oldest first, as you would see them on its cards: id, device, kind, owner, reason, status (pending, approved, declined, expired, withdrawn or closed), who asked and who answered, when,
|
|
9
|
+
"summary": "List the Device Requests of a Chat Session, oldest first, as you would see them on its cards: id, device, kind, owner, reason, status (pending, approved, declined, expired, withdrawn or closed), who asked and who answered, when, canApprove, whether you may answer it, and occupiedBy, session or sensei when someone else uses the device while it is pending. A request past its 30 minutes reads expired.",
|
|
10
10
|
"pathParams": [],
|
|
11
11
|
"query": [
|
|
12
12
|
{
|
|
@@ -78,6 +78,13 @@ export const operation = {
|
|
|
78
78
|
"kind": "string",
|
|
79
79
|
"required": false
|
|
80
80
|
},
|
|
81
|
+
{
|
|
82
|
+
"name": "branch",
|
|
83
|
+
"flag": "branch",
|
|
84
|
+
"kind": "string",
|
|
85
|
+
"required": false,
|
|
86
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch."
|
|
87
|
+
},
|
|
81
88
|
{
|
|
82
89
|
"name": "reason",
|
|
83
90
|
"flag": "reason",
|
|
@@ -186,6 +193,13 @@ export const operation = {
|
|
|
186
193
|
"kind": "string",
|
|
187
194
|
"required": false
|
|
188
195
|
},
|
|
196
|
+
{
|
|
197
|
+
"name": "branch",
|
|
198
|
+
"flag": "branch",
|
|
199
|
+
"kind": "string",
|
|
200
|
+
"required": false,
|
|
201
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch."
|
|
202
|
+
},
|
|
189
203
|
{
|
|
190
204
|
"name": "reason",
|
|
191
205
|
"flag": "reason",
|
|
@@ -5,7 +5,7 @@ export const operation = {
|
|
|
5
5
|
"sessions",
|
|
6
6
|
"delete"
|
|
7
7
|
],
|
|
8
|
-
"summary": "Delete a chat session. Sensei deletes only a Backlog ticket, refused with 409 NOT_IN_BACKLOG once it started,
|
|
8
|
+
"summary": "Delete a chat session. Sensei deletes only a Backlog ticket, refused with 409 NOT_IN_BACKLOG once it started, whatever started the Turn.",
|
|
9
9
|
"pathParams": [
|
|
10
10
|
"projectId",
|
|
11
11
|
"sessionId"
|
|
@@ -64,6 +64,13 @@ export const operation = {
|
|
|
64
64
|
"kind": "string",
|
|
65
65
|
"required": false
|
|
66
66
|
},
|
|
67
|
+
{
|
|
68
|
+
"name": "branch",
|
|
69
|
+
"flag": "branch",
|
|
70
|
+
"kind": "string",
|
|
71
|
+
"required": false,
|
|
72
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch."
|
|
73
|
+
},
|
|
67
74
|
{
|
|
68
75
|
"name": "reason",
|
|
69
76
|
"flag": "reason",
|
|
@@ -194,6 +201,13 @@ export const operation = {
|
|
|
194
201
|
"kind": "string",
|
|
195
202
|
"required": false
|
|
196
203
|
},
|
|
204
|
+
{
|
|
205
|
+
"name": "branch",
|
|
206
|
+
"flag": "branch",
|
|
207
|
+
"kind": "string",
|
|
208
|
+
"required": false,
|
|
209
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch."
|
|
210
|
+
},
|
|
197
211
|
{
|
|
198
212
|
"name": "reason",
|
|
199
213
|
"flag": "reason",
|
package/openapi.json
CHANGED
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
"/api/agent-integrations/execute": {
|
|
144
144
|
"post": {
|
|
145
145
|
"operationId": "integrationsToolsCall",
|
|
146
|
-
"summary": "Run one integration tool. An agent runs it for its own workspace, or on the member’s personal connection
|
|
146
|
+
"summary": "Run one integration tool. An agent runs it for its own workspace, or on the member’s personal connection in any of their Sensei Turns or a session turn that member started. With an API key, name a workspace you belong to: the call runs only on your own personal connections, and one on a workspace connection is refused. The answer names the connection it ran on, or lists the connections to choose from when the call needs one. A tool failure answers 200 with isError true. Some integrations require an enabled workspace to be named. A Connector Token or a browser session is refused.",
|
|
147
147
|
"tags": ["integrations"],
|
|
148
148
|
"x-kosuke-command": ["integrations", "tools", "call"],
|
|
149
149
|
"x-kosuke-hidden": true,
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
"/api/agent-integrations/tools": {
|
|
236
236
|
"get": {
|
|
237
237
|
"operationId": "integrationsToolsList",
|
|
238
|
-
"summary": "List the integration tools you can run now, with the connections that run them. An agent reads its own workspace. With an API key, name a workspace you belong to: it shows that workspace’s connections and your own personal ones. Some integrations require an enabled workspace to be named. A Connector Token or a browser session is refused. Each toolkit is personal or workspace, never both. A personal connection reaches
|
|
238
|
+
"summary": "List the integration tools you can run now, with the connections that run them. An agent reads its own workspace. With an API key, name a workspace you belong to: it shows that workspace’s connections and your own personal ones. Some integrations require an enabled workspace to be named. A Connector Token or a browser session is refused. Each toolkit is personal or workspace, never both. A personal connection reaches every Sensei Turn of its member, and a session turn its member started (in a workspace chat, only the session's Assignee); a workspace Cron, Deploy Chat, a Turn another member sent and unassigned work reach workspace connections only. In the Personal space the owner's own Turns reach both kinds.",
|
|
239
239
|
"tags": ["integrations"],
|
|
240
240
|
"x-kosuke-command": ["integrations", "tools", "list"],
|
|
241
241
|
"x-kosuke-hidden": true,
|
|
@@ -799,7 +799,7 @@
|
|
|
799
799
|
"/api/devices/available": {
|
|
800
800
|
"get": {
|
|
801
801
|
"operationId": "devicesList",
|
|
802
|
-
"summary": "From a Chat Session: the devices it may ask for, the workspace's devices and the session member's own Macs, each with its id, kind, whether it is online, the tools it offers
|
|
802
|
+
"summary": "From a Chat Session: the devices it may ask for, the workspace's devices and the session member's own Macs, each with its id, kind, whether it is online, the tools it offers, this session's access: none, pending or approved, and occupied with occupiedBy (session or sensei) when someone else uses it now. Pick an online device with the tools the test needs: a workspace device first, and the member's own Mac only when no workspace device fits, whatever the names or past approvals. Of those, pick a free one, and ask for an occupied one only when no free device fits. Request one with `kosuke devices requests create` before any mac command, and use one only when the test truly needs a real Mac.",
|
|
803
803
|
"tags": ["devices"],
|
|
804
804
|
"x-kosuke-command": ["devices", "list"],
|
|
805
805
|
"x-kosuke-sandbox-token": true,
|
|
@@ -1116,7 +1116,7 @@
|
|
|
1116
1116
|
"/api/devices/mac/browser-connections": {
|
|
1117
1117
|
"get": {
|
|
1118
1118
|
"operationId": "macBrowserConnectionsList",
|
|
1119
|
-
"summary": "List the member's LinkedIn and X browser connections, oldest first: each is one account Sensei may act as, with its id, revision, account (null until Sensei fills it in), device (id, name, removed), profile (id, name), the last check (unchecked, connected, signed_out, other_account) with checkedAt, and connectThreadId, the only thread whose Turn may fill the account in. Pass its device id and profile id to every browser call for it. Only Sensei calls it
|
|
1119
|
+
"summary": "List the member's LinkedIn and X browser connections, oldest first: each is one account Sensei may act as, with its id, revision, account (null until Sensei fills it in), device (id, name, removed), profile (id, name), the last check (unchecked, connected, signed_out, other_account) with checkedAt, and connectThreadId, the only thread whose Turn may fill the account in. Pass its device id and profile id to every browser call for it. Only Sensei calls it.",
|
|
1120
1120
|
"tags": ["mac"],
|
|
1121
1121
|
"x-kosuke-command": ["mac", "browser", "connections", "list"],
|
|
1122
1122
|
"x-kosuke-sandbox-token": true,
|
|
@@ -1170,7 +1170,7 @@
|
|
|
1170
1170
|
},
|
|
1171
1171
|
"post": {
|
|
1172
1172
|
"operationId": "macBrowserConnectionsUpdate",
|
|
1173
|
-
"summary": "Report what one check of the live page saw for a browser connection, with the revision `kosuke mac browser connections list` answered: connected with the account's name and handle, signed_out, or other_account with the name found. The first connected fills the account in, only from a Turn of its connectThreadId (else 403 NOT_CONNECT_THREAD); afterwards the handle must match it (else 409 ACCOUNT_MISMATCH). 409 STALE_REVISION after a newer Connect or Reconnect: read again. 404 once the member disconnected it. Only Sensei calls it
|
|
1173
|
+
"summary": "Report what one check of the live page saw for a browser connection, with the revision `kosuke mac browser connections list` answered: connected with the account's name and handle, signed_out, or other_account with the name found. The first connected fills the account in, only from a Turn of its connectThreadId (else 403 NOT_CONNECT_THREAD); afterwards the handle must match it (else 409 ACCOUNT_MISMATCH). 409 STALE_REVISION after a newer Connect or Reconnect: read again. 404 once the member disconnected it. Only Sensei calls it.",
|
|
1174
1174
|
"tags": ["mac"],
|
|
1175
1175
|
"x-kosuke-command": ["mac", "browser", "connections", "update"],
|
|
1176
1176
|
"x-kosuke-sandbox-token": true,
|
|
@@ -1328,7 +1328,7 @@
|
|
|
1328
1328
|
"/api/devices/mac/browser-sign-in": {
|
|
1329
1329
|
"post": {
|
|
1330
1330
|
"operationId": "macBrowserLogin",
|
|
1331
|
-
"summary": "Get a site signed in in this Sensei Thread's browser from the member's everyday Chrome: pass the browser call's profile and deviceId, and the site as a bare hostname (twitter.com is x.com; Google's sites are refused). --reuse picks up the sign-in that profile in their Chrome holds by itself, with no tap:
|
|
1331
|
+
"summary": "Get a site signed in in this Sensei Thread's browser from the member's everyday Chrome: pass the browser call's profile and deviceId, and the site as a bare hostname (twitter.com is x.com; Google's sites are refused). --reuse picks up the sign-in that profile in their Chrome holds by itself, with no tap: once per site and profile in a Turn, with the profile's exact ID. It never opens Chrome or waits for anyone, and answers opened false and signedIn false with chrome none (their Chrome holds no sign-in for the site, so nothing changed), same (the one this thread's browser already holds) or different (taken into this thread's browser, taken true). Then, unless it answered none or same, open the site with browser and check the account. On SIGN_IN_NEEDS_TAP or UPDATE_REQUIRED, put the sign-in card. A --reuse spends no tap, so it gives no card back. Every tapped mode (`sign-in`, `take`, `waitNew`) needs the member's tap on the sign-in card in this thread; `--forget` and `--reuse` need none. A sign-in takes the sign-in that profile in their Chrome holds when it differs from this thread's, without opening anything, and answers taken true, opened false and signedIn false, since the site has not confirmed it; or else it opens --url, or the site's page, in their Chrome and waits up to 8 minutes for the member to sign in. On LinkedIn and X it answers signedIn true and opened true. On any other site a change of the site's cookies is taken and answered taken true and signedIn false, since a change is not a sign-in, and an end with no change answers taken false; a desktop app too old to watch the site opens it and answers at once, with no taken. Every answer with taken true carries waitNewLeft: while it is above 0 and the site is still signed out, --wait-new (with the same --url), in the same Turn and with no new tap, waits for a newer sign-in, never taking the one taken already, and opens the site only when this Turn has not; once the tap's time has run out it fails with SIGN_IN_WINDOW_ENDED, and no card comes back. After the member's I'm signed in tap, --take takes that site's cookies, never Google's, and answers taken. --forget removes a sign-in this Turn took, a --reuse's included, for an account other than the one expected, and needs no tap. Each tap allows one call: a call without one, or a --wait-new that no take armed, fails with SIGN_IN_NEEDS_TAP. Then open the site with browser and check the account before account-specific work. On DEVICE_OFFLINE, TIMEOUT, SIGN_IN_TIMEOUT and KEYCHAIN_UNAVAILABLE Kosuke gives the member's card back by itself. Fails with SIGN_IN_TIMEOUT when Kosuke saw no new sign-in to LinkedIn or X within 8 minutes, PROFILE_DISCONNECTED for a profile turned off in Settings → Devices, KEYCHAIN_UNAVAILABLE when macOS did not let Kosuke read Chrome's sign-ins, STALE_TURN when the Turn stopped, and UPDATE_REQUIRED on a desktop app too old for it. Only Sensei calls it.",
|
|
1332
1332
|
"tags": ["mac"],
|
|
1333
1333
|
"x-kosuke-command": ["mac", "browser", "login"],
|
|
1334
1334
|
"x-kosuke-answer-timeout-ms": 590000,
|
|
@@ -1379,7 +1379,7 @@
|
|
|
1379
1379
|
"type": "boolean"
|
|
1380
1380
|
},
|
|
1381
1381
|
"reuse": {
|
|
1382
|
-
"description": "Pick up the site’s sign-in from everyday Chrome by itself, without opening anything and with no tap:
|
|
1382
|
+
"description": "Pick up the site’s sign-in from everyday Chrome by itself, without opening anything and with no tap: once per site and profile in a Turn. Name the profile by its exact ID. Answers chrome none, same or different, with taken.",
|
|
1383
1383
|
"type": "boolean"
|
|
1384
1384
|
}
|
|
1385
1385
|
},
|
|
@@ -8041,6 +8041,12 @@
|
|
|
8041
8041
|
"minLength": 1,
|
|
8042
8042
|
"maxLength": 255
|
|
8043
8043
|
},
|
|
8044
|
+
"branch": {
|
|
8045
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch.",
|
|
8046
|
+
"type": "string",
|
|
8047
|
+
"minLength": 1,
|
|
8048
|
+
"maxLength": 255
|
|
8049
|
+
},
|
|
8044
8050
|
"reason": {
|
|
8045
8051
|
"description": "Why this session is being filed and what turned it up, in one line. Required from a sandbox or a Cron Run, ignored from anyone else.",
|
|
8046
8052
|
"type": "string",
|
|
@@ -8123,6 +8129,12 @@
|
|
|
8123
8129
|
"minLength": 1,
|
|
8124
8130
|
"maxLength": 255
|
|
8125
8131
|
},
|
|
8132
|
+
"branch": {
|
|
8133
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch.",
|
|
8134
|
+
"type": "string",
|
|
8135
|
+
"minLength": 1,
|
|
8136
|
+
"maxLength": 255
|
|
8137
|
+
},
|
|
8126
8138
|
"reason": {
|
|
8127
8139
|
"description": "Why this session is being filed and what turned it up, in one line. Required from a sandbox or a Cron Run, ignored from anyone else.",
|
|
8128
8140
|
"type": "string",
|
|
@@ -9525,7 +9537,7 @@
|
|
|
9525
9537
|
},
|
|
9526
9538
|
"post": {
|
|
9527
9539
|
"operationId": "projectsCreate",
|
|
9528
|
-
"summary": "Connect a GitHub repository as a project in a workspace, or describe what to build to create a YOLO project on a new Kosuke-Org repository. Pass workflow yolo with a repository to import it in YOLO mode, with an optional prompt as its first message. Pass personal instead of orgId to create it in your Personal: your own credential, or your Sensei
|
|
9540
|
+
"summary": "Connect a GitHub repository as a project in a workspace, or describe what to build to create a YOLO project on a new Kosuke-Org repository. Pass workflow yolo with a repository to import it in YOLO mode, with an optional prompt as its first message. Pass personal instead of orgId to create it in your Personal: your own credential, or your Sensei. Its first Deploy starts by itself, as the caller's; sessions start once it lands. Imports only a repository your own GitHub Connection can write to: 403 GITHUB_REPOSITORY_ACCESS_REQUIRED otherwise, 401 GITHUB_RECONNECT_REQUIRED when GitHub no longer accepts your connection. Pass workflow yolo or personal only when the member asked for it. Report a chatError; on BRANCH_PROTECTED give its message and do not retry.",
|
|
9529
9541
|
"tags": ["projects"],
|
|
9530
9542
|
"x-kosuke-command": ["projects", "create"],
|
|
9531
9543
|
"x-kosuke-sandbox-token": true,
|
|
@@ -9571,7 +9583,7 @@
|
|
|
9571
9583
|
"minLength": 1
|
|
9572
9584
|
},
|
|
9573
9585
|
"personal": {
|
|
9574
|
-
"description": "Create a personal project instead of naming a workspace with orgId. Requires your own credential, or your Sensei
|
|
9586
|
+
"description": "Create a personal project instead of naming a workspace with orgId. Requires your own credential, or your Sensei.",
|
|
9575
9587
|
"type": "boolean",
|
|
9576
9588
|
"const": true
|
|
9577
9589
|
}
|
|
@@ -10835,6 +10847,12 @@
|
|
|
10835
10847
|
"minLength": 1,
|
|
10836
10848
|
"maxLength": 255
|
|
10837
10849
|
},
|
|
10850
|
+
"branch": {
|
|
10851
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch.",
|
|
10852
|
+
"type": "string",
|
|
10853
|
+
"minLength": 1,
|
|
10854
|
+
"maxLength": 255
|
|
10855
|
+
},
|
|
10838
10856
|
"reason": {
|
|
10839
10857
|
"description": "Why this session is being filed and what turned it up, in one line. Required from a sandbox or a Cron Run, ignored from anyone else.",
|
|
10840
10858
|
"type": "string",
|
|
@@ -10900,6 +10918,12 @@
|
|
|
10900
10918
|
"minLength": 1,
|
|
10901
10919
|
"maxLength": 255
|
|
10902
10920
|
},
|
|
10921
|
+
"branch": {
|
|
10922
|
+
"description": "An existing branch the session works on: it checks it out, pushes to it and opens its pull request from it. Not the default branch, the Target Branch, or a branch another open session works on. Absent: a new branch. Repository projects only; not with startBranch.",
|
|
10923
|
+
"type": "string",
|
|
10924
|
+
"minLength": 1,
|
|
10925
|
+
"maxLength": 255
|
|
10926
|
+
},
|
|
10903
10927
|
"reason": {
|
|
10904
10928
|
"description": "Why this session is being filed and what turned it up, in one line. Required from a sandbox or a Cron Run, ignored from anyone else.",
|
|
10905
10929
|
"type": "string",
|
|
@@ -11203,7 +11227,7 @@
|
|
|
11203
11227
|
},
|
|
11204
11228
|
"delete": {
|
|
11205
11229
|
"operationId": "sessionsDelete",
|
|
11206
|
-
"summary": "Delete a chat session. Sensei deletes only a Backlog ticket, refused with 409 NOT_IN_BACKLOG once it started,
|
|
11230
|
+
"summary": "Delete a chat session. Sensei deletes only a Backlog ticket, refused with 409 NOT_IN_BACKLOG once it started, whatever started the Turn.",
|
|
11207
11231
|
"tags": ["sessions"],
|
|
11208
11232
|
"x-kosuke-command": ["sessions", "delete"],
|
|
11209
11233
|
"x-kosuke-sandbox-token": true,
|
|
@@ -22053,7 +22077,7 @@
|
|
|
22053
22077
|
"/api/sensei/device-requests": {
|
|
22054
22078
|
"get": {
|
|
22055
22079
|
"operationId": "senseiDeviceRequestsList",
|
|
22056
|
-
"summary": "List the Device Requests of a Chat Session, oldest first, as you would see them on its cards: id, device, kind, owner, reason, status (pending, approved, declined, expired, withdrawn or closed), who asked and who answered, when,
|
|
22080
|
+
"summary": "List the Device Requests of a Chat Session, oldest first, as you would see them on its cards: id, device, kind, owner, reason, status (pending, approved, declined, expired, withdrawn or closed), who asked and who answered, when, canApprove, whether you may answer it, and occupiedBy, session or sensei when someone else uses the device while it is pending. A request past its 30 minutes reads expired.",
|
|
22057
22081
|
"tags": ["sensei"],
|
|
22058
22082
|
"x-kosuke-command": ["sensei", "device-requests", "list"],
|
|
22059
22083
|
"x-kosuke-sandbox-token": true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kosuke-ai/kosuke",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14",
|
|
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,12 +40,11 @@
|
|
|
40
40
|
"vitest": "^4.1.12"
|
|
41
41
|
},
|
|
42
42
|
"kosukeRelease": {
|
|
43
|
-
"sourceCommit": "
|
|
44
|
-
"sourceIdentity": "
|
|
43
|
+
"sourceCommit": "76f5440713c26ece8b7a10148e2756fcda195399",
|
|
44
|
+
"sourceIdentity": "6d76d9b36ed84006ecffb3cbf97a91c26c66ebf3596e530a3aa342cbb7421ed0",
|
|
45
45
|
"fragments": [
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"watch-report-tr3ypz.json"
|
|
46
|
+
"devices-list-occupied-mmw6bi.json",
|
|
47
|
+
"task-requested-branch.json"
|
|
49
48
|
]
|
|
50
49
|
}
|
|
51
50
|
}
|