ms-tau-sdk 1.2.12.dev21__tar.gz → 1.2.13.dev22__tar.gz
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.
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/CHANGELOG.md +29 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/PKG-INFO +20 -8
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/README.md +19 -7
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/state.py +3 -1
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/static/app.js +1 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/static/index.html +1 -1
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/pyproject.toml +1 -1
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +25 -13
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/application.py +2 -2
- ms_tau_sdk-1.2.13.dev22/src/ms_tau_sdk/backend/auth.py +480 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/backend/local.py +39 -10
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/manager.py +3 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/settings.py +117 -9
- ms_tau_sdk-1.2.12.dev21/src/ms_tau_sdk/backend/auth.py +0 -212
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/.gitignore +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/app.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/config.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/a2a.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/chat.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/conversations.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/dependencies.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/health.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/inspection.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/local_chat.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/models.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/api/sessions.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/app.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/backend/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/backend/client.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/backend/mcp.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/backend/models.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/backend/routes.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/cli.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/errors.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/logging.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/protocols/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/providers/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/providers/definitions.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/providers/factory.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/resources/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/resources/loader.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/events.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/extensions.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/failures.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/observability.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/provenance.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/session.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/runtime/task_context.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/sessions/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/sessions/storage.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/skills.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/tools/__init__.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
- {ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/src/ms_tau_sdk/tools/task_control.py +0 -0
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- Local mode no longer needs a token in the environment or in the project `.env`. With neither
|
|
6
|
+
`MAINSEQUENCE_ACCESS_TOKEN` nor `MAINSEQUENCE_REFRESH_TOKEN` set, it asks a Main Sequence CLI
|
|
7
|
+
for the access token with `mainsequence auth token --json`: log in once with
|
|
8
|
+
`mainsequence login`. The SDK looks for the CLI in the new `MAINSEQUENCE_CLI` setting, then
|
|
9
|
+
beside the Python interpreter, then on `PATH`. It keeps the token in memory, reuses it until 60
|
|
10
|
+
seconds before it expires, and asks again after a rejected request. It refuses an answer for
|
|
11
|
+
another backend. A missing CLI, a CLI too old for the command, a missing or expired session, a
|
|
12
|
+
machine without a credential store, a time-out, and malformed output each have their own error.
|
|
13
|
+
The SDK still does not depend on or import the `mainsequence` package and does not read the
|
|
14
|
+
CLI's credential store. The token pair stays supported in the process environment, for
|
|
15
|
+
launchers and CI, and with both tokens set the CLI is never run. A pair read from the project
|
|
16
|
+
`.env` file still works but is deprecated: startup logs one warning that names the file and the
|
|
17
|
+
two variables, and `mainsequence refresh-token` run in that directory removes them. `/health`
|
|
18
|
+
and `/ready` report the source in `mainsequence_auth_source` (`cli`, `environment`, or
|
|
19
|
+
`env_file`; `null` in managed mode), and Tau Board shows it in Connect. The owner scope of local
|
|
20
|
+
chat sessions and direct A2A conversations is derived from the subject of the CLI token, so a
|
|
21
|
+
user keeps the same local sessions with either source. See the 2026-09-30 amendments of ADR 0005
|
|
22
|
+
and ADR 0017.
|
|
23
|
+
- Tau Board again reads the local state the SDK writes. 1.2.12 raised the local SQLite schema
|
|
24
|
+
version to 6 without raising the version Tau Board accepts, so the board refused every store
|
|
25
|
+
that 1.2.12 had created or opened: the State, session, Task, and Task-log views returned
|
|
26
|
+
"Unknown Tau local SQLite schema version". Schema 6 only adds the `local_chat_sessions` table,
|
|
27
|
+
and the board's queries are unchanged. The board still accepts exactly one schema version, so a
|
|
28
|
+
store last opened by 1.2.11 or earlier is refused until Tau starts once and migrates it. A Board
|
|
29
|
+
test now reads a store written by the SDK's local backend, so a schema change the board has not
|
|
30
|
+
followed fails the Board suite.
|
|
31
|
+
|
|
3
32
|
## 1.2.12 — 2026-09-27
|
|
4
33
|
|
|
5
34
|
- Local `/api/chat` sessions now survive a UI reload and a Tau restart. Local mode records each chat
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ms-tau-sdk
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.13.dev22
|
|
4
4
|
Summary: Workspace-bound Tau application primitives for Main Sequence projects
|
|
5
5
|
Project-URL: Changelog, https://github.com/mainsequence-sdk/ms-tau-sdk/blob/development/CHANGELOG.md
|
|
6
6
|
Project-URL: Documentation, https://github.com/mainsequence-sdk/ms-tau-sdk/tree/development/docs
|
|
@@ -129,9 +129,9 @@ project selects a provider and model explicitly, while Main Sequence still autho
|
|
|
129
129
|
the provider credential and supplies the live MCP catalog:
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
|
+
mainsequence login # once; the session is kept by the CLI, not in .env
|
|
133
|
+
|
|
132
134
|
export MAINSEQUENCE_AUTH_MODE=jwt
|
|
133
|
-
export MAINSEQUENCE_ACCESS_TOKEN="<exported-user-access-token>"
|
|
134
|
-
export MAINSEQUENCE_REFRESH_TOKEN="<exported-user-refresh-token>"
|
|
135
135
|
export TAU_LOCAL_MODE=true
|
|
136
136
|
export TAU_LOCAL_PROVIDER=openai
|
|
137
137
|
export TAU_LOCAL_MODEL=gpt-5.4
|
|
@@ -139,10 +139,21 @@ export TAU_LOCAL_MODEL=gpt-5.4
|
|
|
139
139
|
uv run ms-tau
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
`
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
Log in once with the Main Sequence CLI. Local mode then asks that CLI for a short-lived access
|
|
143
|
+
token with `mainsequence auth token --json`, and again when the token is about to expire. No token
|
|
144
|
+
is exported and none is written to the project `.env`. The SDK looks for the CLI in
|
|
145
|
+
`MAINSEQUENCE_CLI`, then beside the Python interpreter, then on `PATH`. `ms-tau-sdk` does not
|
|
146
|
+
install or import the `mainsequence` Python package and does not read the CLI's credential store.
|
|
147
|
+
|
|
148
|
+
Launchers and CI can hand the process a token pair instead. With both variables set, the SDK
|
|
149
|
+
uses them and the public refresh API and never runs the CLI:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
export MAINSEQUENCE_ACCESS_TOKEN="<user-access-token>"
|
|
153
|
+
export MAINSEQUENCE_REFRESH_TOKEN="<user-refresh-token>"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Provider secrets are never environment settings and are never persisted locally.
|
|
146
157
|
|
|
147
158
|
Local conversations and public A2A Tasks are stored at
|
|
148
159
|
`~/.tau/mainsequence/<workspace-hash>/runtime.sqlite3`; an omitted chat `sessionUid` uses the
|
|
@@ -243,7 +254,8 @@ are not bundled into the SDK. Main Sequence transport and protocol behavior rema
|
|
|
243
254
|
## Included capabilities
|
|
244
255
|
|
|
245
256
|
- FastAPI application construction and lifecycle management
|
|
246
|
-
- runtime-credential exchange, local
|
|
257
|
+
- runtime-credential exchange, local sign-in through the Main Sequence CLI session or a user-JWT
|
|
258
|
+
environment pair, and authenticated Main Sequence access
|
|
247
259
|
- provider validation and credential hydration
|
|
248
260
|
- durable Tau sessions, leases, restore, persistence, cancellation, eviction, and shutdown
|
|
249
261
|
- local Tau execution without backend AgentSession pre-creation
|
|
@@ -98,9 +98,9 @@ project selects a provider and model explicitly, while Main Sequence still autho
|
|
|
98
98
|
the provider credential and supplies the live MCP catalog:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
+
mainsequence login # once; the session is kept by the CLI, not in .env
|
|
102
|
+
|
|
101
103
|
export MAINSEQUENCE_AUTH_MODE=jwt
|
|
102
|
-
export MAINSEQUENCE_ACCESS_TOKEN="<exported-user-access-token>"
|
|
103
|
-
export MAINSEQUENCE_REFRESH_TOKEN="<exported-user-refresh-token>"
|
|
104
104
|
export TAU_LOCAL_MODE=true
|
|
105
105
|
export TAU_LOCAL_PROVIDER=openai
|
|
106
106
|
export TAU_LOCAL_MODEL=gpt-5.4
|
|
@@ -108,10 +108,21 @@ export TAU_LOCAL_MODEL=gpt-5.4
|
|
|
108
108
|
uv run ms-tau
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
`
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
Log in once with the Main Sequence CLI. Local mode then asks that CLI for a short-lived access
|
|
112
|
+
token with `mainsequence auth token --json`, and again when the token is about to expire. No token
|
|
113
|
+
is exported and none is written to the project `.env`. The SDK looks for the CLI in
|
|
114
|
+
`MAINSEQUENCE_CLI`, then beside the Python interpreter, then on `PATH`. `ms-tau-sdk` does not
|
|
115
|
+
install or import the `mainsequence` Python package and does not read the CLI's credential store.
|
|
116
|
+
|
|
117
|
+
Launchers and CI can hand the process a token pair instead. With both variables set, the SDK
|
|
118
|
+
uses them and the public refresh API and never runs the CLI:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
export MAINSEQUENCE_ACCESS_TOKEN="<user-access-token>"
|
|
122
|
+
export MAINSEQUENCE_REFRESH_TOKEN="<user-refresh-token>"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Provider secrets are never environment settings and are never persisted locally.
|
|
115
126
|
|
|
116
127
|
Local conversations and public A2A Tasks are stored at
|
|
117
128
|
`~/.tau/mainsequence/<workspace-hash>/runtime.sqlite3`; an omitted chat `sessionUid` uses the
|
|
@@ -212,7 +223,8 @@ are not bundled into the SDK. Main Sequence transport and protocol behavior rema
|
|
|
212
223
|
## Included capabilities
|
|
213
224
|
|
|
214
225
|
- FastAPI application construction and lifecycle management
|
|
215
|
-
- runtime-credential exchange, local
|
|
226
|
+
- runtime-credential exchange, local sign-in through the Main Sequence CLI session or a user-JWT
|
|
227
|
+
environment pair, and authenticated Main Sequence access
|
|
216
228
|
- provider validation and credential hydration
|
|
217
229
|
- durable Tau sessions, leases, restore, persistence, cancellation, eviction, and shutdown
|
|
218
230
|
- local Tau execution without backend AgentSession pre-creation
|
{ms_tau_sdk-1.2.12.dev21 → ms_tau_sdk-1.2.13.dev22}/packages/tau-board/src/ms_tau_board/state.py
RENAMED
|
@@ -9,7 +9,9 @@ from contextlib import closing
|
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
# The version `ms_tau_sdk.backend.local` stamps on the store. The board never imports the SDK,
|
|
13
|
+
# so this follows it by hand.
|
|
14
|
+
SCHEMA_VERSION = "6"
|
|
13
15
|
TABLES = (
|
|
14
16
|
"sessions",
|
|
15
17
|
"entries",
|
|
@@ -210,6 +210,7 @@ async function checkConnection() {
|
|
|
210
210
|
detailLine(box, "Mode", result.health.mode);
|
|
211
211
|
detailLine(box, "Version", result.health.version);
|
|
212
212
|
detailLine(box, "Ready", result.ready ? "Yes" : "No");
|
|
213
|
+
detailLine(box, "Credential source", result.health.mainsequence_auth_source);
|
|
213
214
|
detailLine(box, "Workspace digest", result.health.workspace_digest);
|
|
214
215
|
detailLine(box, "State directory", result.stateDir);
|
|
215
216
|
detailLine(box, "MCP tools", result.health.mcp_tool_count);
|
|
@@ -192,7 +192,7 @@
|
|
|
192
192
|
<button class="button is-primary" id="settings-apply-board">Apply to this session</button>
|
|
193
193
|
<p class="help mt-2">This updates the selected profile immediately. It does not write <code>.env</code>.</p>
|
|
194
194
|
</div>
|
|
195
|
-
<div class="box"><h2 class="title is-6">Credential presence</h2><p class="help mb-3">Board process and local <code>.env</code> are shown separately. Credential values are never sent to the browser.</p><div id="settings-credentials" class="detail-list"></div></div>
|
|
195
|
+
<div class="box"><h2 class="title is-6">Credential presence</h2><p class="help mb-3">Board process and local <code>.env</code> are shown separately. Credential values are never sent to the browser. A Tau process that uses the Main Sequence CLI session needs no token here. Connect shows its credential source.</p><div id="settings-credentials" class="detail-list"></div></div>
|
|
196
196
|
</div>
|
|
197
197
|
<div class="column">
|
|
198
198
|
<div class="box">
|
|
@@ -11,14 +11,15 @@ an offline, mock-provider, or mock-MCP mode.
|
|
|
11
11
|
|
|
12
12
|
## Start the process
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
The user logs in once with a Main Sequence CLI that provides `mainsequence auth token`. Local mode
|
|
15
|
+
then asks that CLI for a short-lived access token, at startup and again when the token is about to
|
|
16
|
+
expire. No token is exported and none is written to the project `.env`. The SDK does not install or
|
|
17
|
+
import the `mainsequence` Python package and does not read the CLI's private credential store.
|
|
17
18
|
|
|
18
19
|
```bash
|
|
20
|
+
mainsequence login # once; the session is kept by the CLI, not in .env
|
|
21
|
+
|
|
19
22
|
export MAINSEQUENCE_AUTH_MODE=jwt
|
|
20
|
-
export MAINSEQUENCE_ACCESS_TOKEN="<user-access-token>"
|
|
21
|
-
export MAINSEQUENCE_REFRESH_TOKEN="<user-refresh-token>"
|
|
22
23
|
export TAU_LOCAL_MODE=true
|
|
23
24
|
export TAU_LOCAL_PROVIDER="<provider>"
|
|
24
25
|
export TAU_LOCAL_MODEL="<model>"
|
|
@@ -28,12 +29,20 @@ export TAU_LOCAL_THINKING="<thinking-level>"
|
|
|
28
29
|
uv run ms-tau
|
|
29
30
|
```
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
`
|
|
33
|
-
|
|
32
|
+
The SDK looks for the CLI in `MAINSEQUENCE_CLI`, then beside the Python interpreter that runs
|
|
33
|
+
`ms-tau`, then on `PATH`. Launchers and CI can export `MAINSEQUENCE_ACCESS_TOKEN` and
|
|
34
|
+
`MAINSEQUENCE_REFRESH_TOKEN` instead. With both set, the SDK uses that pair and never runs the
|
|
35
|
+
CLI. Do not add token lines to `.env`. A pair found there still works, but it is deprecated and
|
|
36
|
+
startup logs a warning. `mainsequence refresh-token` run in that directory removes the lines.
|
|
37
|
+
|
|
38
|
+
Set `MAINSEQUENCE_ENDPOINT` only for a non-default platform endpoint. The CLI session must be for
|
|
39
|
+
the same endpoint. Local mode binds to `127.0.0.1:8787` by default. Treat an explicit public bind
|
|
40
|
+
as privileged exposure: each accepted request can use the authenticated user's live Main Sequence
|
|
41
|
+
permissions.
|
|
34
42
|
|
|
35
43
|
Never place JWTs or provider credentials in source control, `.tau`, copied skills, command output,
|
|
36
|
-
or debugging artifacts.
|
|
44
|
+
or debugging artifacts. Do not run `mainsequence auth token` to read its output: it prints the
|
|
45
|
+
access token. The user JWT is sent only to Main Sequence. Main Sequence validates the
|
|
37
46
|
explicit `TAU_LOCAL_PROVIDER` and `TAU_LOCAL_MODEL`, returns provider-control evidence, and hydrates
|
|
38
47
|
the provider credential used for inference. Provider secrets are neither environment settings nor
|
|
39
48
|
local state.
|
|
@@ -45,7 +54,7 @@ local state.
|
|
|
45
54
|
| Agent or AgentSession registration | Never created or updated |
|
|
46
55
|
| Chat history, snapshots, leases, activity, and cancellation | Workspace SQLite |
|
|
47
56
|
| Public A2A Message and Task state | Workspace SQLite |
|
|
48
|
-
| Main Sequence authentication and token refresh | Remote
|
|
57
|
+
| Main Sequence authentication and token refresh | Remote. The token comes from the Main Sequence CLI session, or from an exported JWT pair |
|
|
49
58
|
| Provider authorization, hydration, and inference | Remote and real |
|
|
50
59
|
| Main Sequence MCP catalog and tool calls | Remote and real; platform mutations remain possible |
|
|
51
60
|
| Project instructions, skills, hooks, and extensions | Normal repository `.tau` composition |
|
|
@@ -189,7 +198,8 @@ platform resources under the authenticated user's permissions.
|
|
|
189
198
|
|
|
190
199
|
Check the process in this order:
|
|
191
200
|
|
|
192
|
-
1. `GET /health` reports `mode: local
|
|
201
|
+
1. `GET /health` reports `mode: local`, safe composition diagnostics, and
|
|
202
|
+
`mainsequence_auth_source`: `cli`, `environment`, or `env_file`.
|
|
193
203
|
2. `GET /ready` confirms user authentication, provider control, local storage, and MCP readiness.
|
|
194
204
|
3. `GET /version` reports the expected installed SDK release.
|
|
195
205
|
4. A chat request without `sessionUid` returns an effective identifier in
|
|
@@ -203,8 +213,10 @@ Check the process in this order:
|
|
|
203
213
|
## Classify failures
|
|
204
214
|
|
|
205
215
|
- Startup setting failure: inspect the exact missing or conflicting environment variable.
|
|
206
|
-
- Authentication failure:
|
|
207
|
-
|
|
216
|
+
- Authentication failure: read the error, which names its remedy. The user runs
|
|
217
|
+
`mainsequence login`, upgrades a Main Sequence CLI that is too old for `auth token`, sets
|
|
218
|
+
`MAINSEQUENCE_CLI`, or provides the JWT pair. With an exported pair, export a fresh one. Do not
|
|
219
|
+
substitute a runtime credential in local mode.
|
|
208
220
|
- Provider/model rejection: verify the exact configured names against the authenticated live
|
|
209
221
|
catalog; do not silently select a different model.
|
|
210
222
|
- OpenAI-compatible transport failure: open the Task's failure incident in Tau Board. Use its
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
6
|
|
|
7
|
-
from ms_tau_sdk.backend.auth import BackendAuth,
|
|
7
|
+
from ms_tau_sdk.backend.auth import BackendAuth, RuntimeCredentialAuth, local_mode_auth
|
|
8
8
|
from ms_tau_sdk.backend.client import MainSequenceClient
|
|
9
9
|
from ms_tau_sdk.backend.local import LocalDevelopmentBackend
|
|
10
10
|
from ms_tau_sdk.providers.factory import ProviderFactory
|
|
@@ -28,7 +28,7 @@ class ApplicationServices:
|
|
|
28
28
|
auth: BackendAuth
|
|
29
29
|
backend: MainSequenceClient
|
|
30
30
|
if settings.local_mode:
|
|
31
|
-
auth =
|
|
31
|
+
auth = local_mode_auth(settings)
|
|
32
32
|
services_client = MainSequenceClient(settings, auth)
|
|
33
33
|
backend = LocalDevelopmentBackend(settings, services_client)
|
|
34
34
|
else:
|