dynamitecircle 2.0.4__tar.gz → 2.3.1__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.
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/.gitignore +4 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/CHANGELOG.md +237 -5
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/PKG-INFO +38 -11
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/README.md +37 -10
- dynamitecircle-2.3.1/contracts/README.md +10 -0
- dynamitecircle-2.3.1/contracts/openapi.json +9103 -0
- dynamitecircle-2.3.1/contracts/operation-map.json +636 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/manifest.json +4 -10
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/py/SKILL.md +3 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/py/config.json +1 -1
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/py/dc.py +14 -1
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/pyproject.toml +5 -1
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/server.json +2 -2
- dynamitecircle-2.3.1/ts/README.md +179 -0
- dynamitecircle-2.3.1/ts/examples/basic.ts +14 -0
- dynamitecircle-2.3.1/ts/package-lock.json +33 -0
- dynamitecircle-2.3.1/ts/package.json +53 -0
- dynamitecircle-2.3.1/ts/src/client.ts +475 -0
- dynamitecircle-2.3.1/ts/src/errors.ts +49 -0
- dynamitecircle-2.3.1/ts/src/index.ts +41 -0
- dynamitecircle-2.3.1/ts/src/types.ts +245 -0
- dynamitecircle-2.3.1/ts/src/version.ts +3 -0
- dynamitecircle-2.3.1/ts/tests/client.test.mjs +247 -0
- dynamitecircle-2.3.1/ts/tsconfig.json +17 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/LICENSE +0 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/docs/mcp-info.md +0 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/docs/skill-info.md +0 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/py/.env.dc.example +0 -0
- {dynamitecircle-2.0.4 → dynamitecircle-2.3.1}/py/requirements.txt +0 -0
|
@@ -13,10 +13,14 @@ __pycache__/
|
|
|
13
13
|
.venv*
|
|
14
14
|
*.egg-info/
|
|
15
15
|
dist/
|
|
16
|
+
|
|
17
|
+
# MCPB bundle — built in CI (publish.yml) + attached to releases; never commit
|
|
18
|
+
*.mcpb
|
|
16
19
|
build/
|
|
17
20
|
|
|
18
21
|
# Node (in case any tool ships a sub-app)
|
|
19
22
|
node_modules/
|
|
23
|
+
.npm-cache/
|
|
20
24
|
|
|
21
25
|
# OS
|
|
22
26
|
.DS_Store
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
All notable changes to the **`dc` client repo** (formerly `dc-official` /
|
|
4
4
|
`dc-py`) are listed here. The version
|
|
5
5
|
numbers below track `DC_API_VERSION` in [`py/dc.py`](py/dc.py), which is
|
|
6
|
-
deliberately aligned with the DC Member API
|
|
7
|
-
verified against.
|
|
8
|
-
bumps
|
|
6
|
+
deliberately aligned with the DC Member API contract version it was last
|
|
7
|
+
verified against. Python, TypeScript, and the API contract are released
|
|
8
|
+
together on purpose. Patch bumps from the API are silent; minor or major bumps
|
|
9
|
+
surface a one-shot stderr warning when an installed client falls behind.
|
|
9
10
|
|
|
10
11
|
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
11
12
|
and the project follows [Semantic Versioning](https://semver.org/) for
|
|
@@ -14,8 +15,238 @@ the public Python API surface (`dc.DC`, `dc.DCError`, `dc.Result`,
|
|
|
14
15
|
|
|
15
16
|
---
|
|
16
17
|
|
|
18
|
+
## [v2.3.1] - 2026-07-14
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- **`virtual-event-attendees`** — list the attendees (RSVP `yes`/`maybe`) of a Live Call: `dc virtual-event-attendees <sessionID> [--limit N] [--cursor TOKEN]`. Mirrors `event-attendees` — same paginated envelope, surfaces the true `total` (under `extra`) + `cursor`. TS: `client.virtualEvents.attendees(sessionID, { limit, cursor })`.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- Realigned `DC_API_VERSION` to the deployed Member API contract **2.3.1**. The server added the Live Call attendees endpoint plus cursor pagination and a true aggregate `total` on `GET /events/:eventID/attendees`; the pinned OpenAPI snapshot + operation-map were updated to match (no other client command changes since 2.0.4).
|
|
25
|
+
|
|
26
|
+
## [v2.0.4] - 2026-06-16
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- list in the Official MCP Registry (b2f1d26)
|
|
31
|
+
- one-click install badges, VS Code docs, and .mcpb bundle (6108d51)
|
|
32
|
+
- MCP tool annotations and structured output (9b62eb0)
|
|
33
|
+
- snake_case MCP tool names and fields (f4573f8)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [v2.0.1] - 2026-06-16
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- v2.0.1 — formal field names (breaking) to match Member API rename (2bb90f2)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## [v1.23.3] - 2026-06-13
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- dc.py help — sponsors/attendee-agenda/agendas are public (not ticket-gated) (9181cc8)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## [v1.22.6] - 2026-06-05
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
|
|
54
|
+
- explicit profile-update/calendar parsers + offline test suite (aecaca1)
|
|
55
|
+
- accept top-level --note on trip-create and trip-update (26a9c61)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## [v1.22.5] - 2026-06-03
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
|
|
62
|
+
- accept declared args= flags on parser-less commands (MCP bridge) (267fad2)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## [v1.22.4] - 2026-05-27
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- align client with api 1.22.4 (3fe5f91)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
## [v1.22.3] - 2026-05-24
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
|
|
76
|
+
- 6 follow commands + Follows SKILL.md section (no version bump — pending server deploy) (5f19db6)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
## [v1.20.1] - 2026-05-22
|
|
80
|
+
|
|
81
|
+
_No customer-facing changes in this release._
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
## [v1.19.3] - 2026-05-21
|
|
85
|
+
|
|
86
|
+
_No customer-facing changes in this release._
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
## [v1.19.2] - 2026-05-21
|
|
90
|
+
|
|
91
|
+
_No customer-facing changes in this release._
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
## [v1.17.3] - 2026-05-20
|
|
95
|
+
|
|
96
|
+
_No customer-facing changes in this release._
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
## [v1.17.2] - 2026-05-20
|
|
100
|
+
|
|
101
|
+
_No customer-facing changes in this release._
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
## [v1.17.1] - 2026-05-20
|
|
105
|
+
|
|
106
|
+
_No customer-facing changes in this release._
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
## [v1.17.0] - 2026-05-20
|
|
110
|
+
|
|
111
|
+
_No customer-facing changes in this release._
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
## [v1.16.2] - 2026-05-20
|
|
115
|
+
|
|
116
|
+
_No customer-facing changes in this release._
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
## [v1.14.1] - 2026-05-19
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- dc-py rooms — path-segment URLs + trim type enum (be09d76)
|
|
124
|
+
- dc 1.14.0 — room + room-messages; rooms enum adds direct/group (a7b8ea9)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
## [v1.13.1] - 2026-05-19
|
|
128
|
+
|
|
129
|
+
### Fixed
|
|
130
|
+
|
|
131
|
+
- stabilize MCP stdio transport (21c8022)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
## [v1.12.5] - 2026-05-14
|
|
135
|
+
|
|
136
|
+
_No customer-facing changes in this release._
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
## [v1.12.1] - 2026-05-08
|
|
140
|
+
|
|
141
|
+
_No customer-facing changes in this release._
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
## [v1.11.1] - 2026-05-07
|
|
145
|
+
|
|
146
|
+
_No customer-facing changes in this release._
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
## [v1.10.5] - 2026-05-07
|
|
150
|
+
|
|
151
|
+
_No customer-facing changes in this release._
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
## [v1.10.4] - 2026-05-04
|
|
155
|
+
|
|
156
|
+
_No customer-facing changes in this release._
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
## [v1.10.2] - 2026-05-04
|
|
160
|
+
|
|
161
|
+
_No customer-facing changes in this release._
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
## [v1.9.1] - 2026-05-04
|
|
165
|
+
|
|
166
|
+
_No customer-facing changes in this release._
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
## [v1.8.1] - 2026-05-04
|
|
170
|
+
|
|
171
|
+
_No customer-facing changes in this release._
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
## [v1.7.1] - 2026-05-03
|
|
175
|
+
|
|
176
|
+
_No customer-facing changes in this release._
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
## [v1.6.3] - 2026-05-02
|
|
180
|
+
|
|
181
|
+
### Fixed
|
|
182
|
+
|
|
183
|
+
- rewrite CLI smoke step + bump to 1.6.3 (b098dfe)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
## [v1.6.2] - 2026-05-02
|
|
187
|
+
|
|
188
|
+
### Added
|
|
189
|
+
|
|
190
|
+
- PyPI packaging (`dynamitecircle`) + publish workflow (77aefa4)
|
|
191
|
+
- add Gemini CLI pre-approval (.gemini/settings.json) (fd09acb)
|
|
192
|
+
- pre-approve dc MCP server + skill + CLI for Claude Code & Codex (4d234ec)
|
|
193
|
+
- flip canonical paths to /dc/ and /docs/, rename dc_skill.py → dc.py (42aa541)
|
|
194
|
+
|
|
195
|
+
### Changed
|
|
196
|
+
|
|
197
|
+
- monorepo restructure — repo renamed to dc, Python client moved to /py/ (80d7166)
|
|
198
|
+
- SKILL_VERSION → DC_API_VERSION; deduplicate Quick start sections in README (a1e99c6)
|
|
199
|
+
- User-Agent → 'dc-py/<version>' (e1b5a6a)
|
|
200
|
+
- rename Skill base class → Runtime; SkillError → DCError; SkillResult → Result (06a2c44)
|
|
201
|
+
- rename public class DCSkill → DC, rename doc files (bc9d04f)
|
|
202
|
+
|
|
203
|
+
### Fixed
|
|
204
|
+
|
|
205
|
+
- use only-include + bypass-selection so sdist ships py/ (c42abed)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
## [v1.6.1] - 2026-05-02
|
|
209
|
+
|
|
210
|
+
### Added
|
|
211
|
+
|
|
212
|
+
- add manifest.json + LICENSE; bump to 1.6.1 (8e949d6)
|
|
213
|
+
- add dc/ symlink shortcut + drop hardcoded command counts (96bc6a3)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
## [v1.6.0] - 2026-04-30
|
|
217
|
+
|
|
218
|
+
_No customer-facing changes in this release._
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
## [v1.5.0] - 2026-04-30
|
|
222
|
+
|
|
223
|
+
### Added
|
|
224
|
+
|
|
225
|
+
- add announcements + event-extras commands (10 new) (f4f901f)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
## [v1.3.0] - 2026-04-30
|
|
229
|
+
|
|
230
|
+
### Added
|
|
231
|
+
|
|
232
|
+
- add 429 retry handling and `limits` command (02bf994)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
## [v1.0.0] - 2026-04-30
|
|
236
|
+
|
|
237
|
+
_No customer-facing changes in this release._
|
|
238
|
+
|
|
239
|
+
|
|
17
240
|
## [Unreleased]
|
|
18
241
|
|
|
242
|
+
### Added
|
|
243
|
+
|
|
244
|
+
- TypeScript npm library scaffold under `ts/`, published as
|
|
245
|
+
`@dynamitecircle/dc`, with a hand-written SDK surface for every pinned
|
|
246
|
+
Member API operation. It is a library only: no CLI and no MCP server.
|
|
247
|
+
- Pinned OpenAPI contract under `contracts/` plus an explicit operation map
|
|
248
|
+
that validates API operation → Python command → TypeScript method parity.
|
|
249
|
+
|
|
19
250
|
## [2.0.4] – 2026-06-16
|
|
20
251
|
|
|
21
252
|
### Added
|
|
@@ -277,7 +508,7 @@ cutover — were server-only with no client surface change, so no client release
|
|
|
277
508
|
|
|
278
509
|
No client-side change required — the `hint` field on 404 payloads
|
|
279
510
|
is already surfaced by `DCError`. Bump kept in lockstep with the
|
|
280
|
-
deployed
|
|
511
|
+
deployed API contract version per the triple-lock rule.
|
|
281
512
|
|
|
282
513
|
---
|
|
283
514
|
|
|
@@ -1121,7 +1352,8 @@ Tag exists but no PyPI release. Replaced by 1.6.3.
|
|
|
1121
1352
|
|
|
1122
1353
|
---
|
|
1123
1354
|
|
|
1124
|
-
[Unreleased]: https://github.com/dynamitecircle/dc/compare/v2.
|
|
1355
|
+
[Unreleased]: https://github.com/dynamitecircle/dc/compare/v2.3.1...HEAD
|
|
1356
|
+
[2.3.1]: https://github.com/dynamitecircle/dc/compare/v2.0.4...v2.3.1
|
|
1125
1357
|
[2.0.4]: https://github.com/dynamitecircle/dc/compare/v2.0.1...v2.0.4
|
|
1126
1358
|
[2.0.1]: https://github.com/dynamitecircle/dc/releases/tag/v2.0.1
|
|
1127
1359
|
[1.23.3]: https://github.com/dynamitecircle/dc/releases/tag/v1.23.3
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dynamitecircle
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.1
|
|
4
4
|
Summary: Official Python client for the public Dynamite Circle Member API. CLI, library, Agent Skill, and MCP server in one file.
|
|
5
5
|
Project-URL: Homepage, https://github.com/dynamitecircle/dc
|
|
6
6
|
Project-URL: Repository, https://github.com/dynamitecircle/dc
|
|
@@ -51,14 +51,18 @@ Provides-Extra: test
|
|
|
51
51
|
Requires-Dist: pytest>=7.0; extra == 'test'
|
|
52
52
|
Description-Content-Type: text/markdown
|
|
53
53
|
|
|
54
|
-
# DC Official
|
|
54
|
+
# DC Official Clients
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Official clients for the [Dynamite Circle Member API](https://www.dynamitecircle.com/developers/) — your own profile, trips, events, virtual events, tickets, invites, inbox, rooms, chapters, places lookup, and the weekly locator digest.
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
The Python client is a single self-contained file. Zero dependencies (stdlib only). Works as a CLI, a Python library, **and** a [Model Context Protocol](https://modelcontextprotocol.io) server. Compatible with Claude Code, Claude Desktop, Codex CLI, Gemini CLI, Cursor, GitHub Copilot, and every other Agent Skills / MCP-compatible tool.
|
|
59
|
+
|
|
60
|
+
The TypeScript client is an npm library for trusted server-side TypeScript projects. It is not a CLI and not an MCP server.
|
|
59
61
|
|
|
60
62
|
```
|
|
61
|
-
py/dc.py
|
|
63
|
+
py/dc.py ← Python: CLI + library + MCP server
|
|
64
|
+
ts/src/ ← TypeScript: npm library
|
|
65
|
+
contracts/ ← pinned OpenAPI contract shared by both clients
|
|
62
66
|
```
|
|
63
67
|
|
|
64
68
|
## About the Dynamite Circle
|
|
@@ -153,6 +157,21 @@ The same `dc.py` file is shipped as **four** integrations — pick whichever fit
|
|
|
153
157
|
|
|
154
158
|
The `mcp` package is **lazy-imported** — Agent Skill / CLI / Python-library users never need it.
|
|
155
159
|
|
|
160
|
+
### TypeScript npm library
|
|
161
|
+
|
|
162
|
+
For TypeScript projects, use the package under [`ts/`](ts/):
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
import { DC } from "@dynamitecircle/dc";
|
|
166
|
+
|
|
167
|
+
const dc = new DC({ apiKey: process.env.DC_API_KEY! });
|
|
168
|
+
|
|
169
|
+
const profile = await dc.profile.get();
|
|
170
|
+
const trips = await dc.trips.list({ limit: 10 });
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Keep `dk_...` API keys server-side. Do not ship a member API key in browser JavaScript.
|
|
174
|
+
|
|
156
175
|
### Don't want to install anything? Use the hosted MCP
|
|
157
176
|
|
|
158
177
|
The DC Member API is **also a hosted MCP server** — a remote endpoint you point your AI app at, with nothing to clone, install, or update:
|
|
@@ -437,7 +456,7 @@ The full live reference for the DC Member API — every endpoint, parameter, and
|
|
|
437
456
|
|
|
438
457
|
## Staying up to date
|
|
439
458
|
|
|
440
|
-
The DC Member API ships new endpoints and refinements regularly. This skill is the official client and we update it whenever the API changes. **Plan for updates** — the skill will warn you on stderr the first time a request returns
|
|
459
|
+
The DC Member API ships new endpoints and refinements regularly. This skill is the official client and we update it whenever the API changes. **Plan for updates** — the skill will warn you on stderr the first time a request returns an `X-API-Version` newer than `DC_API_VERSION`, and major-version bumps may break older clients.
|
|
441
460
|
|
|
442
461
|
**The no-maintenance option:** if you use the [hosted MCP](#hosted-mcp-no-install-always-current) (`https://api.dynamitecircle.com/mcp`), there's nothing to update — the server always runs the current API version. The strategies below apply only to the **local client**.
|
|
443
462
|
|
|
@@ -544,7 +563,7 @@ Best for: CI environments, ephemeral containers, scripted setups.
|
|
|
544
563
|
|
|
545
564
|
- **Stay current.** The DC Member API ships new endpoints regularly and the client mirrors them; running stale means missing features and (eventually) compatibility warnings on stderr.
|
|
546
565
|
- **Run `self-test` after every update.** Five seconds, catches breakage.
|
|
547
|
-
- **Watch stderr the first time you call any command after updating.** The version-mismatch warning prints once per process when the
|
|
566
|
+
- **Watch stderr the first time you call any command after updating.** The version-mismatch warning prints once per process when the API is on a newer minor/major.
|
|
548
567
|
- **Major version bumps may be backwards-incompatible.** Read the release notes on the GitHub repo before pulling across a major boundary.
|
|
549
568
|
|
|
550
569
|
## Rate limits
|
|
@@ -590,7 +609,16 @@ dc/
|
|
|
590
609
|
│ ├── .env.dc.example # template
|
|
591
610
|
│ └── .env.dc # gitignored (created by `setup`)
|
|
592
611
|
│
|
|
593
|
-
|
|
612
|
+
├── ts/ # ← TypeScript npm library (@dynamitecircle/dc)
|
|
613
|
+
│ ├── src/ # hand-written SDK surface
|
|
614
|
+
│ ├── tests/ # contract + request behavior tests
|
|
615
|
+
│ ├── examples/ # TypeScript usage examples
|
|
616
|
+
│ ├── package.json
|
|
617
|
+
│ └── tsconfig.json
|
|
618
|
+
│
|
|
619
|
+
├── contracts/ # pinned API contract shared by clients
|
|
620
|
+
│ ├── openapi.json # committed snapshot of /openapi.json
|
|
621
|
+
│ └── operation-map.json # OpenAPI op → Python command → TS method
|
|
594
622
|
│
|
|
595
623
|
├── DC/
|
|
596
624
|
│ └── SKILL.md → ../py/SKILL.md # human-friendly skill path (symlink)
|
|
@@ -616,9 +644,9 @@ dc/
|
|
|
616
644
|
|
|
617
645
|
### About the layout
|
|
618
646
|
|
|
619
|
-
This is a **monorepo**. The Python client lives at `/py
|
|
647
|
+
This is a **monorepo**. The Python client lives at `/py/`; the TypeScript client lives at `/ts/`. Both wrap the same DC Member API and are validated against the pinned contract in `/contracts/`. `/docs/` is shared. The dotfile-prefixed directories (`.claude/`, `.agents/`, `.gemini/`) exist because AI tools auto-discover skills from those specific paths — they're kept hidden but each one **symlinks (or points) straight to the canonical folder**, so you only edit files in one place. Edit `py/dc.py` and Claude Code, Codex, and Gemini CLI all see the same file via their respective discovery directories. Gemini CLI also reads `.agents/skills/` as an alias, so we don't need a redundant `.gemini/skills/` symlink.
|
|
620
648
|
|
|
621
|
-
If you're adding
|
|
649
|
+
If you're adding Python code or skill docs, edit `py/` (or `docs/`) directly. If you're adding TypeScript library code, edit `ts/`. The discovery folders take care of themselves.
|
|
622
650
|
|
|
623
651
|
### Pre-approval out of the box
|
|
624
652
|
|
|
@@ -631,4 +659,3 @@ This repo is maintained by the Dynamite Circle team. It's read-only for the publ
|
|
|
631
659
|
## License
|
|
632
660
|
|
|
633
661
|
[MIT](LICENSE) — see the LICENSE file for the full text.
|
|
634
|
-
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
# DC Official
|
|
1
|
+
# DC Official Clients
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Official clients for the [Dynamite Circle Member API](https://www.dynamitecircle.com/developers/) — your own profile, trips, events, virtual events, tickets, invites, inbox, rooms, chapters, places lookup, and the weekly locator digest.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The Python client is a single self-contained file. Zero dependencies (stdlib only). Works as a CLI, a Python library, **and** a [Model Context Protocol](https://modelcontextprotocol.io) server. Compatible with Claude Code, Claude Desktop, Codex CLI, Gemini CLI, Cursor, GitHub Copilot, and every other Agent Skills / MCP-compatible tool.
|
|
6
|
+
|
|
7
|
+
The TypeScript client is an npm library for trusted server-side TypeScript projects. It is not a CLI and not an MCP server.
|
|
6
8
|
|
|
7
9
|
```
|
|
8
|
-
py/dc.py
|
|
10
|
+
py/dc.py ← Python: CLI + library + MCP server
|
|
11
|
+
ts/src/ ← TypeScript: npm library
|
|
12
|
+
contracts/ ← pinned OpenAPI contract shared by both clients
|
|
9
13
|
```
|
|
10
14
|
|
|
11
15
|
## About the Dynamite Circle
|
|
@@ -100,6 +104,21 @@ The same `dc.py` file is shipped as **four** integrations — pick whichever fit
|
|
|
100
104
|
|
|
101
105
|
The `mcp` package is **lazy-imported** — Agent Skill / CLI / Python-library users never need it.
|
|
102
106
|
|
|
107
|
+
### TypeScript npm library
|
|
108
|
+
|
|
109
|
+
For TypeScript projects, use the package under [`ts/`](ts/):
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { DC } from "@dynamitecircle/dc";
|
|
113
|
+
|
|
114
|
+
const dc = new DC({ apiKey: process.env.DC_API_KEY! });
|
|
115
|
+
|
|
116
|
+
const profile = await dc.profile.get();
|
|
117
|
+
const trips = await dc.trips.list({ limit: 10 });
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Keep `dk_...` API keys server-side. Do not ship a member API key in browser JavaScript.
|
|
121
|
+
|
|
103
122
|
### Don't want to install anything? Use the hosted MCP
|
|
104
123
|
|
|
105
124
|
The DC Member API is **also a hosted MCP server** — a remote endpoint you point your AI app at, with nothing to clone, install, or update:
|
|
@@ -384,7 +403,7 @@ The full live reference for the DC Member API — every endpoint, parameter, and
|
|
|
384
403
|
|
|
385
404
|
## Staying up to date
|
|
386
405
|
|
|
387
|
-
The DC Member API ships new endpoints and refinements regularly. This skill is the official client and we update it whenever the API changes. **Plan for updates** — the skill will warn you on stderr the first time a request returns
|
|
406
|
+
The DC Member API ships new endpoints and refinements regularly. This skill is the official client and we update it whenever the API changes. **Plan for updates** — the skill will warn you on stderr the first time a request returns an `X-API-Version` newer than `DC_API_VERSION`, and major-version bumps may break older clients.
|
|
388
407
|
|
|
389
408
|
**The no-maintenance option:** if you use the [hosted MCP](#hosted-mcp-no-install-always-current) (`https://api.dynamitecircle.com/mcp`), there's nothing to update — the server always runs the current API version. The strategies below apply only to the **local client**.
|
|
390
409
|
|
|
@@ -491,7 +510,7 @@ Best for: CI environments, ephemeral containers, scripted setups.
|
|
|
491
510
|
|
|
492
511
|
- **Stay current.** The DC Member API ships new endpoints regularly and the client mirrors them; running stale means missing features and (eventually) compatibility warnings on stderr.
|
|
493
512
|
- **Run `self-test` after every update.** Five seconds, catches breakage.
|
|
494
|
-
- **Watch stderr the first time you call any command after updating.** The version-mismatch warning prints once per process when the
|
|
513
|
+
- **Watch stderr the first time you call any command after updating.** The version-mismatch warning prints once per process when the API is on a newer minor/major.
|
|
495
514
|
- **Major version bumps may be backwards-incompatible.** Read the release notes on the GitHub repo before pulling across a major boundary.
|
|
496
515
|
|
|
497
516
|
## Rate limits
|
|
@@ -537,7 +556,16 @@ dc/
|
|
|
537
556
|
│ ├── .env.dc.example # template
|
|
538
557
|
│ └── .env.dc # gitignored (created by `setup`)
|
|
539
558
|
│
|
|
540
|
-
|
|
559
|
+
├── ts/ # ← TypeScript npm library (@dynamitecircle/dc)
|
|
560
|
+
│ ├── src/ # hand-written SDK surface
|
|
561
|
+
│ ├── tests/ # contract + request behavior tests
|
|
562
|
+
│ ├── examples/ # TypeScript usage examples
|
|
563
|
+
│ ├── package.json
|
|
564
|
+
│ └── tsconfig.json
|
|
565
|
+
│
|
|
566
|
+
├── contracts/ # pinned API contract shared by clients
|
|
567
|
+
│ ├── openapi.json # committed snapshot of /openapi.json
|
|
568
|
+
│ └── operation-map.json # OpenAPI op → Python command → TS method
|
|
541
569
|
│
|
|
542
570
|
├── DC/
|
|
543
571
|
│ └── SKILL.md → ../py/SKILL.md # human-friendly skill path (symlink)
|
|
@@ -563,9 +591,9 @@ dc/
|
|
|
563
591
|
|
|
564
592
|
### About the layout
|
|
565
593
|
|
|
566
|
-
This is a **monorepo**. The Python client lives at `/py
|
|
594
|
+
This is a **monorepo**. The Python client lives at `/py/`; the TypeScript client lives at `/ts/`. Both wrap the same DC Member API and are validated against the pinned contract in `/contracts/`. `/docs/` is shared. The dotfile-prefixed directories (`.claude/`, `.agents/`, `.gemini/`) exist because AI tools auto-discover skills from those specific paths — they're kept hidden but each one **symlinks (or points) straight to the canonical folder**, so you only edit files in one place. Edit `py/dc.py` and Claude Code, Codex, and Gemini CLI all see the same file via their respective discovery directories. Gemini CLI also reads `.agents/skills/` as an alias, so we don't need a redundant `.gemini/skills/` symlink.
|
|
567
595
|
|
|
568
|
-
If you're adding
|
|
596
|
+
If you're adding Python code or skill docs, edit `py/` (or `docs/`) directly. If you're adding TypeScript library code, edit `ts/`. The discovery folders take care of themselves.
|
|
569
597
|
|
|
570
598
|
### Pre-approval out of the box
|
|
571
599
|
|
|
@@ -578,4 +606,3 @@ This repo is maintained by the Dynamite Circle team. It's read-only for the publ
|
|
|
578
606
|
## License
|
|
579
607
|
|
|
580
608
|
[MIT](LICENSE) — see the LICENSE file for the full text.
|
|
581
|
-
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# DC Member API Contract
|
|
2
|
+
|
|
3
|
+
This directory pins the API contract used to validate the official clients.
|
|
4
|
+
|
|
5
|
+
- `openapi.json` is a committed snapshot of `https://api.dynamitecircle.com/openapi.json`.
|
|
6
|
+
- `operation-map.json` maps each OpenAPI operation to the Python command and
|
|
7
|
+
TypeScript SDK method that covers it.
|
|
8
|
+
|
|
9
|
+
CI should read this pinned contract, not the live API. Live drift checks can be
|
|
10
|
+
run manually during releases, then the pinned snapshot is updated intentionally.
|