muse-code-sdk 1.4.12__tar.gz → 1.4.13__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 (71) hide show
  1. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/PKG-INFO +43 -2
  2. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/README.md +41 -0
  3. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/pyproject.toml +2 -2
  4. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/__init__.py +2 -2
  5. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code_sdk.egg-info/PKG-INFO +43 -2
  6. muse_code_sdk-1.4.13/src/muse_code_sdk.egg-info/requires.txt +2 -0
  7. muse_code_sdk-1.4.12/src/muse_code_sdk.egg-info/requires.txt +0 -2
  8. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/LICENSE +0 -0
  9. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/setup.cfg +0 -0
  10. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/connection/__init__.py +0 -0
  11. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/connection/connection.py +0 -0
  12. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/connection/discovery.py +0 -0
  13. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/connection/spawn.py +0 -0
  14. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/connection/validation.py +0 -0
  15. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/errors.py +0 -0
  16. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/__init__.py +0 -0
  17. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/approval.py +0 -0
  18. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/client.py +0 -0
  19. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/discarded.py +0 -0
  20. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/gap_fill.py +0 -0
  21. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/host_death.py +0 -0
  22. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/host_start.py +0 -0
  23. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/session.py +0 -0
  24. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/turn_handle.py +0 -0
  25. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/facade/turn_submit.py +0 -0
  26. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/fold/__init__.py +0 -0
  27. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/fold/item_store.py +0 -0
  28. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/fold/session_fold.py +0 -0
  29. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/fold/state_store.py +0 -0
  30. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/pending/__init__.py +0 -0
  31. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/pending/pending_command_set.py +0 -0
  32. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/py.typed +0 -0
  33. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/replay.py +0 -0
  34. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code/sync_facade.py +0 -0
  35. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code_sdk.egg-info/SOURCES.txt +0 -0
  36. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code_sdk.egg-info/dependency_links.txt +0 -0
  37. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/src/muse_code_sdk.egg-info/top_level.txt +0 -0
  38. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_asyncio_cancellation.py +0 -0
  39. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_compatibility_row.py +0 -0
  40. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_connection.py +0 -0
  41. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_connection_error_arms.py +0 -0
  42. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_docs_generation.py +0 -0
  43. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_external_audience.py +0 -0
  44. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_approval.py +0 -0
  45. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_approval_resend.py +0 -0
  46. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_gap_fill.py +0 -0
  47. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_open_same_chunk.py +0 -0
  48. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_persistent_approval.py +0 -0
  49. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_required_selection.py +0 -0
  50. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_turn.py +0 -0
  51. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_facade_user_input_resend.py +0 -0
  52. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_host_discovery.py +0 -0
  53. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_item_store.py +0 -0
  54. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_manifests.py +0 -0
  55. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_muse_serve_child.py +0 -0
  56. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_pending_command_corpus.py +0 -0
  57. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_pending_command_set.py +0 -0
  58. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_pending_command_wire_binding.py +0 -0
  59. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_permission_state_wire_types.py +0 -0
  60. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_public_mirror_text.py +0 -0
  61. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_publish_shape.py +0 -0
  62. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_recovery_observation.py +0 -0
  63. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_session_fold.py +0 -0
  64. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_source_closure.py +0 -0
  65. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_spawn_handshake.py +0 -0
  66. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_spawn_host_lost.py +0 -0
  67. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_state_store.py +0 -0
  68. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_sync_facade.py +0 -0
  69. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_tolerance_corpus.py +0 -0
  70. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_transcript_replay.py +0 -0
  71. {muse_code_sdk-1.4.12 → muse_code_sdk-1.4.13}/tests/test_typing_gates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: muse-code-sdk
3
- Version: 1.4.12
3
+ Version: 1.4.13
4
4
  Summary: Muse Code SDK for MSP: asyncio-first facade over the generated wire types (muse-code-msp), with a thin sync wrapper.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/meta-models/muse-code-sdk
@@ -15,7 +15,7 @@ Requires-Python: >=3.10
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
17
  Requires-Dist: pydantic==2.13.5
18
- Requires-Dist: muse-code-msp==1.4.12
18
+ Requires-Dist: muse-code-msp==1.4.13
19
19
  Dynamic: license-file
20
20
 
21
21
  # `muse-code-sdk`
@@ -84,6 +84,47 @@ async def main() -> None:
84
84
  asyncio.run(main())
85
85
  ```
86
86
 
87
+ To run a session and the child agents it starts without approval prompts,
88
+ start it under the built-in `:unrestricted` permission profile. Current
89
+ releases admit every child of such a session without prompts; a child admitted
90
+ with a narrower authority would stay gated at it.
91
+
92
+ That profile is described, verbatim, as "No filesystem sandbox or approval
93
+ prompts; local commands have direct network access; project trust is
94
+ unchanged." It also sets the approval reviewer to none. Use it only for a
95
+ trusted workspace and trusted prompts. Never use it where the prompts or the
96
+ sandbox are what protects you.
97
+
98
+ Start it with that profile, and pass the same profile when you resume it.
99
+ Paste inside `main()` above, indented, before `await client.close()`, with the same client:
100
+
101
+ ```python
102
+ from muse_code import ResumeSessionOptions, StartSessionOptions
103
+
104
+ session = await client.start_session(StartSessionOptions(
105
+ workspace_root="/path/to/repo", # an absolute path
106
+ permission_profile=":unrestricted",
107
+ ))
108
+ saved_session_id = session.session_id
109
+ # ... later, in the same client:
110
+ session = await client.resume_session(ResumeSessionOptions(
111
+ session_id=saved_session_id,
112
+ permission_profile=":unrestricted",
113
+ ))
114
+ ```
115
+
116
+ On start, `require_permission_profile=True` makes the client prove that the
117
+ pick was applied, and raise `PermissionProfileNotApplied` if it cannot (a
118
+ failed `session/read` read-back raises its own error). A host
119
+ that does not report the committed selection fails that proof even when the
120
+ pick was applied (seen with Muse Code 1.4.12). Resume has no
121
+ `require_permission_profile`, so the client never verifies the pick there.
122
+
123
+ `approval_mode` alone is not enough: it changes the session's own approval
124
+ mode, but its child agents are capped by the session's permission profile.
125
+ Under a prompting profile (such as `:ask-me`, whose approval is `on_request`),
126
+ the children still ask.
127
+
87
128
  ## Documentation
88
129
 
89
130
  - Guides, cookbook recipes, and the protocol reference:
@@ -64,6 +64,47 @@ async def main() -> None:
64
64
  asyncio.run(main())
65
65
  ```
66
66
 
67
+ To run a session and the child agents it starts without approval prompts,
68
+ start it under the built-in `:unrestricted` permission profile. Current
69
+ releases admit every child of such a session without prompts; a child admitted
70
+ with a narrower authority would stay gated at it.
71
+
72
+ That profile is described, verbatim, as "No filesystem sandbox or approval
73
+ prompts; local commands have direct network access; project trust is
74
+ unchanged." It also sets the approval reviewer to none. Use it only for a
75
+ trusted workspace and trusted prompts. Never use it where the prompts or the
76
+ sandbox are what protects you.
77
+
78
+ Start it with that profile, and pass the same profile when you resume it.
79
+ Paste inside `main()` above, indented, before `await client.close()`, with the same client:
80
+
81
+ ```python
82
+ from muse_code import ResumeSessionOptions, StartSessionOptions
83
+
84
+ session = await client.start_session(StartSessionOptions(
85
+ workspace_root="/path/to/repo", # an absolute path
86
+ permission_profile=":unrestricted",
87
+ ))
88
+ saved_session_id = session.session_id
89
+ # ... later, in the same client:
90
+ session = await client.resume_session(ResumeSessionOptions(
91
+ session_id=saved_session_id,
92
+ permission_profile=":unrestricted",
93
+ ))
94
+ ```
95
+
96
+ On start, `require_permission_profile=True` makes the client prove that the
97
+ pick was applied, and raise `PermissionProfileNotApplied` if it cannot (a
98
+ failed `session/read` read-back raises its own error). A host
99
+ that does not report the committed selection fails that proof even when the
100
+ pick was applied (seen with Muse Code 1.4.12). Resume has no
101
+ `require_permission_profile`, so the client never verifies the pick there.
102
+
103
+ `approval_mode` alone is not enough: it changes the session's own approval
104
+ mode, but its child agents are capped by the session's permission profile.
105
+ Under a prompting profile (such as `:ask-me`, whose approval is `on_request`),
106
+ the children still ask.
107
+
67
108
  ## Documentation
68
109
 
69
110
  - Guides, cookbook recipes, and the protocol reference:
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "muse-code-sdk"
8
- version = "1.4.12"
8
+ version = "1.4.13"
9
9
  description = "Muse Code SDK for MSP: asyncio-first facade over the generated wire types (muse-code-msp), with a thin sync wrapper."
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
@@ -18,7 +18,7 @@ license-files = ["LICENSE"]
18
18
  # `pip install muse-code-sdk` must import, and the release bump moves this
19
19
  # package's version and its muse-code-msp pin together; pydantic bumps stay
20
20
  # reviewed PRs (test_publish_shape pins the pairing).
21
- dependencies = ["pydantic==2.13.5", "muse-code-msp==1.4.12"]
21
+ dependencies = ["pydantic==2.13.5", "muse-code-msp==1.4.13"]
22
22
  classifiers = [
23
23
  # Alpha states the withheld promise: publication is permitted, but the
24
24
  # stability promise and conformance claim stay withheld — experimental
@@ -80,7 +80,7 @@ __all__ = [
80
80
  ]
81
81
 
82
82
  EXPECTED_SCHEMA_FINGERPRINT: Final[str] = (
83
- "sha256:cfdb6d2525601b9bac76584ccb0610ab3a5539b5e4f51141f079b99b39fcb4e0"
83
+ "sha256:7fddaf646dbc317e5fcac0785e135eb04df14fbb0db1863089dfd6da21730e5b"
84
84
  )
85
85
  """The stable schema-bundle fingerprint this SDK was built against.
86
86
 
@@ -92,7 +92,7 @@ Python SDK reds this lane instead of drifting silently.
92
92
  # The lockstep rule: the release train bumps pyproject.toml, the
93
93
  # distribution-metadata authority; this constant is aligned at publication
94
94
  # time.
95
- __version__: Final[str] = "1.4.12"
95
+ __version__: Final[str] = "1.4.13"
96
96
 
97
97
  # The facade is imported last so the constants above are already bound: the
98
98
  # spawn path reads ``EXPECTED_SCHEMA_FINGERPRINT`` (lazily, at initialize
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: muse-code-sdk
3
- Version: 1.4.12
3
+ Version: 1.4.13
4
4
  Summary: Muse Code SDK for MSP: asyncio-first facade over the generated wire types (muse-code-msp), with a thin sync wrapper.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/meta-models/muse-code-sdk
@@ -15,7 +15,7 @@ Requires-Python: >=3.10
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
17
  Requires-Dist: pydantic==2.13.5
18
- Requires-Dist: muse-code-msp==1.4.12
18
+ Requires-Dist: muse-code-msp==1.4.13
19
19
  Dynamic: license-file
20
20
 
21
21
  # `muse-code-sdk`
@@ -84,6 +84,47 @@ async def main() -> None:
84
84
  asyncio.run(main())
85
85
  ```
86
86
 
87
+ To run a session and the child agents it starts without approval prompts,
88
+ start it under the built-in `:unrestricted` permission profile. Current
89
+ releases admit every child of such a session without prompts; a child admitted
90
+ with a narrower authority would stay gated at it.
91
+
92
+ That profile is described, verbatim, as "No filesystem sandbox or approval
93
+ prompts; local commands have direct network access; project trust is
94
+ unchanged." It also sets the approval reviewer to none. Use it only for a
95
+ trusted workspace and trusted prompts. Never use it where the prompts or the
96
+ sandbox are what protects you.
97
+
98
+ Start it with that profile, and pass the same profile when you resume it.
99
+ Paste inside `main()` above, indented, before `await client.close()`, with the same client:
100
+
101
+ ```python
102
+ from muse_code import ResumeSessionOptions, StartSessionOptions
103
+
104
+ session = await client.start_session(StartSessionOptions(
105
+ workspace_root="/path/to/repo", # an absolute path
106
+ permission_profile=":unrestricted",
107
+ ))
108
+ saved_session_id = session.session_id
109
+ # ... later, in the same client:
110
+ session = await client.resume_session(ResumeSessionOptions(
111
+ session_id=saved_session_id,
112
+ permission_profile=":unrestricted",
113
+ ))
114
+ ```
115
+
116
+ On start, `require_permission_profile=True` makes the client prove that the
117
+ pick was applied, and raise `PermissionProfileNotApplied` if it cannot (a
118
+ failed `session/read` read-back raises its own error). A host
119
+ that does not report the committed selection fails that proof even when the
120
+ pick was applied (seen with Muse Code 1.4.12). Resume has no
121
+ `require_permission_profile`, so the client never verifies the pick there.
122
+
123
+ `approval_mode` alone is not enough: it changes the session's own approval
124
+ mode, but its child agents are capped by the session's permission profile.
125
+ Under a prompting profile (such as `:ask-me`, whose approval is `on_request`),
126
+ the children still ask.
127
+
87
128
  ## Documentation
88
129
 
89
130
  - Guides, cookbook recipes, and the protocol reference:
@@ -0,0 +1,2 @@
1
+ pydantic==2.13.5
2
+ muse-code-msp==1.4.13
@@ -1,2 +0,0 @@
1
- pydantic==2.13.5
2
- muse-code-msp==1.4.12
File without changes
File without changes