mainsequence 9.0.23__tar.gz → 9.0.24__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.
Files changed (112) hide show
  1. {mainsequence-9.0.23 → mainsequence-9.0.24}/PKG-INFO +3 -2
  2. {mainsequence-9.0.23 → mainsequence-9.0.24}/README.md +2 -1
  3. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +1 -1
  4. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/maintenance/code_repository_maintenance/SKILL.md +20 -16
  5. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +1 -1
  6. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +1 -1
  7. mainsequence-9.0.24/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +131 -0
  8. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/cli.py +2 -191
  9. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence.egg-info/PKG-INFO +3 -2
  10. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence.egg-info/SOURCES.txt +0 -1
  11. {mainsequence-9.0.23 → mainsequence-9.0.24}/pyproject.toml +2 -2
  12. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_code_repository_documentation_contract.py +3 -8
  13. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_code_repository_skills.py +0 -1
  14. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_scaffold_skills.py +1 -1
  15. mainsequence-9.0.23/agent_scaffold/AGENTS.md +0 -122
  16. mainsequence-9.0.23/agent_scaffold/skills/sdk_code_repository_execution/SKILL.md +0 -241
  17. {mainsequence-9.0.23 → mainsequence-9.0.24}/LICENSE +0 -0
  18. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/a2a_sdk_execution/SKILL.md +0 -0
  19. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
  20. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/mainsequence-inference/SKILL.md +0 -0
  21. {mainsequence-9.0.23 → mainsequence-9.0.24}/agent_scaffold/skills/maintenance/metatables_transition/SKILL.md +0 -0
  22. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/__init__.py +0 -0
  23. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/__main__.py +0 -0
  24. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/_request_identity.py +0 -0
  25. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/_transport.py +0 -0
  26. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/bootstrap.py +0 -0
  27. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/__init__.py +0 -0
  28. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/api.py +0 -0
  29. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/browser_auth.py +0 -0
  30. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/code_repository_status.py +0 -0
  31. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/config.py +0 -0
  32. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/docker_utils.py +0 -0
  33. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/doctor.py +0 -0
  34. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/local_ops.py +0 -0
  35. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/model_filters.py +0 -0
  36. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/pydantic_cli.py +0 -0
  37. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/sdk_utils.py +0 -0
  38. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/ssh_utils.py +0 -0
  39. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/cli/ui.py +0 -0
  40. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/__init__.py +0 -0
  41. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/agent_runtime_models.py +0 -0
  42. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/base.py +0 -0
  43. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/client.py +0 -0
  44. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/compute_validation.py +0 -0
  45. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/exceptions.py +0 -0
  46. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/github_issues.py +0 -0
  47. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/inference.py +0 -0
  48. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/models_foundry.py +0 -0
  49. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/models_helpers.py +0 -0
  50. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/models_user.py +0 -0
  51. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/observability.py +0 -0
  52. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/utils.py +0 -0
  53. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/client/value_sets.py +0 -0
  54. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/code_repository_context.py +0 -0
  55. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/code_repository_skills.py +0 -0
  56. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/defaults.py +0 -0
  57. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/instrumentation/__init__.py +0 -0
  58. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/instrumentation/utils.py +0 -0
  59. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/logconf.py +0 -0
  60. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/repository_identity_security.py +0 -0
  61. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/runtime_credential_exchange.py +0 -0
  62. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/runtime_flags.py +0 -0
  63. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/scaffold_skills.py +0 -0
  64. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/server/__init__.py +0 -0
  65. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/server/_mcp_skills_upstream/__init__.py +0 -0
  66. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/server/_mcp_skills_upstream/server.py +0 -0
  67. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/server/_mcp_skills_upstream/shared.py +0 -0
  68. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/server/caller_assertions.py +0 -0
  69. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/server/fastapi.py +0 -0
  70. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence/server/mcp_skills.py +0 -0
  71. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence.egg-info/dependency_links.txt +0 -0
  72. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence.egg-info/entry_points.txt +0 -0
  73. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence.egg-info/requires.txt +0 -0
  74. {mainsequence-9.0.23 → mainsequence-9.0.24}/mainsequence.egg-info/top_level.txt +0 -0
  75. {mainsequence-9.0.23 → mainsequence-9.0.24}/setup.cfg +0 -0
  76. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_auth_bootstrap.py +0 -0
  77. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_auth_precedence.py +0 -0
  78. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_caller_assertions.py +0 -0
  79. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_canonical_api_route_contract.py +0 -0
  80. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_cli_auth_contract.py +0 -0
  81. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_cli_browser_auth.py +0 -0
  82. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_cli_request_budget.py +0 -0
  83. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_cli_secure_storage.py +0 -0
  84. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_client.py +0 -0
  85. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_code_repository_branch_contract.py +0 -0
  86. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_code_repository_runtime_context.py +0 -0
  87. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_credential_repr.py +0 -0
  88. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_dependency_extras.py +0 -0
  89. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_dev_release_version.py +0 -0
  90. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_environment_resource_context.py +0 -0
  91. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_environment_response_contracts.py +0 -0
  92. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_fastapi_mcp.py +0 -0
  93. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_fastapi_request_identity.py +0 -0
  94. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_github_issues_client.py +0 -0
  95. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_http_retry_budget.py +0 -0
  96. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_independent_context.py +0 -0
  97. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_inference_client.py +0 -0
  98. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_instrumentation.py +0 -0
  99. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_job_client.py +0 -0
  100. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_local_ops.py +0 -0
  101. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_logconf.py +0 -0
  102. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_mcp_skills.py +0 -0
  103. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_models_user_request_bound_auth.py +0 -0
  104. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_notification_uid_contract.py +0 -0
  105. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_observability_client.py +0 -0
  106. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_runtime_credential_exchange.py +0 -0
  107. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_secret_client_model.py +0 -0
  108. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_source_ownership.py +0 -0
  109. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_ssh_utils.py +0 -0
  110. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_tolerant_response_reading.py +0 -0
  111. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_tolerant_value_sets.py +0 -0
  112. {mainsequence-9.0.23 → mainsequence-9.0.24}/tests/test_user_application_facts.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 9.0.23
3
+ Version: 9.0.24
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -82,7 +82,8 @@ Main package areas:
82
82
 
83
83
  Repository areas:
84
84
 
85
- - `agent_scaffold/`: version-matched SDK skills and managed `AGENTS.md` content
85
+ - `agent_scaffold/skills/`: version-matched SDK guidance and domain skills;
86
+ repository-owned `AGENTS.md` files are never scaffolded or updated
86
87
  - `docs/`: knowledge guides, CLI docs, architecture decisions, and generated
87
88
  reference docs
88
89
  - `tests/`: offline tests plus explicitly marked live-backend tests
@@ -45,7 +45,8 @@ Main package areas:
45
45
 
46
46
  Repository areas:
47
47
 
48
- - `agent_scaffold/`: version-matched SDK skills and managed `AGENTS.md` content
48
+ - `agent_scaffold/skills/`: version-matched SDK guidance and domain skills;
49
+ repository-owned `AGENTS.md` files are never scaffolded or updated
49
50
  - `docs/`: knowledge guides, CLI docs, architecture decisions, and generated
50
51
  reference docs
51
52
  - `tests/`: offline tests plus explicitly marked live-backend tests
@@ -67,7 +67,7 @@ This skill audits. It does not implement by default.
67
67
 
68
68
  ## Read First
69
69
 
70
- 1. `AGENTS.md`
70
+ 1. Repository instructions, including `AGENTS.md` when present.
71
71
  2. the relevant installed skill and version-aligned documentation for the failing workflow
72
72
 
73
73
  ## Inputs This Skill Needs
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mainsequence-code-repository-maintenance
3
- description: Maintain an existing Main Sequence CodeRepository checkout using the SDK-version-matched CLI. Use for inspecting repository state, building or repairing .venv, refreshing local authentication, performing explicitly requested SDK, skill, or AGENTS.md updates, refreshing dependency files with CodeRepository sync, publishing changes with Git, or diagnosing a partially completed maintenance workflow.
3
+ description: Maintain an existing Main Sequence CodeRepository checkout using the SDK-version-matched CLI. Use for inspecting repository state, building or repairing .venv, refreshing local authentication, performing explicitly requested SDK or skill updates, refreshing dependency files with CodeRepository sync, publishing changes with Git, or diagnosing a partially completed maintenance workflow.
4
4
  ---
5
5
 
6
6
  # Main Sequence CodeRepository Maintenance
@@ -16,7 +16,7 @@ workflows.
16
16
  Own:
17
17
 
18
18
  - local CodeRepository inspection and maintenance sequencing;
19
- - `.venv`, SDK, managed skill, `AGENTS.md`, dependency sync, and Git publishing
19
+ - `.venv`, SDK, managed skill, dependency sync, and Git publishing
20
20
  workflows;
21
21
  - precondition checks, explicit approval gates, and partial-failure diagnosis.
22
22
 
@@ -45,7 +45,8 @@ fall back to credential claims or injected CodeRepositoryBranch values.
45
45
 
46
46
  ## Inspect Before Changing State
47
47
 
48
- 1. Read `AGENTS.md` and the relevant repository skills.
48
+ 1. Follow repository instructions, including `AGENTS.md` when present, and read
49
+ the relevant skills. The SDK never scaffolds or edits repository `AGENTS.md`.
49
50
  2. Confirm the repository root and the user's requested maintenance outcome.
50
51
  3. Inspect code repository and Git state:
51
52
 
@@ -55,11 +56,10 @@ fall back to credential claims or injected CodeRepositoryBranch values.
55
56
  git status --short
56
57
  ```
57
58
 
58
- The `code-repository current` result must report the logical `code_repository_uid`, current
59
- `git_branch`, `code_repository_branch_uid`, and `code_repository_branch_status=resolved`.
60
- Treat a detached checkout, unresolved repository, or unresolved/unregistered
61
- Git branch as a maintenance preflight failure before any
62
- mutating workflow.
59
+ Before branch-owned platform operations, require the current Git branch,
60
+ `code_repository_branch_uid`, and `code_repository_branch_status=resolved`.
61
+ Local environment and skill updates do not require a registered platform
62
+ branch or a signed-in session.
63
63
 
64
64
  4. Separate existing user changes from changes created by the maintenance
65
65
  task. Never assume every uncommitted file belongs to the current task.
@@ -173,17 +173,14 @@ the failure. On success, reload this maintenance skill before continuing.
173
173
  Do not automatically commit or push an SDK update unless the user also asked
174
174
  to publish the CodeRepository changes.
175
175
 
176
- ## Refresh Managed Skills And Instructions
176
+ ## Refresh SDK Skills And Instructions
177
177
 
178
- Outside the skill refresh included in `update-sdk`, run either managed-scaffold
179
- command only when the user explicitly requests that specific update. When both
180
- are requested, refresh the SDK-owned skills first,
181
- then update the managed Main Sequence block in
182
- `AGENTS.md`:
178
+ SDK instructions and domain skills are one versioned bundle. Outside the
179
+ refresh included in `update-sdk`, run this command only when the user explicitly
180
+ requests a skill update:
183
181
 
184
182
  ```bash
185
183
  uv run --offline mainsequence code-repository update-agent-skills --path .
186
- uv run --offline mainsequence code-repository update AGENTS.md --path .
187
184
  ```
188
185
 
189
186
  Verify `.agents/skills/mainsequence/PINNED_FROM.txt` after success:
@@ -198,6 +195,13 @@ or platform access and deletes obsolete folders, including retired table
198
195
  workflow skills. Do not preserve old or platform-owned content in that folder.
199
196
  The installed `metatables` package owns table workflows in its own namespace.
200
197
 
198
+ A missing or mismatched sentinel is a condition to report, not permission to
199
+ update. The same applies to other libraries' sentinels. The `mainsequence` CLI
200
+ does not manage `.agents/skills/ms_tau_sdk/`; its owner refreshes that namespace
201
+ with `uv run ms-tau skills sync --path .` when requested. Keep repository-owned
202
+ `AGENTS.md` as written, including any older managed blocks. Removing such a
203
+ block is a separate repository edit requested by its owner.
204
+
201
205
  When the user requests platform skills, use the separate authenticated command:
202
206
 
203
207
  ```bash
@@ -419,7 +423,7 @@ Never rerun an entire mutating workflow blindly.
419
423
 
420
424
  ## Validate And Report
421
425
 
422
- Run only repository-relevant validation discovered from `AGENTS.md`, repository
426
+ Run only repository-relevant validation discovered from existing repository instructions,
423
427
  documentation, and the changed files. Report:
424
428
 
425
429
  - the maintenance routine performed;
@@ -58,7 +58,7 @@ This skill only reasons about access to deployed resources such as `ResourceRele
58
58
 
59
59
  ## Read First
60
60
 
61
- 1. `AGENTS.md`
61
+ 1. Repository instructions, including `AGENTS.md` when present.
62
62
  2. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/users_and_access/>
63
63
  3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/constants_and_secrets/>
64
64
 
@@ -48,7 +48,7 @@ This skill must not claim ownership of:
48
48
 
49
49
  ## Read First
50
50
 
51
- 1. `AGENTS.md`
51
+ 1. Repository instructions, including `AGENTS.md` when present.
52
52
  2. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/scheduling_jobs/>
53
53
  3. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/artifacts/>
54
54
  4. <https://mainsequence-sdk.github.io/mainsequence-sdk/knowledge/infrastructure/owner_observability/> when inspecting logs or resource usage
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: mainsequence-sdk-code-repository-execution
3
+ description: Use the installed Main Sequence SDK and CLI for Git-derived CodeRepository context, version-matched contract authority, and selecting the relevant SDK or domain-package skill. Use for repository integration and SDK execution questions; use a platform-owned design skill when architecture or ontology is unresolved.
4
+ ---
5
+
6
+ # Main Sequence SDK CodeRepository Execution
7
+
8
+ Use this skill for SDK execution and CodeRepository integration. Follow the
9
+ repository's own instructions, including `AGENTS.md` when present. A repository
10
+ does not need that file to use the SDK or its skills, and the SDK does not
11
+ create, copy, update, or remove it.
12
+
13
+ ## Contract Authority
14
+
15
+ - Installed SDK code, CLI help, SDK skills, and version-matched documentation
16
+ define client behavior.
17
+ - Installed platform skills and backend-advertised schemas, templates, and
18
+ capabilities define the platform contract.
19
+ - Use the owning domain package and its installed skills before implementing
20
+ against an unfamiliar domain contract.
21
+ - Treat the public SDK documentation as supplemental when its version differs
22
+ from the installed package:
23
+ `https://mainsequence-sdk.github.io/mainsequence-sdk/`
24
+ - When the client and platform disagree, record the exact failing operation
25
+ and evidence with the bug-auditor skill. Do not guess or upgrade automatically.
26
+
27
+ ## Select The Relevant Skill
28
+
29
+ Use skill descriptions to select the domain involved in the request. This skill
30
+ is not a mandatory first step for maintenance, audits, or already-scoped domain
31
+ work. A platform design skill is useful when product architecture, ontology, or
32
+ the CodeRepository Blueprint is unresolved; select it from the installed
33
+ platform catalog rather than assuming its filesystem path.
34
+ Use that catalog to select platform-owned CodeRepository-to-Agent setup and
35
+ other platform capabilities as well.
36
+
37
+ - Environment repair, authentication, explicitly requested updates, dependency
38
+ sync, and Git publishing:
39
+ `.agents/skills/mainsequence/maintenance/code_repository_maintenance/SKILL.md`
40
+ - Failure classification and SDK/platform contract mismatches:
41
+ `.agents/skills/mainsequence/maintenance/bug_auditor/SKILL.md`
42
+ - FastAPI APIs serving Command Center, including MCP tools and skills:
43
+ `.agents/skills/mainsequence/application_surfaces/api_surfaces/SKILL.md`
44
+ - Jobs, schedules, images, resources, releases, and Artifacts:
45
+ `.agents/skills/mainsequence/platform_operations/orchestration_and_releases/SKILL.md`
46
+ - RBAC, sharing, constants, secrets, and acting for a requester:
47
+ `.agents/skills/mainsequence/platform_operations/access_control_and_sharing/SKILL.md`
48
+ - Recorded model calls, structured extraction, provider options, history, and replay:
49
+ `.agents/skills/mainsequence/mainsequence-inference/SKILL.md`
50
+ - A2A session discovery, messages, files, and SDK response handling:
51
+ `.agents/skills/mainsequence/a2a_sdk_execution/SKILL.md`
52
+ - Retired SDK MetaTables imports or commands:
53
+ `.agents/skills/mainsequence/maintenance/metatables_transition/SKILL.md`
54
+ - Current MetaTable modeling, queries, table updates, and Alembic changes:
55
+ use the installed `metatables` package's skills and documentation.
56
+ - TAU Harness Agent implementation: use the version-matched skills under
57
+ `.agents/skills/ms_tau_sdk/` after the relevant platform skill establishes
58
+ its contract. If those skills are missing, report that; run
59
+ `uv run ms-tau skills sync --path .` only when the user requests that update.
60
+
61
+ ## Resolve CodeRepository Context From Git
62
+
63
+ The containing Git worktree is the only source of repository, attached branch,
64
+ and exact commit identity. The SDK normalizes the non-secret repository remote,
65
+ maps it to CodeRepository and CodeRepositoryBranch through the platform API,
66
+ resolves once for the process, and reuses the immutable result. Authentication
67
+ selects credentials and permissions; it does not select source identity.
68
+ A `git switch` in a long-running process takes effect in the next CLI invocation,
69
+ worker, script, or other process run.
70
+
71
+ For a live branch-owned operation, use
72
+ `mainsequence code-repository current --debug --json` to verify that Git context
73
+ resolves to `code_repository_branch_status=resolved` and a nonempty
74
+ `code_repository_branch_uid`. The UID is an internal resolution result, not a
75
+ local configuration input. Never ask the user to look it up, persist repository
76
+ identity in `.env`, accept a branch environment override, or infer a branch
77
+ from collection order. Local and deployed images use the same Git algorithm.
78
+
79
+ A detached checkout or an unregistered Git branch remains usable for ordinary
80
+ local development but has no resolved CodeRepositoryBranch or Environment.
81
+ Only operations requiring that context fail. Register the branch before
82
+ using branch-owned Jobs, images, releases, resources, pods, or other platform
83
+ APIs. Never fall back to another branch.
84
+
85
+ Keep these platform identities distinct:
86
+
87
+ - Git-resolved CodeRepository UID: aggregate identity and repository operations.
88
+ - CodeRepositoryBranch: resolved by the SDK when branch-owned APIs require it.
89
+ - GitHubRepositoryBinding: repository metadata and clone-location ownership;
90
+ `git_ssh_url` is not CodeRepositoryBranch state.
91
+
92
+ ## Use The Installed CLI
93
+
94
+ Use `mainsequence` as the default platform control surface for SDK-supported
95
+ operations. Prefer `--json` when parsing output or collecting evidence. Check
96
+ installed command help when documentation and local behavior differ.
97
+
98
+ Before live platform checks, inspect the saved session with
99
+ `mainsequence auth status --check` when needed. Authentication belongs to the
100
+ machine, not to a checkout. The SDK reads the saved operating-system credential
101
+ store session; credentials must not be copied into repository instructions.
102
+
103
+ Verify only the platform objects relevant to the requested outcome. Separate
104
+ verified facts from assumptions, and state any live checks that could not be
105
+ performed.
106
+
107
+ ## SDK Skills And Repository Files
108
+
109
+ The SDK owns `.agents/skills/mainsequence/`. Its copier installs SDK guidance
110
+ and domain skills together from the target repository's installed package,
111
+ removes retired files, and writes `PINNED_FROM.txt` with the installed version.
112
+ SDK skill copying needs no sign-in or platform catalog.
113
+
114
+ An explicit `update-sdk` also refreshes SDK skills after installing the package.
115
+ Other skill refreshes require the user's request; a stale or missing sentinel
116
+ is a condition to report, not permission to update. Use the maintenance skill
117
+ for the update workflow.
118
+
119
+ Platform skills belong to `.agents/skills/mainsequence_platform/` and use the
120
+ authenticated platform updater. Other libraries, including `metatables` and
121
+ `ms-tau-sdk`, own their independent namespaces and update commands.
122
+
123
+ Follow the repository's existing layout. The SDK does not require `src/`,
124
+ `scripts/`, `tests/`, `docs/`, or `api/` directories merely because it is
125
+ installed. When recurring Jobs or releases use backend-managed workflow
126
+ declarations, keep their YAML files as direct children of
127
+ `.mainsequence/workflows/` and validate the current backend workflow contract.
128
+
129
+ Repository-local execution paths passed to platform Jobs must be relative to
130
+ the repository root, use forward slashes on every operating system, and refer
131
+ to supported files inside the checkout.
@@ -1059,117 +1059,6 @@ def _resolve_installed_agent_scaffold_skill(skill_name: str) -> dict[str, pathli
1059
1059
  raise typer.Exit(1)
1060
1060
 
1061
1061
 
1062
- AGENTS_MD_MANAGED_BLOCK_START_PREFIX = "<!-- mainsequence-agent-scaffold:start"
1063
- AGENTS_MD_MANAGED_BLOCK_END = "<!-- mainsequence-agent-scaffold:end -->"
1064
- AGENTS_MD_MANAGED_BLOCK_SCHEMA = "1"
1065
- AGENTS_MD_MANAGED_BLOCK_START_LINE_RE = re.compile(
1066
- rf"(?m)^[ \t]*{re.escape(AGENTS_MD_MANAGED_BLOCK_START_PREFIX)}\b[^\n]*-->[ \t]*$"
1067
- )
1068
- AGENTS_MD_MANAGED_BLOCK_END_LINE_RE = re.compile(
1069
- rf"(?m)^[ \t]*{re.escape(AGENTS_MD_MANAGED_BLOCK_END)}[ \t]*$"
1070
- )
1071
-
1072
-
1073
- @dataclasses.dataclass(frozen=True)
1074
- class AgentsMdManagedBlockUpdate:
1075
- action: str
1076
- changed: bool
1077
-
1078
-
1079
- def _installed_agent_scaffold_agents_md_file() -> pathlib.Path:
1080
- source = _installed_agent_scaffold_bundle_dir() / "AGENTS.md"
1081
- if not source.is_file():
1082
- error(f"Installed agent_scaffold bundle is missing {source.name}: {source}")
1083
- raise typer.Exit(1)
1084
- return source
1085
-
1086
-
1087
- def _agents_md_managed_block_line_matches(
1088
- source_content: str,
1089
- ) -> tuple[list[re.Match[str]], list[re.Match[str]]]:
1090
- start_matches = list(AGENTS_MD_MANAGED_BLOCK_START_LINE_RE.finditer(source_content))
1091
- end_matches = list(AGENTS_MD_MANAGED_BLOCK_END_LINE_RE.finditer(source_content))
1092
- return start_matches, end_matches
1093
-
1094
-
1095
- def _extract_agents_md_managed_block(source_content: str) -> str:
1096
- start_matches, end_matches = _agents_md_managed_block_line_matches(source_content)
1097
- if len(start_matches) != 1 or len(end_matches) != 1:
1098
- raise ValueError(
1099
- "Installed agent_scaffold AGENTS.md must contain exactly one Main Sequence "
1100
- "managed block."
1101
- )
1102
-
1103
- start_match = start_matches[0]
1104
- end_match = end_matches[0]
1105
- if end_match.start() < start_match.start():
1106
- raise ValueError(
1107
- "Installed agent_scaffold AGENTS.md contains malformed Main Sequence managed "
1108
- "block markers."
1109
- )
1110
-
1111
- return source_content[start_match.start() : end_match.end()]
1112
-
1113
-
1114
- def _load_installed_agents_md_template() -> tuple[pathlib.Path, str, str]:
1115
- source = _installed_agent_scaffold_agents_md_file()
1116
- content = source.read_text(encoding="utf-8")
1117
- managed_block = _extract_agents_md_managed_block(content)
1118
- return source, content, managed_block
1119
-
1120
-
1121
- def _apply_agents_md_managed_block(
1122
- content: str,
1123
- bootstrap_content: str,
1124
- managed_block: str,
1125
- ) -> tuple[str, str]:
1126
- start_matches, end_matches = _agents_md_managed_block_line_matches(content)
1127
-
1128
- if len(start_matches) > 1 or len(end_matches) > 1:
1129
- raise ValueError(
1130
- "AGENTS.md contains multiple Main Sequence managed block markers; resolve it manually."
1131
- )
1132
- if len(start_matches) != len(end_matches):
1133
- raise ValueError(
1134
- "AGENTS.md contains malformed Main Sequence managed block markers; resolve it manually."
1135
- )
1136
-
1137
- if not start_matches:
1138
- return bootstrap_content, "replaced"
1139
-
1140
- start_match = start_matches[0]
1141
- end_match = end_matches[0]
1142
- if end_match.start() < start_match.start():
1143
- raise ValueError(
1144
- "AGENTS.md contains malformed Main Sequence managed block markers; resolve it manually."
1145
- )
1146
-
1147
- updated = (
1148
- f"{content[: start_match.start()]}{managed_block.rstrip()}{content[end_match.end() :]}"
1149
- )
1150
- action = "unchanged" if updated == content else "updated"
1151
- return updated, action
1152
-
1153
-
1154
- def _update_agents_md_managed_block_file(
1155
- destination: pathlib.Path,
1156
- bootstrap_content: str,
1157
- managed_block: str,
1158
- ) -> AgentsMdManagedBlockUpdate:
1159
- destination.parent.mkdir(parents=True, exist_ok=True)
1160
-
1161
- if not destination.exists():
1162
- destination.write_text(bootstrap_content, encoding="utf-8")
1163
- return AgentsMdManagedBlockUpdate(action="created", changed=True)
1164
-
1165
- original = destination.read_text(encoding="utf-8")
1166
- updated, action = _apply_agents_md_managed_block(original, bootstrap_content, managed_block)
1167
- changed = updated != original
1168
- if changed:
1169
- destination.write_text(updated, encoding="utf-8")
1170
- return AgentsMdManagedBlockUpdate(action=action, changed=changed)
1171
-
1172
-
1173
1062
  def _parse_env_var_entries(entries: list[str]) -> dict[str, str]:
1174
1063
  """
1175
1064
  Parse env var entries from repeated KEY=VALUE args and/or comma-separated chunks.
@@ -7698,84 +7587,6 @@ def code_repository_update_sdk(
7698
7587
  success("SDK update and SDK skill refresh complete.")
7699
7588
 
7700
7589
 
7701
- @code_repository.command("update")
7702
- def code_repository_update_scaffold_target(
7703
- target: str = typer.Argument(
7704
- ..., help="Scaffold target to update. Currently supported: AGENTS.md"
7705
- ),
7706
- code_repository_id: str | None = typer.Option(
7707
- None,
7708
- "--code-repository-uid",
7709
- help="Optional CodeRepository UID assertion against the current Git worktree",
7710
- ),
7711
- path: str | None = typer.Option(None, "--path", help="CodeRepository directory"),
7712
- ):
7713
- """
7714
- Update a scaffold-managed file in the local CodeRepository root.
7715
-
7716
- Currently this command supports only `AGENTS.md`.
7717
- If the Main Sequence managed marker is present, only that block is updated.
7718
- If the marker is absent, the whole file is replaced from the installed
7719
- scaffold template.
7720
-
7721
- Examples
7722
- --------
7723
- ```bash
7724
- mainsequence code-repository update AGENTS.md
7725
- mainsequence code-repository update AGENTS.md --path .
7726
- mainsequence code-repository update AGENTS.md --code-repository-uid code-repository-uid-123
7727
- ```
7728
- """
7729
- if target != "AGENTS.md":
7730
- error(f"Unsupported scaffold update target: {target}. Supported target: AGENTS.md")
7731
- raise typer.Exit(1)
7732
-
7733
- code_repository_dir = _resolve_code_repository_dir(code_repository_id, path)
7734
- destination = code_repository_dir / "AGENTS.md"
7735
-
7736
- try:
7737
- source, bootstrap_content, managed_block = _load_installed_agents_md_template()
7738
- update_result = _update_agents_md_managed_block_file(
7739
- destination,
7740
- bootstrap_content,
7741
- managed_block,
7742
- )
7743
- except ValueError as exc:
7744
- error(str(exc))
7745
- raise typer.Exit(1) from exc
7746
-
7747
- payload = {
7748
- "target": target,
7749
- "code_repository": code_repository_dir,
7750
- "source": source,
7751
- "destination": destination,
7752
- "action": update_result.action,
7753
- "changed": update_result.changed,
7754
- "overwritten": False,
7755
- "managed_block": {
7756
- "start": AGENTS_MD_MANAGED_BLOCK_START_PREFIX,
7757
- "end": AGENTS_MD_MANAGED_BLOCK_END,
7758
- },
7759
- }
7760
- if _emit_json(payload):
7761
- return
7762
-
7763
- if update_result.action == "unchanged":
7764
- success(f"{target} Main Sequence managed block already current.")
7765
- else:
7766
- success(f"Updated scaffold-managed {target}.")
7767
- print_kv(
7768
- "Scaffold Update",
7769
- [
7770
- ("Target", target),
7771
- ("Action", update_result.action),
7772
- ("CodeRepository", str(code_repository_dir)),
7773
- ("Source", str(source)),
7774
- ("Destination", str(destination)),
7775
- ],
7776
- )
7777
-
7778
-
7779
7590
  @code_repository.command("update-agent-skills")
7780
7591
  def code_repository_update_agent_skills(
7781
7592
  code_repository_id: str | None = typer.Option(
@@ -7791,8 +7602,8 @@ def code_repository_update_agent_skills(
7791
7602
  No sign-in or backend access is required unless a CodeRepository UID
7792
7603
  assertion is supplied. The SDK owns all of .agents/skills/mainsequence:
7793
7604
  files and folders absent from the installed bundle are deleted. Other
7794
- namespaces are untouched. AGENTS.md is refreshed separately with
7795
- code-repository update AGENTS.md. Platform skills use update-platform-skills.
7605
+ namespaces and repository-owned AGENTS.md are untouched. SDK instructions
7606
+ ship inside the skills. Platform skills use update-platform-skills.
7796
7607
 
7797
7608
  Examples
7798
7609
  --------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence
3
- Version: 9.0.23
3
+ Version: 9.0.24
4
4
  Summary: Main Sequence SDK
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -82,7 +82,8 @@ Main package areas:
82
82
 
83
83
  Repository areas:
84
84
 
85
- - `agent_scaffold/`: version-matched SDK skills and managed `AGENTS.md` content
85
+ - `agent_scaffold/skills/`: version-matched SDK guidance and domain skills;
86
+ repository-owned `AGENTS.md` files are never scaffolded or updated
86
87
  - `docs/`: knowledge guides, CLI docs, architecture decisions, and generated
87
88
  reference docs
88
89
  - `tests/`: offline tests plus explicitly marked live-backend tests
@@ -1,7 +1,6 @@
1
1
  LICENSE
2
2
  README.md
3
3
  pyproject.toml
4
- agent_scaffold/AGENTS.md
5
4
  agent_scaffold/skills/a2a_sdk_execution/SKILL.md
6
5
  agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md
7
6
  agent_scaffold/skills/mainsequence-inference/SKILL.md
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence"
7
- version = "9.0.23"
7
+ version = "9.0.24"
8
8
  description = "Main Sequence SDK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -88,7 +88,7 @@ include = ["mainsequence", "mainsequence.*", "agent_scaffold", "agent_scaffold.*
88
88
 
89
89
  [tool.setuptools.package-data]
90
90
  "mainsequence" = ["**/*.html", "**/*.css", "**/*.png", "**/*.toml", "**/*.json", "**/*.mako"]
91
- "agent_scaffold" = ["*.md", "**/*.md"]
91
+ "agent_scaffold" = ["skills/**/*.md"]
92
92
 
93
93
  [[tool.uv.index]]
94
94
  name = "testpypi"
@@ -21,13 +21,9 @@ SKILL_CROSS_REFERENCE = re.compile(r"`\.agents/skills/[A-Za-z0-9_]+/([A-Za-z0-9_
21
21
 
22
22
 
23
23
  def _shipped_scaffold_documents() -> tuple[Path, ...]:
24
- """Every Markdown file the wheel ships under `agent_scaffold`.
24
+ """SDK skill instructions and references shipped by the wheel."""
25
25
 
26
- `AGENTS.md` ships beside the skills and several skills make it their first
27
- mandatory read, so it carries the same reference obligations they do.
28
- """
29
-
30
- return tuple(sorted((REPOSITORY_ROOT / "agent_scaffold").rglob("*.md")))
26
+ return tuple(sorted(SKILL_ROOT.rglob("*.md")))
31
27
 
32
28
 
33
29
  def _documentation_page_for_url_path(url_path: str) -> Path | None:
@@ -85,8 +81,7 @@ def test_skill_documentation_urls_render_an_existing_page(path: Path) -> None:
85
81
  )
86
82
 
87
83
  assert not unrendered, (
88
- f"{relative_path} links documentation-site paths that no `docs/` page "
89
- f"renders: {unrendered}"
84
+ f"{relative_path} links documentation-site paths that no `docs/` page renders: {unrendered}"
90
85
  )
91
86
 
92
87
 
@@ -604,7 +604,6 @@ def test_code_repository_maintenance_is_sdk_owned_and_uses_canonical_cli_workflo
604
604
  assert "\nmainsequence code-repository sync --path .\n" in content
605
605
  assert "code-repository sync --path . -m" not in content
606
606
  assert "mainsequence code-repository update-agent-skills --path ." in content
607
- assert "mainsequence code-repository update AGENTS.md --path ." in content
608
607
  assert "only when the user explicitly requests it" in content
609
608
  assert "mainsequence://" not in content
610
609
 
@@ -259,4 +259,4 @@ def test_packaged_scaffold_keeps_retained_sdk_skills():
259
259
  "platform_operations/orchestration_and_releases/SKILL.md",
260
260
  "sdk_code_repository_execution/SKILL.md",
261
261
  }
262
- assert (SCAFFOLD_ROOT / "AGENTS.md").is_file()
262
+ assert not (SCAFFOLD_ROOT / "AGENTS.md").exists()