trinity-lite 0.5.2__tar.gz → 0.5.3__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.
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/PKG-INFO +5 -2
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/README.md +4 -1
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/pyproject.toml +1 -1
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_mcp_server.py +10 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/__init__.py +1 -1
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/mcp_server.py +148 -57
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite.egg-info/PKG-INFO +5 -2
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/LICENSE +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/setup.cfg +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_bus.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_cli.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_doctor.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_guard.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_orchestrator.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_pipeline.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_router.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/tests/test_worker.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/__main__.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/adapters.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/bus.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/cli.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/config.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/doctor.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/guard.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/model_autodetect.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/model_pool_wizard.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/model_selector.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/orchestrator.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/paths.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/pipeline.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/py.typed +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/router.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/validation.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite/worker.py +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite.egg-info/SOURCES.txt +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite.egg-info/dependency_links.txt +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite.egg-info/entry_points.txt +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite.egg-info/requires.txt +0 -0
- {trinity_lite-0.5.2 → trinity_lite-0.5.3}/trinity_lite.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: trinity-lite
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
4
4
|
Summary: The bus that lets your AI agents talk to each other.
|
|
5
5
|
Author: Yomiracle
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,10 +31,11 @@ Dynamic: license-file
|
|
|
31
31
|
[](pyproject.toml)
|
|
32
32
|
[](LICENSE)
|
|
33
33
|
[](https://pypi.org/project/trinity-lite/)
|
|
34
|
+
[](https://glama.ai/mcp/servers/Yomiracle/trinity-lite/score)
|
|
34
35
|
|
|
35
36
|
**Local-first multi-agent orchestration for CLI AI agents.**
|
|
36
37
|
|
|
37
|
-
[中文 README](README_zh.md)
|
|
38
|
+
[中文 README](README_zh.md) · [Docs](docs/index.md) · [Why Trinity Lite?](docs/WHY_TRINITY_LITE.md) · [Recipes](docs/recipes/generic-cli.md)
|
|
38
39
|
|
|
39
40
|
## The problem
|
|
40
41
|
|
|
@@ -217,6 +218,8 @@ Works with 1 model, 2 models, or 10 models. No agent names hardcoded.
|
|
|
217
218
|
|
|
218
219
|
- [PyPI](https://pypi.org/project/trinity-lite/)
|
|
219
220
|
- [Documentation](docs/)
|
|
221
|
+
- [Why Trinity Lite?](docs/WHY_TRINITY_LITE.md)
|
|
222
|
+
- [Recipes](docs/recipes/generic-cli.md)
|
|
220
223
|
- [Changelog](CHANGELOG.md)
|
|
221
224
|
- [Contributing](CONTRIBUTING.md)
|
|
222
225
|
- [Architecture](docs/ARCHITECTURE.md)
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
[](pyproject.toml)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://pypi.org/project/trinity-lite/)
|
|
7
|
+
[](https://glama.ai/mcp/servers/Yomiracle/trinity-lite/score)
|
|
7
8
|
|
|
8
9
|
**Local-first multi-agent orchestration for CLI AI agents.**
|
|
9
10
|
|
|
10
|
-
[中文 README](README_zh.md)
|
|
11
|
+
[中文 README](README_zh.md) · [Docs](docs/index.md) · [Why Trinity Lite?](docs/WHY_TRINITY_LITE.md) · [Recipes](docs/recipes/generic-cli.md)
|
|
11
12
|
|
|
12
13
|
## The problem
|
|
13
14
|
|
|
@@ -190,6 +191,8 @@ Works with 1 model, 2 models, or 10 models. No agent names hardcoded.
|
|
|
190
191
|
|
|
191
192
|
- [PyPI](https://pypi.org/project/trinity-lite/)
|
|
192
193
|
- [Documentation](docs/)
|
|
194
|
+
- [Why Trinity Lite?](docs/WHY_TRINITY_LITE.md)
|
|
195
|
+
- [Recipes](docs/recipes/generic-cli.md)
|
|
193
196
|
- [Changelog](CHANGELOG.md)
|
|
194
197
|
- [Contributing](CONTRIBUTING.md)
|
|
195
198
|
- [Architecture](docs/ARCHITECTURE.md)
|
|
@@ -107,10 +107,20 @@ class McpServerTest(unittest.TestCase):
|
|
|
107
107
|
for t in tools:
|
|
108
108
|
self.assertIn("name", t)
|
|
109
109
|
self.assertIn("description", t)
|
|
110
|
+
self.assertGreaterEqual(len(t["description"].split()), 20)
|
|
111
|
+
self.assertIn("annotations", t)
|
|
112
|
+
self.assertIn("readOnlyHint", t["annotations"])
|
|
113
|
+
self.assertIn("destructiveHint", t["annotations"])
|
|
114
|
+
self.assertIn("idempotentHint", t["annotations"])
|
|
115
|
+
self.assertIn("openWorldHint", t["annotations"])
|
|
110
116
|
self.assertIn("inputSchema", t)
|
|
111
117
|
self.assertEqual(t["inputSchema"]["type"], "object")
|
|
112
118
|
self.assertIn("properties", t["inputSchema"])
|
|
113
119
|
self.assertIn("required", t["inputSchema"])
|
|
120
|
+
by_name = {t["name"]: t for t in tools}
|
|
121
|
+
self.assertTrue(by_name["trinity_status"]["annotations"]["readOnlyHint"])
|
|
122
|
+
self.assertFalse(by_name["trinity_dispatch"]["annotations"]["readOnlyHint"])
|
|
123
|
+
self.assertTrue(by_name["trinity_dispatch"]["annotations"]["openWorldHint"])
|
|
114
124
|
|
|
115
125
|
# ---- resources/list ----
|
|
116
126
|
|
|
@@ -76,8 +76,8 @@ SERVER_VERSION = __version__
|
|
|
76
76
|
# ---------------------------------------------------------------------------
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
def _tool_def(name, description, properties, required):
|
|
80
|
-
|
|
79
|
+
def _tool_def(name, description, properties, required, annotations=None):
|
|
80
|
+
tool = {
|
|
81
81
|
"name": name,
|
|
82
82
|
"description": description,
|
|
83
83
|
"inputSchema": {
|
|
@@ -86,139 +86,230 @@ def _tool_def(name, description, properties, required):
|
|
|
86
86
|
"required": required,
|
|
87
87
|
},
|
|
88
88
|
}
|
|
89
|
+
if annotations:
|
|
90
|
+
tool["annotations"] = annotations
|
|
91
|
+
return tool
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
READ_ONLY_TOOL = {
|
|
95
|
+
"readOnlyHint": True,
|
|
96
|
+
"destructiveHint": False,
|
|
97
|
+
"idempotentHint": True,
|
|
98
|
+
"openWorldHint": False,
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
STATEFUL_LOCAL_TOOL = {
|
|
103
|
+
"readOnlyHint": False,
|
|
104
|
+
"destructiveHint": False,
|
|
105
|
+
"idempotentHint": False,
|
|
106
|
+
"openWorldHint": False,
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
AGENT_EXECUTION_TOOL = {
|
|
111
|
+
"readOnlyHint": False,
|
|
112
|
+
"destructiveHint": False,
|
|
113
|
+
"idempotentHint": False,
|
|
114
|
+
"openWorldHint": True,
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _desc(*parts):
|
|
119
|
+
return " ".join(part.strip() for part in parts)
|
|
89
120
|
|
|
90
121
|
|
|
91
122
|
TOOL_DEFINITIONS = [
|
|
92
123
|
_tool_def(
|
|
93
124
|
"trinity_dispatch",
|
|
94
|
-
|
|
125
|
+
_desc(
|
|
126
|
+
"Create a durable task for one explicit Trinity agent and run one worker cycle for that agent.",
|
|
127
|
+
"Use this when the caller already knows the target agent; use trinity_dispatch_auto when routing should choose the agent.",
|
|
128
|
+
"This writes to the local task database and may execute the configured agent command; with wait=true it returns the final compact task or a timeout error.",
|
|
129
|
+
),
|
|
95
130
|
{
|
|
96
|
-
"target_agent": {"type": "string", "description": "
|
|
97
|
-
"task": {"type": "string", "description": "Task prompt"},
|
|
98
|
-
"source_agent": {"type": "string", "description": "Originating agent id
|
|
99
|
-
"cwd": {"type": "string", "description": "Working directory
|
|
100
|
-
"task_type": {"type": "string", "description": "
|
|
101
|
-
"wait": {"type": "boolean", "description": "
|
|
102
|
-
"wait_timeout": {"type": "number", "description": "
|
|
131
|
+
"target_agent": {"type": "string", "description": "Exact recipient agent id, such as codex, claude_code, or hermes."},
|
|
132
|
+
"task": {"type": "string", "description": "Task prompt to persist and deliver to the target agent."},
|
|
133
|
+
"source_agent": {"type": "string", "description": "Originating agent id recorded on the task; defaults to mcp."},
|
|
134
|
+
"cwd": {"type": "string", "description": "Working directory passed to the task; defaults to the user's home directory."},
|
|
135
|
+
"task_type": {"type": "string", "description": "Optional task type metadata for routing and audit records."},
|
|
136
|
+
"wait": {"type": "boolean", "description": "If true, block until the task reaches a terminal state or wait_timeout expires."},
|
|
137
|
+
"wait_timeout": {"type": "number", "description": "Maximum seconds to wait when wait=true; defaults to the server wait timeout."},
|
|
103
138
|
},
|
|
104
139
|
["target_agent", "task"],
|
|
140
|
+
AGENT_EXECUTION_TOOL,
|
|
105
141
|
),
|
|
106
142
|
_tool_def(
|
|
107
143
|
"trinity_dispatch_auto",
|
|
108
|
-
|
|
144
|
+
_desc(
|
|
145
|
+
"Resolve the best Trinity agent with the local route table, create a durable task, and run one worker cycle.",
|
|
146
|
+
"Use this when the caller has a task but should not pick the agent manually; use trinity_dispatch for an explicit target.",
|
|
147
|
+
"This writes route evidence and task state to the local database and may execute the selected agent command; the result includes compact task and route metadata.",
|
|
148
|
+
),
|
|
109
149
|
{
|
|
110
|
-
"task": {"type": "string", "description": "Task prompt"},
|
|
111
|
-
"source_agent": {"type": "string", "description": "Originating agent id
|
|
112
|
-
"cwd": {"type": "string", "description": "Working directory
|
|
113
|
-
"task_type": {"type": "string", "description": "
|
|
114
|
-
"previous_agent": {"type": "string", "description": "
|
|
115
|
-
"wait": {"type": "boolean", "description": "
|
|
116
|
-
"wait_timeout": {"type": "number", "description": "
|
|
150
|
+
"task": {"type": "string", "description": "Task prompt used for route selection and delivery."},
|
|
151
|
+
"source_agent": {"type": "string", "description": "Originating agent id recorded on the task; defaults to mcp."},
|
|
152
|
+
"cwd": {"type": "string", "description": "Working directory passed to the selected agent; defaults to the user's home directory."},
|
|
153
|
+
"task_type": {"type": "string", "description": "Optional task type hint that can override or narrow route matching."},
|
|
154
|
+
"previous_agent": {"type": "string", "description": "Agent id to avoid when resolving opposite-review or retry routes."},
|
|
155
|
+
"wait": {"type": "boolean", "description": "If true, block until the routed task reaches a terminal state or wait_timeout expires."},
|
|
156
|
+
"wait_timeout": {"type": "number", "description": "Maximum seconds to wait when wait=true; defaults to the server wait timeout."},
|
|
117
157
|
},
|
|
118
158
|
["task"],
|
|
159
|
+
AGENT_EXECUTION_TOOL,
|
|
119
160
|
),
|
|
120
161
|
_tool_def(
|
|
121
162
|
"trinity_orchestrate",
|
|
122
|
-
|
|
163
|
+
_desc(
|
|
164
|
+
"Run a multi-step Trinity workflow from a pipeline file or the built-in implement-then-review flow.",
|
|
165
|
+
"Use this for work that needs sequencing, review gates, or multiple task records; use dispatch tools for a single agent task.",
|
|
166
|
+
"This creates and updates local task records and may execute one or more configured agent commands; it returns pipeline or review-flow evidence.",
|
|
167
|
+
),
|
|
123
168
|
{
|
|
124
|
-
"task": {"type": "string", "description": "
|
|
125
|
-
"source_agent": {"type": "string", "description": "Originating agent id
|
|
126
|
-
"cwd": {"type": "string", "description": "Working directory
|
|
127
|
-
"task_type": {"type": "string", "description": "
|
|
128
|
-
"previous_agent": {"type": "string", "description": "
|
|
129
|
-
"pipeline": {"type": "string", "description": "Path to
|
|
130
|
-
"wait": {"type": "boolean", "description": "
|
|
131
|
-
"wait_timeout": {"type": "number", "description": "
|
|
169
|
+
"task": {"type": "string", "description": "Top-level task prompt for the pipeline or review flow."},
|
|
170
|
+
"source_agent": {"type": "string", "description": "Originating agent id recorded on created tasks; defaults to mcp."},
|
|
171
|
+
"cwd": {"type": "string", "description": "Working directory used by pipeline steps or review flow; defaults to home."},
|
|
172
|
+
"task_type": {"type": "string", "description": "Optional task type hint for the default review flow route."},
|
|
173
|
+
"previous_agent": {"type": "string", "description": "Agent id to avoid when resolving reviewer or retry routes."},
|
|
174
|
+
"pipeline": {"type": "string", "description": "Path to a YAML pipeline file; omit to run the default review flow."},
|
|
175
|
+
"wait": {"type": "boolean", "description": "Reserved for wait-aware clients; pipeline workers run in-process."},
|
|
176
|
+
"wait_timeout": {"type": "number", "description": "Reserved wait timeout in seconds for wait-aware orchestration clients."},
|
|
132
177
|
},
|
|
133
178
|
["task"],
|
|
179
|
+
AGENT_EXECUTION_TOOL,
|
|
134
180
|
),
|
|
135
181
|
_tool_def(
|
|
136
182
|
"trinity_status",
|
|
137
|
-
|
|
183
|
+
_desc(
|
|
184
|
+
"Read the current state, result, route evidence, and acceptance metadata for one task id.",
|
|
185
|
+
"Use this after dispatch or orchestration to poll progress or recover a result after a timeout.",
|
|
186
|
+
"This is read-only and does not run workers or mark messages as read; it returns a compact task object or task-not-found error.",
|
|
187
|
+
),
|
|
138
188
|
{
|
|
139
|
-
"task_id": {"type": "string", "description": "Task identifier"},
|
|
189
|
+
"task_id": {"type": "string", "description": "Task identifier returned by dispatch, orchestration, or task listing."},
|
|
140
190
|
},
|
|
141
191
|
["task_id"],
|
|
192
|
+
READ_ONLY_TOOL,
|
|
142
193
|
),
|
|
143
194
|
_tool_def(
|
|
144
195
|
"trinity_tasks",
|
|
145
|
-
|
|
196
|
+
_desc(
|
|
197
|
+
"List recent durable task records, optionally filtered by source or target agent.",
|
|
198
|
+
"Use this to inspect queue history or find a task id before calling trinity_status.",
|
|
199
|
+
"This is read-only, does not run workers, and returns compact task objects in recent-first order.",
|
|
200
|
+
),
|
|
146
201
|
{
|
|
147
|
-
"agent": {"type": "string", "description": "
|
|
148
|
-
"limit": {"type": "integer", "description": "Maximum tasks to return
|
|
202
|
+
"agent": {"type": "string", "description": "Optional agent id to match against source_agent or target_agent."},
|
|
203
|
+
"limit": {"type": "integer", "description": "Maximum tasks to return; defaults to 20 and is capped by the server."},
|
|
149
204
|
},
|
|
150
205
|
[],
|
|
206
|
+
READ_ONLY_TOOL,
|
|
151
207
|
),
|
|
152
208
|
_tool_def(
|
|
153
209
|
"trinity_worker",
|
|
154
|
-
|
|
210
|
+
_desc(
|
|
211
|
+
"Run one local worker cycle for a named agent and process one queued task if available.",
|
|
212
|
+
"Use this to manually drain the queue or retry a specific queued task; use trinity_worker_daemon for a background worker.",
|
|
213
|
+
"This may execute the agent command and update task state; it returns no_task or the compact processed task.",
|
|
214
|
+
),
|
|
155
215
|
{
|
|
156
|
-
"agent": {"type": "string", "description": "Agent id
|
|
157
|
-
"task_id": {"type": "string", "description": "
|
|
216
|
+
"agent": {"type": "string", "description": "Agent id whose queue should be processed."},
|
|
217
|
+
"task_id": {"type": "string", "description": "Optional specific queued task id to process instead of the next task."},
|
|
158
218
|
},
|
|
159
219
|
["agent"],
|
|
220
|
+
AGENT_EXECUTION_TOOL,
|
|
160
221
|
),
|
|
161
222
|
_tool_def(
|
|
162
223
|
"trinity_worker_daemon",
|
|
163
|
-
|
|
224
|
+
_desc(
|
|
225
|
+
"Start, stop, or check the local background worker process for one agent.",
|
|
226
|
+
"Use status for a process check, start to keep an agent queue draining, and stop to terminate that daemon.",
|
|
227
|
+
"Start and stop modify local process state and PID files; responses include running, started, stopped, pid, and pid_file fields.",
|
|
228
|
+
),
|
|
164
229
|
{
|
|
165
|
-
"agent": {"type": "string", "description": "Agent
|
|
166
|
-
"action": {"type": "string", "enum": ["start", "stop", "status"], "description": "
|
|
230
|
+
"agent": {"type": "string", "description": "Agent id whose worker daemon should be controlled."},
|
|
231
|
+
"action": {"type": "string", "enum": ["start", "stop", "status"], "description": "Daemon action: status checks process state, start launches, stop terminates."},
|
|
167
232
|
},
|
|
168
233
|
["agent", "action"],
|
|
234
|
+
STATEFUL_LOCAL_TOOL,
|
|
169
235
|
),
|
|
170
236
|
_tool_def(
|
|
171
237
|
"trinity_doctor",
|
|
172
|
-
|
|
238
|
+
_desc(
|
|
239
|
+
"Run Trinity Lite health, configuration, database, publish-readiness, and runtime hygiene checks.",
|
|
240
|
+
"Use this before release, after setup changes, or when routing and worker behavior looks wrong.",
|
|
241
|
+
"This is read-only: it scans configured files, database state, optional repository roots, and retired ports, then returns a structured health report.",
|
|
242
|
+
),
|
|
173
243
|
{
|
|
174
|
-
"scan_root": {"type": "string", "description": "
|
|
175
|
-
"runtime_root": {"type": "string", "description": "
|
|
244
|
+
"scan_root": {"type": "string", "description": "Optional repository root for publish-readiness and packaging checks."},
|
|
245
|
+
"runtime_root": {"type": "string", "description": "Optional runtime directory to inspect for local hygiene checks."},
|
|
176
246
|
"retired_ports": {
|
|
177
247
|
"type": "array",
|
|
178
248
|
"items": {"type": "integer"},
|
|
179
|
-
"description": "
|
|
249
|
+
"description": "Optional TCP ports that should be unused; listening ports are reported as hygiene issues.",
|
|
180
250
|
},
|
|
181
251
|
},
|
|
182
252
|
[],
|
|
253
|
+
READ_ONLY_TOOL,
|
|
183
254
|
),
|
|
184
255
|
_tool_def(
|
|
185
256
|
"trinity_inbox",
|
|
186
|
-
|
|
257
|
+
_desc(
|
|
258
|
+
"Read durable inter-agent messages addressed to one agent from the local Trinity database.",
|
|
259
|
+
"Use this to recover completed work, review notes, or follow-up messages; use trinity_send to create a new message.",
|
|
260
|
+
"By default it reads unread messages, but mark_read=true updates message read state; it returns message records.",
|
|
261
|
+
),
|
|
187
262
|
{
|
|
188
|
-
"agent": {"type": "string", "description": "
|
|
189
|
-
"unread_only": {"type": "boolean", "description": "
|
|
190
|
-
"mark_read": {"type": "boolean", "description": "
|
|
191
|
-
"limit": {"type": "integer", "description": "Maximum messages to return
|
|
263
|
+
"agent": {"type": "string", "description": "Recipient agent id whose inbox should be read."},
|
|
264
|
+
"unread_only": {"type": "boolean", "description": "When true, return only unread messages; defaults to true."},
|
|
265
|
+
"mark_read": {"type": "boolean", "description": "When true, mark returned messages as read after fetching them."},
|
|
266
|
+
"limit": {"type": "integer", "description": "Maximum messages to return; defaults to 20 and is capped by the server."},
|
|
192
267
|
},
|
|
193
268
|
["agent"],
|
|
269
|
+
STATEFUL_LOCAL_TOOL,
|
|
194
270
|
),
|
|
195
271
|
_tool_def(
|
|
196
272
|
"trinity_send",
|
|
197
|
-
|
|
273
|
+
_desc(
|
|
274
|
+
"Write a durable message from one Trinity agent to another agent's inbox.",
|
|
275
|
+
"Use this for follow-up context, review handoffs, or task-linked notes; use trinity_dispatch to create executable work.",
|
|
276
|
+
"This writes to the local message database, does not run a worker, and returns the stored message record.",
|
|
277
|
+
),
|
|
198
278
|
{
|
|
199
|
-
"target_agent": {"type": "string", "description": "Recipient agent id"},
|
|
200
|
-
"message": {"type": "string", "description": "Message body"},
|
|
201
|
-
"source_agent": {"type": "string", "description": "Sender agent id
|
|
202
|
-
"task_id": {"type": "string", "description": "
|
|
279
|
+
"target_agent": {"type": "string", "description": "Recipient agent id that will receive the inbox message."},
|
|
280
|
+
"message": {"type": "string", "description": "Message body to persist in the target inbox."},
|
|
281
|
+
"source_agent": {"type": "string", "description": "Sender agent id recorded on the message; defaults to mcp."},
|
|
282
|
+
"task_id": {"type": "string", "description": "Optional associated task id for threading or audit context."},
|
|
203
283
|
},
|
|
204
284
|
["target_agent", "message"],
|
|
285
|
+
STATEFUL_LOCAL_TOOL,
|
|
205
286
|
),
|
|
206
287
|
_tool_def(
|
|
207
288
|
"trinity_skill_search",
|
|
208
|
-
|
|
289
|
+
_desc(
|
|
290
|
+
"Search the optional agent-skill-system index for skills relevant to a task or keyword query.",
|
|
291
|
+
"Use this before loading a full skill when the exact skill name is unknown; use trinity_skill_load after selecting a result.",
|
|
292
|
+
"This is read-only and returns ranked skill metadata, or an installation hint if agent-skill-system is not installed.",
|
|
293
|
+
),
|
|
209
294
|
{
|
|
210
|
-
"query": {"type": "string", "description": "Task description or
|
|
211
|
-
"limit": {"type": "integer", "description": "Maximum results
|
|
295
|
+
"query": {"type": "string", "description": "Task description or keywords used to rank matching skills."},
|
|
296
|
+
"limit": {"type": "integer", "description": "Maximum results to return; defaults to 5 and is capped at 20."},
|
|
212
297
|
},
|
|
213
298
|
["query"],
|
|
299
|
+
READ_ONLY_TOOL,
|
|
214
300
|
),
|
|
215
301
|
_tool_def(
|
|
216
302
|
"trinity_skill_load",
|
|
217
|
-
|
|
303
|
+
_desc(
|
|
304
|
+
"Load the full SKILL.md, memory, schema, keywords, and generated system prompt for one exact skill name.",
|
|
305
|
+
"Use this after trinity_skill_search identifies the correct skill; do not use it for broad discovery.",
|
|
306
|
+
"This is read-only and returns the skill bundle, or a not-found response with available skill names when possible.",
|
|
307
|
+
),
|
|
218
308
|
{
|
|
219
|
-
"skill_name": {"type": "string", "description": "Exact name
|
|
309
|
+
"skill_name": {"type": "string", "description": "Exact skill name to load from the local skill bank."},
|
|
220
310
|
},
|
|
221
311
|
["skill_name"],
|
|
312
|
+
READ_ONLY_TOOL,
|
|
222
313
|
),
|
|
223
314
|
]
|
|
224
315
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: trinity-lite
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
4
4
|
Summary: The bus that lets your AI agents talk to each other.
|
|
5
5
|
Author: Yomiracle
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,10 +31,11 @@ Dynamic: license-file
|
|
|
31
31
|
[](pyproject.toml)
|
|
32
32
|
[](LICENSE)
|
|
33
33
|
[](https://pypi.org/project/trinity-lite/)
|
|
34
|
+
[](https://glama.ai/mcp/servers/Yomiracle/trinity-lite/score)
|
|
34
35
|
|
|
35
36
|
**Local-first multi-agent orchestration for CLI AI agents.**
|
|
36
37
|
|
|
37
|
-
[中文 README](README_zh.md)
|
|
38
|
+
[中文 README](README_zh.md) · [Docs](docs/index.md) · [Why Trinity Lite?](docs/WHY_TRINITY_LITE.md) · [Recipes](docs/recipes/generic-cli.md)
|
|
38
39
|
|
|
39
40
|
## The problem
|
|
40
41
|
|
|
@@ -217,6 +218,8 @@ Works with 1 model, 2 models, or 10 models. No agent names hardcoded.
|
|
|
217
218
|
|
|
218
219
|
- [PyPI](https://pypi.org/project/trinity-lite/)
|
|
219
220
|
- [Documentation](docs/)
|
|
221
|
+
- [Why Trinity Lite?](docs/WHY_TRINITY_LITE.md)
|
|
222
|
+
- [Recipes](docs/recipes/generic-cli.md)
|
|
220
223
|
- [Changelog](CHANGELOG.md)
|
|
221
224
|
- [Contributing](CONTRIBUTING.md)
|
|
222
225
|
- [Architecture](docs/ARCHITECTURE.md)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|