flightdeck-connect 0.1.0__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.
- flightdeck_connect-0.1.0/PKG-INFO +205 -0
- flightdeck_connect-0.1.0/README.md +178 -0
- flightdeck_connect-0.1.0/pyproject.toml +105 -0
- flightdeck_connect-0.1.0/setup.cfg +4 -0
- flightdeck_connect-0.1.0/src/conductor/__init__.py +46 -0
- flightdeck_connect-0.1.0/src/conductor/chain_gate.py +572 -0
- flightdeck_connect-0.1.0/src/conductor/cli.py +1059 -0
- flightdeck_connect-0.1.0/src/conductor/connect.py +370 -0
- flightdeck_connect-0.1.0/src/conductor/local_board.py +1023 -0
- flightdeck_connect-0.1.0/src/conductor/mcp.py +2087 -0
- flightdeck_connect-0.1.0/src/conductor/policy.py +474 -0
- flightdeck_connect-0.1.0/src/conductor/verifier.py +433 -0
- flightdeck_connect-0.1.0/src/conductor/verify_pack.py +104 -0
- flightdeck_connect-0.1.0/src/conductor/workspaces.py +181 -0
- flightdeck_connect-0.1.0/src/flightdeck_connect.egg-info/PKG-INFO +205 -0
- flightdeck_connect-0.1.0/src/flightdeck_connect.egg-info/SOURCES.txt +31 -0
- flightdeck_connect-0.1.0/src/flightdeck_connect.egg-info/dependency_links.txt +1 -0
- flightdeck_connect-0.1.0/src/flightdeck_connect.egg-info/entry_points.txt +6 -0
- flightdeck_connect-0.1.0/src/flightdeck_connect.egg-info/requires.txt +3 -0
- flightdeck_connect-0.1.0/src/flightdeck_connect.egg-info/top_level.txt +1 -0
- flightdeck_connect-0.1.0/tests/test_chain_gate.py +136 -0
- flightdeck_connect-0.1.0/tests/test_cli_workspace_plumbing.py +229 -0
- flightdeck_connect-0.1.0/tests/test_connect.py +271 -0
- flightdeck_connect-0.1.0/tests/test_flightdeck_inbox_lane.py +402 -0
- flightdeck_connect-0.1.0/tests/test_flightdeck_mcp_tools.py +504 -0
- flightdeck_connect-0.1.0/tests/test_policy.py +333 -0
- flightdeck_connect-0.1.0/tests/test_read_exam.py +96 -0
- flightdeck_connect-0.1.0/tests/test_revision_context.py +233 -0
- flightdeck_connect-0.1.0/tests/test_verifier.py +172 -0
- flightdeck_connect-0.1.0/tests/test_verifier_win32.py +228 -0
- flightdeck_connect-0.1.0/tests/test_verify_pack_cli.py +69 -0
- flightdeck_connect-0.1.0/tests/test_wheel_smoke.py +142 -0
- flightdeck_connect-0.1.0/tests/test_workspaces.py +160 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: flightdeck-connect
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: The MCP rail for NorthGate AI FlightDeck — provision governed MCP tools into Claude Code, Cursor, and Codex; run governed agent lanes; verify signed evidence packs offline.
|
|
5
|
+
Author-email: NorthGate Strategic LLC <support@northgatestrategic.com>
|
|
6
|
+
License: Proprietary
|
|
7
|
+
Project-URL: Homepage, https://ai-flightdeck.com
|
|
8
|
+
Project-URL: Company, https://airecai.com
|
|
9
|
+
Keywords: ai,agents,mcp,model-context-protocol,ai-flightdeck,evidence,verification,audit,conductor
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: Other/Proprietary License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Topic :: System :: Systems Administration
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
27
|
+
|
|
28
|
+
# conductor-cli
|
|
29
|
+
|
|
30
|
+
Agent CLI + Model Context Protocol server for **Conductor** — NorthGate's
|
|
31
|
+
AI-assisted-delivery governance substrate.
|
|
32
|
+
|
|
33
|
+
After `pip install conductor-cli` you get:
|
|
34
|
+
|
|
35
|
+
- **`conductor`** — a stdlib-only HTTP client for the `/v1/conductor/*` API.
|
|
36
|
+
- **`conductor-mcp`** — a stdio JSON-RPC Model Context Protocol server that
|
|
37
|
+
exposes **34 tools** (21 `conductor_*` + 13 `flightdeck_*`, scoped at
|
|
38
|
+
runtime via `MCP_TOOL_SET=flightdeck|conductor|all`) to MCP-aware agent
|
|
39
|
+
runtimes (Claude Code, Cursor, Codex, VS Code agents). The `flightdeck_*`
|
|
40
|
+
family implements the FlightDeck Agent Contract v1 loop —
|
|
41
|
+
`get_handoff → read_exam → prepare_workspace → submit_return`.
|
|
42
|
+
- **`flightdeck-verify`** — standalone offline evidence-pack verifier
|
|
43
|
+
(stdlib-only; exit 0/1/2; `--json`).
|
|
44
|
+
- **`flightdeck-gate`** — pre-merge git gate for verify-gated merges
|
|
45
|
+
(chain walk + accept-gate conjuncts + reference-transaction guard).
|
|
46
|
+
|
|
47
|
+
## Install
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pip install conductor-cli
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Zero runtime dependencies (pure Python stdlib). Python 3.8+.
|
|
54
|
+
|
|
55
|
+
## Auth
|
|
56
|
+
|
|
57
|
+
The CLI authenticates one of two ways:
|
|
58
|
+
|
|
59
|
+
| Header | Env var | Source |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `X-Agent-Token` | `CONDUCTOR_AGENT_TOKEN` | Service token issued by `/v1/conductor/projects/{id}/agent-tokens`. Preferred for agents. |
|
|
62
|
+
| `X-JWT-Token` | `CONDUCTOR_USER_JWT` | A standard TrustSHIELD access token. Fallback for humans. |
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
export CONDUCTOR_AGENT_TOKEN=cdtr_...
|
|
66
|
+
conductor whoami
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## CLI quickstart
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Probe auth + caller mode
|
|
73
|
+
conductor whoami
|
|
74
|
+
|
|
75
|
+
# Project + task ops
|
|
76
|
+
conductor project list
|
|
77
|
+
conductor project create --name "TrustSHIELD Conductor delivery"
|
|
78
|
+
conductor task list --project <project-id>
|
|
79
|
+
|
|
80
|
+
# Workflow transition (Policy Mesh gated)
|
|
81
|
+
conductor transition TASK-0040 \
|
|
82
|
+
--action submit_review --to-state review_ready \
|
|
83
|
+
--actor-member-id <member-id> \
|
|
84
|
+
--reason "tests pass, ruff clean" \
|
|
85
|
+
--evidence gitlab_mr=https://gitlab.com/.../merge_requests/126
|
|
86
|
+
|
|
87
|
+
# Release pack — download + offline verify
|
|
88
|
+
conductor export --project <project-id> --out release.tar.gz
|
|
89
|
+
conductor verify release.tar.gz
|
|
90
|
+
# -> Exit 0 + "OK: pack integrity verified." == nothing tampered.
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`conductor --help` lists every subcommand. `--json` on any command gives
|
|
94
|
+
machine-readable output for scripting; the default is friendly text.
|
|
95
|
+
|
|
96
|
+
## Local board mode
|
|
97
|
+
|
|
98
|
+
Local board mode is the zero-cloud bridge for IDEs. It operates directly on a
|
|
99
|
+
filesystem board folder:
|
|
100
|
+
|
|
101
|
+
```text
|
|
102
|
+
<Project Conductor folder>/queue/TASK-*.md
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
No `CONDUCTOR_AGENT_TOKEN` or `CONDUCTOR_USER_JWT` is required.
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
BOARD="C:/Users/ericg/OneDrive - NorthGate Strategic LLC/Project Conductor"
|
|
109
|
+
|
|
110
|
+
conductor --json local list --board "$BOARD"
|
|
111
|
+
conductor --json local list --board "$BOARD" --state READY
|
|
112
|
+
conductor --json local read TASK-0001 --board "$BOARD"
|
|
113
|
+
conductor local handoff TASK-0001 --board "$BOARD"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Create and update packets:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
conductor --json local create \
|
|
120
|
+
--board "$BOARD" \
|
|
121
|
+
--title "Audit the installer handoff" \
|
|
122
|
+
--objective "Verify artifacts and append evidence." \
|
|
123
|
+
--owner Codex \
|
|
124
|
+
--reviewer "Claude Code"
|
|
125
|
+
|
|
126
|
+
conductor --json local signal TASK-0001 \
|
|
127
|
+
--board "$BOARD" \
|
|
128
|
+
--state REVIEW_READY \
|
|
129
|
+
--action submit_review \
|
|
130
|
+
--verdict "Audit completed; report attached." \
|
|
131
|
+
--next "Reviewer checks the evidence and accepts or requests changes."
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## MCP server (Claude Code / Cursor / Codex)
|
|
135
|
+
|
|
136
|
+
The `conductor-mcp` script implements the Model Context Protocol
|
|
137
|
+
(2024-11-05) over stdio. Sample config snippets:
|
|
138
|
+
|
|
139
|
+
**Claude Code** (`~/.config/claude/claude_desktop_config.json` or project-
|
|
140
|
+
level `.mcp.json`):
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"mcpServers": {
|
|
145
|
+
"conductor": {
|
|
146
|
+
"command": "conductor-mcp",
|
|
147
|
+
"env": {
|
|
148
|
+
"CONDUCTOR_AGENT_TOKEN": "cdtr_..."
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Cursor** (`~/.cursor/mcp.json`):
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"mcpServers": {
|
|
160
|
+
"conductor": {
|
|
161
|
+
"command": "conductor-mcp",
|
|
162
|
+
"env": {
|
|
163
|
+
"CONDUCTOR_AGENT_TOKEN": "cdtr_..."
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
After restart, the agent's tool list includes 21 `conductor_*` tools —
|
|
171
|
+
`conductor_project_list`, `conductor_transition`, `conductor_export`,
|
|
172
|
+
`conductor_verify`, plus local-board tools such as `conductor_local_list`
|
|
173
|
+
and `conductor_local_signal`. Tool-execution failures surface as
|
|
174
|
+
`isError: true` in the MCP response (per spec); protocol/transport
|
|
175
|
+
failures use the JSON-RPC error channel.
|
|
176
|
+
|
|
177
|
+
## Custom API endpoint
|
|
178
|
+
|
|
179
|
+
If you're targeting an environment other than the default
|
|
180
|
+
(`https://airec-api-dxol6hwotq-uk.a.run.app`):
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
export CONDUCTOR_API_BASE=https://your-conductor-api.example.com
|
|
184
|
+
# OR pass per-invocation:
|
|
185
|
+
conductor --api-base https://your-conductor-api.example.com whoami
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Offline pack verification
|
|
189
|
+
|
|
190
|
+
`conductor verify <pack.tar.gz>` works without API access. It extracts the
|
|
191
|
+
archive in a temp dir, walks `SHA256SUMS` to verify every file's hash, then
|
|
192
|
+
walks `audit-chain/chain.jsonl` to confirm per-tenant chain integrity
|
|
193
|
+
(monotonic `chain_position` + `prev_event_hash` threading). Either kind of
|
|
194
|
+
tampering surfaces a non-zero exit and a specific error.
|
|
195
|
+
|
|
196
|
+
The check is identical to the embedded `audit-chain/verify.py` script that
|
|
197
|
+
ships inside every pack — `conductor verify` is the more convenient
|
|
198
|
+
hand-typed form.
|
|
199
|
+
|
|
200
|
+
## Source
|
|
201
|
+
|
|
202
|
+
Mirror of `packages/api/src/conductor/{cli,mcp}.py` from the upstream
|
|
203
|
+
TrustSHIELD repo. See
|
|
204
|
+
[Conductor-Build-Plan-2026-05-23.md](https://gitlab.com/dcairecai-group/erics-workspace)
|
|
205
|
+
sections 4.2 + 5 for the full design.
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# conductor-cli
|
|
2
|
+
|
|
3
|
+
Agent CLI + Model Context Protocol server for **Conductor** — NorthGate's
|
|
4
|
+
AI-assisted-delivery governance substrate.
|
|
5
|
+
|
|
6
|
+
After `pip install conductor-cli` you get:
|
|
7
|
+
|
|
8
|
+
- **`conductor`** — a stdlib-only HTTP client for the `/v1/conductor/*` API.
|
|
9
|
+
- **`conductor-mcp`** — a stdio JSON-RPC Model Context Protocol server that
|
|
10
|
+
exposes **34 tools** (21 `conductor_*` + 13 `flightdeck_*`, scoped at
|
|
11
|
+
runtime via `MCP_TOOL_SET=flightdeck|conductor|all`) to MCP-aware agent
|
|
12
|
+
runtimes (Claude Code, Cursor, Codex, VS Code agents). The `flightdeck_*`
|
|
13
|
+
family implements the FlightDeck Agent Contract v1 loop —
|
|
14
|
+
`get_handoff → read_exam → prepare_workspace → submit_return`.
|
|
15
|
+
- **`flightdeck-verify`** — standalone offline evidence-pack verifier
|
|
16
|
+
(stdlib-only; exit 0/1/2; `--json`).
|
|
17
|
+
- **`flightdeck-gate`** — pre-merge git gate for verify-gated merges
|
|
18
|
+
(chain walk + accept-gate conjuncts + reference-transaction guard).
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pip install conductor-cli
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Zero runtime dependencies (pure Python stdlib). Python 3.8+.
|
|
27
|
+
|
|
28
|
+
## Auth
|
|
29
|
+
|
|
30
|
+
The CLI authenticates one of two ways:
|
|
31
|
+
|
|
32
|
+
| Header | Env var | Source |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `X-Agent-Token` | `CONDUCTOR_AGENT_TOKEN` | Service token issued by `/v1/conductor/projects/{id}/agent-tokens`. Preferred for agents. |
|
|
35
|
+
| `X-JWT-Token` | `CONDUCTOR_USER_JWT` | A standard TrustSHIELD access token. Fallback for humans. |
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
export CONDUCTOR_AGENT_TOKEN=cdtr_...
|
|
39
|
+
conductor whoami
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## CLI quickstart
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Probe auth + caller mode
|
|
46
|
+
conductor whoami
|
|
47
|
+
|
|
48
|
+
# Project + task ops
|
|
49
|
+
conductor project list
|
|
50
|
+
conductor project create --name "TrustSHIELD Conductor delivery"
|
|
51
|
+
conductor task list --project <project-id>
|
|
52
|
+
|
|
53
|
+
# Workflow transition (Policy Mesh gated)
|
|
54
|
+
conductor transition TASK-0040 \
|
|
55
|
+
--action submit_review --to-state review_ready \
|
|
56
|
+
--actor-member-id <member-id> \
|
|
57
|
+
--reason "tests pass, ruff clean" \
|
|
58
|
+
--evidence gitlab_mr=https://gitlab.com/.../merge_requests/126
|
|
59
|
+
|
|
60
|
+
# Release pack — download + offline verify
|
|
61
|
+
conductor export --project <project-id> --out release.tar.gz
|
|
62
|
+
conductor verify release.tar.gz
|
|
63
|
+
# -> Exit 0 + "OK: pack integrity verified." == nothing tampered.
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`conductor --help` lists every subcommand. `--json` on any command gives
|
|
67
|
+
machine-readable output for scripting; the default is friendly text.
|
|
68
|
+
|
|
69
|
+
## Local board mode
|
|
70
|
+
|
|
71
|
+
Local board mode is the zero-cloud bridge for IDEs. It operates directly on a
|
|
72
|
+
filesystem board folder:
|
|
73
|
+
|
|
74
|
+
```text
|
|
75
|
+
<Project Conductor folder>/queue/TASK-*.md
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
No `CONDUCTOR_AGENT_TOKEN` or `CONDUCTOR_USER_JWT` is required.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
BOARD="C:/Users/ericg/OneDrive - NorthGate Strategic LLC/Project Conductor"
|
|
82
|
+
|
|
83
|
+
conductor --json local list --board "$BOARD"
|
|
84
|
+
conductor --json local list --board "$BOARD" --state READY
|
|
85
|
+
conductor --json local read TASK-0001 --board "$BOARD"
|
|
86
|
+
conductor local handoff TASK-0001 --board "$BOARD"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Create and update packets:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
conductor --json local create \
|
|
93
|
+
--board "$BOARD" \
|
|
94
|
+
--title "Audit the installer handoff" \
|
|
95
|
+
--objective "Verify artifacts and append evidence." \
|
|
96
|
+
--owner Codex \
|
|
97
|
+
--reviewer "Claude Code"
|
|
98
|
+
|
|
99
|
+
conductor --json local signal TASK-0001 \
|
|
100
|
+
--board "$BOARD" \
|
|
101
|
+
--state REVIEW_READY \
|
|
102
|
+
--action submit_review \
|
|
103
|
+
--verdict "Audit completed; report attached." \
|
|
104
|
+
--next "Reviewer checks the evidence and accepts or requests changes."
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## MCP server (Claude Code / Cursor / Codex)
|
|
108
|
+
|
|
109
|
+
The `conductor-mcp` script implements the Model Context Protocol
|
|
110
|
+
(2024-11-05) over stdio. Sample config snippets:
|
|
111
|
+
|
|
112
|
+
**Claude Code** (`~/.config/claude/claude_desktop_config.json` or project-
|
|
113
|
+
level `.mcp.json`):
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"mcpServers": {
|
|
118
|
+
"conductor": {
|
|
119
|
+
"command": "conductor-mcp",
|
|
120
|
+
"env": {
|
|
121
|
+
"CONDUCTOR_AGENT_TOKEN": "cdtr_..."
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Cursor** (`~/.cursor/mcp.json`):
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"mcpServers": {
|
|
133
|
+
"conductor": {
|
|
134
|
+
"command": "conductor-mcp",
|
|
135
|
+
"env": {
|
|
136
|
+
"CONDUCTOR_AGENT_TOKEN": "cdtr_..."
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
After restart, the agent's tool list includes 21 `conductor_*` tools —
|
|
144
|
+
`conductor_project_list`, `conductor_transition`, `conductor_export`,
|
|
145
|
+
`conductor_verify`, plus local-board tools such as `conductor_local_list`
|
|
146
|
+
and `conductor_local_signal`. Tool-execution failures surface as
|
|
147
|
+
`isError: true` in the MCP response (per spec); protocol/transport
|
|
148
|
+
failures use the JSON-RPC error channel.
|
|
149
|
+
|
|
150
|
+
## Custom API endpoint
|
|
151
|
+
|
|
152
|
+
If you're targeting an environment other than the default
|
|
153
|
+
(`https://airec-api-dxol6hwotq-uk.a.run.app`):
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
export CONDUCTOR_API_BASE=https://your-conductor-api.example.com
|
|
157
|
+
# OR pass per-invocation:
|
|
158
|
+
conductor --api-base https://your-conductor-api.example.com whoami
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Offline pack verification
|
|
162
|
+
|
|
163
|
+
`conductor verify <pack.tar.gz>` works without API access. It extracts the
|
|
164
|
+
archive in a temp dir, walks `SHA256SUMS` to verify every file's hash, then
|
|
165
|
+
walks `audit-chain/chain.jsonl` to confirm per-tenant chain integrity
|
|
166
|
+
(monotonic `chain_position` + `prev_event_hash` threading). Either kind of
|
|
167
|
+
tampering surfaces a non-zero exit and a specific error.
|
|
168
|
+
|
|
169
|
+
The check is identical to the embedded `audit-chain/verify.py` script that
|
|
170
|
+
ships inside every pack — `conductor verify` is the more convenient
|
|
171
|
+
hand-typed form.
|
|
172
|
+
|
|
173
|
+
## Source
|
|
174
|
+
|
|
175
|
+
Mirror of `packages/api/src/conductor/{cli,mcp}.py` from the upstream
|
|
176
|
+
TrustSHIELD repo. See
|
|
177
|
+
[Conductor-Build-Plan-2026-05-23.md](https://gitlab.com/dcairecai-group/erics-workspace)
|
|
178
|
+
sections 4.2 + 5 for the full design.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
# PyPI distribution name is flightdeck-connect (the marketed on-ramp:
|
|
7
|
+
# `pip install flightdeck-connect`). "conductor-cli" was unavailable on
|
|
8
|
+
# PyPI (third-party AGPL project), and the canon (docs 2026-07-26)
|
|
9
|
+
# keeps conductor-* for internal paths/imports only — the import
|
|
10
|
+
# package stays `conductor`, all five console-script names unchanged.
|
|
11
|
+
name = "flightdeck-connect"
|
|
12
|
+
version = "0.1.0"
|
|
13
|
+
description = "The MCP rail for NorthGate AI FlightDeck — provision governed MCP tools into Claude Code, Cursor, and Codex; run governed agent lanes; verify signed evidence packs offline."
|
|
14
|
+
readme = "README.md"
|
|
15
|
+
license = { text = "Proprietary" }
|
|
16
|
+
requires-python = ">=3.8"
|
|
17
|
+
authors = [
|
|
18
|
+
{ name = "NorthGate Strategic LLC", email = "support@northgatestrategic.com" }
|
|
19
|
+
]
|
|
20
|
+
keywords = [
|
|
21
|
+
"ai", "agents", "mcp", "model-context-protocol", "ai-flightdeck",
|
|
22
|
+
"evidence", "verification", "audit", "conductor"
|
|
23
|
+
]
|
|
24
|
+
classifiers = [
|
|
25
|
+
"Development Status :: 4 - Beta",
|
|
26
|
+
"Intended Audience :: Developers",
|
|
27
|
+
"License :: Other/Proprietary License",
|
|
28
|
+
"Operating System :: OS Independent",
|
|
29
|
+
"Programming Language :: Python :: 3",
|
|
30
|
+
"Programming Language :: Python :: 3.8",
|
|
31
|
+
"Programming Language :: Python :: 3.9",
|
|
32
|
+
"Programming Language :: Python :: 3.10",
|
|
33
|
+
"Programming Language :: Python :: 3.11",
|
|
34
|
+
"Programming Language :: Python :: 3.12",
|
|
35
|
+
"Programming Language :: Python :: 3.13",
|
|
36
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
37
|
+
"Topic :: System :: Systems Administration",
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
# Intentionally zero runtime dependencies. The CLI + MCP server use
|
|
41
|
+
# pure Python stdlib (argparse, urllib, json, tarfile, hashlib, etc.)
|
|
42
|
+
# so install is fast and dependency conflicts are impossible.
|
|
43
|
+
dependencies = []
|
|
44
|
+
|
|
45
|
+
[project.optional-dependencies]
|
|
46
|
+
# Test-only deps. `pip install flightdeck-connect[dev]` to run the smoke
|
|
47
|
+
# tests bundled in the source tree.
|
|
48
|
+
dev = [
|
|
49
|
+
"pytest>=7.0",
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
[project.scripts]
|
|
53
|
+
# `conductor` — the HTTP client CLI.
|
|
54
|
+
# $ conductor whoami
|
|
55
|
+
# $ conductor project list
|
|
56
|
+
# $ conductor transition TASK-0040 --action submit_review --to-state review_ready ...
|
|
57
|
+
conductor = "conductor.cli:main"
|
|
58
|
+
|
|
59
|
+
# `conductor-mcp` — the stdio JSON-RPC MCP server.
|
|
60
|
+
# In a Claude Code / Cursor / VS Code agent's MCP config:
|
|
61
|
+
# {
|
|
62
|
+
# "mcpServers": {
|
|
63
|
+
# "conductor": {
|
|
64
|
+
# "command": "conductor-mcp",
|
|
65
|
+
# "env": { "CONDUCTOR_AGENT_TOKEN": "cdtr_..." }
|
|
66
|
+
# }
|
|
67
|
+
# }
|
|
68
|
+
# }
|
|
69
|
+
conductor-mcp = "conductor.mcp:main"
|
|
70
|
+
|
|
71
|
+
# `flightdeck-verify` — the standalone offline evidence-pack verifier
|
|
72
|
+
# (the community wedge: "check what an AI agent claims it did" as a
|
|
73
|
+
# one-liner; no API access, no account, stdlib only).
|
|
74
|
+
# $ flightdeck-verify release-pack.tar.gz
|
|
75
|
+
# $ flightdeck-verify release-pack.tar.gz --json
|
|
76
|
+
flightdeck-verify = "conductor.verify_pack:main"
|
|
77
|
+
|
|
78
|
+
# `flightdeck-gate` — the verify-gated merge (Epic 1.5): a git
|
|
79
|
+
# pre-merge-commit hook engine that refuses FlightDeck lane merges the
|
|
80
|
+
# tamper-evident chain has not verified for EXACTLY the commit landing.
|
|
81
|
+
# $ flightdeck-gate install-hook --board <board> --repo <repo>
|
|
82
|
+
# $ flightdeck-gate check --board <board> --repo <repo> --head <sha>
|
|
83
|
+
flightdeck-gate = "conductor.chain_gate:main"
|
|
84
|
+
|
|
85
|
+
# `flightdeck-connect` — the river's first inch (2026-07-25): provision
|
|
86
|
+
# the FlightDeck MCP server into the coding tools on this machine
|
|
87
|
+
# (Claude Code project .mcp.json / Cursor mcp.json / `codex mcp add`),
|
|
88
|
+
# by task profile (agent|cloud|operator -> MCP_TOOL_SET), idempotently,
|
|
89
|
+
# chain-recording the provisioning when a board is given. Kimi is
|
|
90
|
+
# detected and honestly reported as the file-handoff rail (its CLI
|
|
91
|
+
# exposes no MCP surface today).
|
|
92
|
+
# $ flightdeck-connect --status
|
|
93
|
+
# $ flightdeck-connect --repo C:/proj --profile agent --board <board>
|
|
94
|
+
flightdeck-connect = "conductor.connect:main"
|
|
95
|
+
|
|
96
|
+
[project.urls]
|
|
97
|
+
"Homepage" = "https://ai-flightdeck.com"
|
|
98
|
+
"Company" = "https://airecai.com"
|
|
99
|
+
|
|
100
|
+
[tool.setuptools]
|
|
101
|
+
package-dir = { "" = "src" }
|
|
102
|
+
|
|
103
|
+
[tool.setuptools.packages.find]
|
|
104
|
+
where = ["src"]
|
|
105
|
+
include = ["conductor*"]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Conductor CLI + MCP server — standalone PyPI distribution.
|
|
3
|
+
|
|
4
|
+
This is the agent-facing entry point to the Conductor substrate
|
|
5
|
+
(https://gitlab.com/dcairecai-group/erics-workspace, packages/api/
|
|
6
|
+
src/conductor/*). It ships FOUR console scripts:
|
|
7
|
+
|
|
8
|
+
conductor — the stdlib-only HTTP client for /v1/conductor/*
|
|
9
|
+
conductor-mcp — the stdio JSON-RPC Model Context Protocol server
|
|
10
|
+
(34 tools: 21 conductor_* + 13 flightdeck_*,
|
|
11
|
+
scoped at runtime via MCP_TOOL_SET)
|
|
12
|
+
flightdeck-verify — standalone offline evidence-pack verifier
|
|
13
|
+
flightdeck-gate — pre-merge git gate (verify-gated merge hook)
|
|
14
|
+
|
|
15
|
+
After `pip install conductor-cli`, an agent's MCP config (Claude
|
|
16
|
+
Code / Cursor / Codex) can point at `conductor-mcp` (or
|
|
17
|
+
`python -m conductor.mcp`) and the tools appear in the agent's tool
|
|
18
|
+
list — including the FlightDeck Agent Contract v1 loop
|
|
19
|
+
(get_handoff -> read_exam -> prepare_workspace -> submit_return;
|
|
20
|
+
see docs/spec/agent-contract.md).
|
|
21
|
+
|
|
22
|
+
This package is intentionally minimal:
|
|
23
|
+
- Pure Python stdlib. No third-party deps.
|
|
24
|
+
- Python 3.8+ supported (the embedded release-pack verifier runs
|
|
25
|
+
on even older interpreters, but this package targets 3.8+ to
|
|
26
|
+
match the CLI's tarfile filter='data' fallback path).
|
|
27
|
+
- Source modules: cli.py + mcp.py (upstream mirrors) plus the
|
|
28
|
+
package-native local_board.py, verifier.py, workspaces.py,
|
|
29
|
+
policy.py, verify_pack.py, chain_gate.py.
|
|
30
|
+
|
|
31
|
+
Source-of-truth provenance:
|
|
32
|
+
The canonical copies of cli.py + mcp.py live at
|
|
33
|
+
`packages/api/src/conductor/{cli,mcp}.py` in the upstream repo.
|
|
34
|
+
THIS package's copies are MIRRORS — when the upstream files
|
|
35
|
+
change, mirror the change here too. A drift-guard test in the
|
|
36
|
+
upstream repo (packages/api/tests/test_conductor_cli_mirror.py
|
|
37
|
+
— added alongside this package) sha256-compares the two copies
|
|
38
|
+
and fails CI if they diverge. (Known drift to reconcile at next
|
|
39
|
+
upstream sync: mcp.py SERVER_VERSION "0.5.0" vs package 0.1.0.)
|
|
40
|
+
The remaining modules are package-native — this package is their
|
|
41
|
+
canonical home.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
__version__ = "0.1.0"
|
|
45
|
+
|
|
46
|
+
__all__ = ["__version__"]
|