dynamitecircle 1.6.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-1.6.1/.gitignore +29 -0
- dynamitecircle-1.6.1/CHANGELOG.md +234 -0
- dynamitecircle-1.6.1/LICENSE +21 -0
- dynamitecircle-1.6.1/PKG-INFO +543 -0
- dynamitecircle-1.6.1/README.md +492 -0
- dynamitecircle-1.6.1/docs/mcp-info.md +206 -0
- dynamitecircle-1.6.1/docs/skill-info.md +257 -0
- dynamitecircle-1.6.1/manifest.json +56 -0
- dynamitecircle-1.6.1/py/.env.dc.example +4 -0
- dynamitecircle-1.6.1/py/SKILL.md +384 -0
- dynamitecircle-1.6.1/py/config.json +10 -0
- dynamitecircle-1.6.1/py/dc.py +1901 -0
- dynamitecircle-1.6.1/py/requirements.txt +8 -0
- dynamitecircle-1.6.1/pyproject.toml +90 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# API keys — never commit
|
|
2
|
+
.env
|
|
3
|
+
.env.local
|
|
4
|
+
.env.*.local
|
|
5
|
+
.env.dc
|
|
6
|
+
**/.env.dc
|
|
7
|
+
|
|
8
|
+
# Python
|
|
9
|
+
__pycache__/
|
|
10
|
+
*.pyc
|
|
11
|
+
*.pyo
|
|
12
|
+
.venv/
|
|
13
|
+
.venv*
|
|
14
|
+
*.egg-info/
|
|
15
|
+
dist/
|
|
16
|
+
build/
|
|
17
|
+
|
|
18
|
+
# Node (in case any tool ships a sub-app)
|
|
19
|
+
node_modules/
|
|
20
|
+
|
|
21
|
+
# OS
|
|
22
|
+
.DS_Store
|
|
23
|
+
Thumbs.db
|
|
24
|
+
|
|
25
|
+
# Editor
|
|
26
|
+
.vscode/*
|
|
27
|
+
!.vscode/extensions.json
|
|
28
|
+
!.vscode/settings.json
|
|
29
|
+
.idea/
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the **`dc` client repo** (formerly `dc-official` /
|
|
4
|
+
`dc-py`) are listed here. The version
|
|
5
|
+
numbers below track `DC_API_VERSION` in [`py/dc.py`](py/dc.py), which is
|
|
6
|
+
deliberately aligned with the DC Member API server version it was last
|
|
7
|
+
verified against. Patch bumps from the server are silent; minor or major
|
|
8
|
+
bumps surface a one-shot stderr warning when this client falls behind.
|
|
9
|
+
|
|
10
|
+
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
11
|
+
and the project follows [Semantic Versioning](https://semver.org/) for
|
|
12
|
+
the public Python API surface (`dc.DC`, `dc.DCError`, `dc.Result`,
|
|
13
|
+
`dc.Runtime`).
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## [Unreleased]
|
|
18
|
+
|
|
19
|
+
Structural / repo-layout changes since 1.6.1 — no API surface changes,
|
|
20
|
+
no `DC_API_VERSION` bump (the version constant tracks the API, not the
|
|
21
|
+
file structure).
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- **Repo renamed** — `dynamitecircle/dc-py` → `dynamitecircle/dc`. The
|
|
26
|
+
repo is now a **monorepo** so future Go / Node / Rust clients can sit
|
|
27
|
+
alongside the Python one without a separate repo per language.
|
|
28
|
+
- **Python client moved to `/py/`** — `/dc/dc.py` → `/py/dc.py`,
|
|
29
|
+
`/dc/SKILL.md` → `/py/SKILL.md`, etc. The `.claude/skills/dc` and
|
|
30
|
+
`.agents/skills/dc` symlinks now point at `../../py` so AI-tool
|
|
31
|
+
auto-discovery is unchanged. (Future siblings will live at `/go/`,
|
|
32
|
+
`/node/`, `/rs/`.)
|
|
33
|
+
- **Layout** — canonical files moved out of dotfile-prefixed directories
|
|
34
|
+
so they're visible in `ls`. Python client is at `/py/` and the
|
|
35
|
+
design docs are `/docs/`. `.claude/skills/dc/`, `.agents/skills/dc/`,
|
|
36
|
+
`.claude/docs/`, and `.agents/docs/` are now symlinks pointing at the
|
|
37
|
+
canonical folders. AI-tool auto-discovery still works through the
|
|
38
|
+
symlinks; you only edit files in one place.
|
|
39
|
+
- **File rename** — `dc/dc_skill.py` → `dc/dc.py` (later moved to
|
|
40
|
+
`py/dc.py` in the monorepo flip; the `_skill` suffix was redundant
|
|
41
|
+
once the folder itself is the skill).
|
|
42
|
+
- **Class renames** — public Python surface refreshed:
|
|
43
|
+
- `DCSkill` → `DC`
|
|
44
|
+
- `Skill` (base) → `Runtime`
|
|
45
|
+
- `SkillError` → `DCError`
|
|
46
|
+
- `SkillResult` → `Result`
|
|
47
|
+
- Old: `from dc_skill import DCSkill; DCSkill().profile()`
|
|
48
|
+
- New: `from dc import DC; DC().profile()`
|
|
49
|
+
- **Doc renames** for symmetry inside `docs/`:
|
|
50
|
+
- `docs/skill-conventions.md` → `docs/skill-info.md`
|
|
51
|
+
- `docs/mcp.md` → `docs/mcp-info.md`
|
|
52
|
+
- **User-Agent** — `dc-official-skill/<version>` →
|
|
53
|
+
`dc-py/<version>`. Reserves a clean naming pattern for future ports
|
|
54
|
+
(`dc-go`, `dc-node`, `dc-rs`).
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- **PyPI packaging** — `pyproject.toml` at repo root (hatchling backend)
|
|
59
|
+
builds the `dynamitecircle` package from `py/dc.py`. The single file
|
|
60
|
+
ships in the wheel as `dynamitecircle.py`, so installs give users
|
|
61
|
+
`from dynamitecircle import DC` and a `dc` console script on PATH.
|
|
62
|
+
Optional `[mcp]` extra installs the MCP server dependency. Version is
|
|
63
|
+
read at build time from `DC_API_VERSION` so it stays in lockstep with
|
|
64
|
+
the repo's existing version constant.
|
|
65
|
+
- **`main()` entry point** in `py/dc.py` — extracted from the
|
|
66
|
+
`if __name__ == "__main__"` block so the `dc` console script
|
|
67
|
+
(`pip install dynamitecircle` → `dc help`) can target it directly.
|
|
68
|
+
- **GitHub Actions publish workflow** at `.github/workflows/publish.yml`
|
|
69
|
+
— builds wheel + sdist on every push, smoke-tests installs across
|
|
70
|
+
Python 3.9 + 3.12 on Ubuntu / macOS / Windows, publishes to PyPI on
|
|
71
|
+
every `v*` tag via OIDC trusted publishing (no API tokens stored),
|
|
72
|
+
then auto-creates a GitHub Release with notes pulled from CHANGELOG.md.
|
|
73
|
+
- **README rewrite** — opens with "DC Official Client" + a paragraph
|
|
74
|
+
about what the Dynamite Circle actually is (founded 2011, ~1,500
|
|
75
|
+
founders, $100k+ revenue requirement) with inline links to
|
|
76
|
+
dynamitecircle.com and the apply funnel, both UTM-tagged so we can
|
|
77
|
+
track inbound from this repo. Removes the "multi-language client suite"
|
|
78
|
+
framing — only the Python client exists today.
|
|
79
|
+
- **Pre-approval configs** for all three auto-discovery AI tools so users
|
|
80
|
+
don't get per-tool-call approval prompts when they open this repo:
|
|
81
|
+
- Claude Code: `.claude/settings.json` with `mcp__dc__*`,
|
|
82
|
+
`Skill(dc *)`, `enableAllProjectMcpServers: true`
|
|
83
|
+
- Codex CLI: `.codex/config.toml` with
|
|
84
|
+
`default_tools_approval_mode = "approve"`
|
|
85
|
+
- Gemini CLI: `.gemini/settings.json` with `trust: true`
|
|
86
|
+
- **`Agent Skill` row** in the README's "How it's exposed" table —
|
|
87
|
+
acknowledges the SKILL.md auto-discovery path that 90% of users will
|
|
88
|
+
actually use, alongside CLI / Python import / MCP server.
|
|
89
|
+
|
|
90
|
+
### Removed
|
|
91
|
+
|
|
92
|
+
- **Pin-to-commit guidance** from the README's "Update etiquette"
|
|
93
|
+
section — the API moves fast enough that pinning is anti-recommended.
|
|
94
|
+
- **Hardcoded command counts** ("28 commands", "29 commands") replaced
|
|
95
|
+
with "full Member API coverage" + a pointer to `help` for the live
|
|
96
|
+
list. Counts went stale every time we shipped.
|
|
97
|
+
- **`dk_<userID>_<random>` format string** replaced with `dk_<api-key>`
|
|
98
|
+
in user-facing docs — members shouldn't have to know the key's
|
|
99
|
+
internal structure.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## [1.6.1] – 2026-05-02
|
|
104
|
+
|
|
105
|
+
### Added
|
|
106
|
+
|
|
107
|
+
- **`manifest.json`** at the repo root — MCPB schema 0.3
|
|
108
|
+
([MCP 2025-11 spec](https://modelcontextprotocol.io/specification/2025-11-25/changelog)).
|
|
109
|
+
Carries `display_name`, `long_description`, `author`, `repository`,
|
|
110
|
+
`license`, `capabilities`, `compatibility`, `user_config` blocks.
|
|
111
|
+
Aligns the repo with the `.mcpb` bundle convention so we can ship
|
|
112
|
+
installable bundles later.
|
|
113
|
+
- **MIT `LICENSE`** at the repo root. Repo is private today, but the
|
|
114
|
+
license is in place if/when it opens up.
|
|
115
|
+
- **`dc/` symlink at the repo root** — shortcut pointing at
|
|
116
|
+
`.claude/skills/dc/` (later inverted in the unreleased layout flip,
|
|
117
|
+
but introduced here).
|
|
118
|
+
|
|
119
|
+
### Changed
|
|
120
|
+
|
|
121
|
+
- **`DC_API_VERSION`** bumped to 1.6.1 to match the deployed server API
|
|
122
|
+
release.
|
|
123
|
+
- **README's "Three integration modes" → "How it's exposed"** with
|
|
124
|
+
Agent Skill added as the primary integration.
|
|
125
|
+
- **Cross-platform** — explicit UTF-8 stdout/stderr reconfigure for
|
|
126
|
+
legacy Windows `cmd.exe`; chmod-on-Windows note in `setup`; README
|
|
127
|
+
"Platform support" section.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## [1.6.0] – 2026-04-30
|
|
132
|
+
|
|
133
|
+
### Added
|
|
134
|
+
|
|
135
|
+
- **MCP per-command JSON Schemas** — `@skill_command(args={...})` lets
|
|
136
|
+
each command declare typed input schemas (types, required, enums,
|
|
137
|
+
formats, descriptions). MCP clients now see rich autocomplete and
|
|
138
|
+
validation instead of a `additionalProperties: true` fallback.
|
|
139
|
+
- **`mcpSchemas` check** in `self-test` — fails if any command is
|
|
140
|
+
missing an `args=` schema, catching coverage drift.
|
|
141
|
+
- **Hive-style `emit()`** — ContextVar sink, `Result` wrapper. Commands
|
|
142
|
+
can call `Runtime.emit(...)` (or pass dict/list for auto-JSON
|
|
143
|
+
serialization) to send follow-up text to the calling agent. Surfaces
|
|
144
|
+
to CLI stderr, MCP TextContent, or `result.emitted` for Python.
|
|
145
|
+
JSON envelope `{ok, client, command, result, emitted}` when `--json`
|
|
146
|
+
is set with non-empty emit.
|
|
147
|
+
- **Version-mismatch warning** — `DC_API_VERSION` constant. Every request
|
|
148
|
+
sends `User-Agent: dc-py/<version>` and reads the server's
|
|
149
|
+
`X-API-Version` response header. `_VersionTracker` warns once per
|
|
150
|
+
process when the server is on a newer minor/major.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## [1.5.0] – 2026-04-30
|
|
155
|
+
|
|
156
|
+
### Added
|
|
157
|
+
|
|
158
|
+
- **Announcements** (2 commands):
|
|
159
|
+
- `announcements` — cursor-paginated mixed feed across visible
|
|
160
|
+
broadcast channels (DC, DCBKK, DCMEX, DC BLACK)
|
|
161
|
+
- `announcements-latest` — one most-recent announcement per channel
|
|
162
|
+
- **Event extras** — 8 commands gated by an event ticket:
|
|
163
|
+
- `event-schedule` — sessions grouped by day; wall-clock ISO time +
|
|
164
|
+
IANA timezone (NOT real UTC — read both fields together)
|
|
165
|
+
- `event-agenda` — your bookmarked sessions + joined meetups
|
|
166
|
+
- `event-meetups` — approved member-organized meetups
|
|
167
|
+
- `event-sponsors` — sponsors ordered by tier then display order
|
|
168
|
+
- `session-attendees` — who else bookmarked a session
|
|
169
|
+
- `meetup-attendees` — who else RSVP'd to a meetup
|
|
170
|
+
- `session-bookmark` — add/remove a session from your agenda
|
|
171
|
+
- `meetup-rsvp` — join/leave a meetup
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## [1.3.0] – 2026-04-30
|
|
176
|
+
|
|
177
|
+
### Added
|
|
178
|
+
|
|
179
|
+
- **`limits` command** — wraps `/profile/limits`. Returns effective
|
|
180
|
+
per-minute / per-day rate limits and current usage as JSON, so
|
|
181
|
+
scripts get a structured snapshot without parsing `X-RateLimit-*`
|
|
182
|
+
headers manually.
|
|
183
|
+
- **HTTP 429 retry** — `HttpClient` auto-retries on rate-limit responses.
|
|
184
|
+
Wait time parsed from `Retry-After` (RFC 7231, preferred), then
|
|
185
|
+
`X-RateLimit-Reset`, then "Try again in N seconds." regex from the
|
|
186
|
+
body, then a 60-second fallback. Configurable via class attributes
|
|
187
|
+
(`max_retries=1`, `max_retry_wait=120`, `fallback_retry_wait=60`).
|
|
188
|
+
Emits a friendly `Rate limited (HTTP 429) — waiting Ns before retry…`
|
|
189
|
+
message to stderr before sleeping; no silent multi-minute hangs.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## [1.0.0] – 2026-04-30
|
|
194
|
+
|
|
195
|
+
### Added
|
|
196
|
+
|
|
197
|
+
- **Initial scaffold** — `Dynamite-Circle-Builders/dc-official` private
|
|
198
|
+
repo created with the single-file Python client at
|
|
199
|
+
`.claude/skills/dc/dc_skill.py` (later moved to `dc/dc.py`).
|
|
200
|
+
- **28 commands** wrapping the public DC Member API — profile,
|
|
201
|
+
trips (CRUD + overlaps), events + RSVP, virtual events + RSVP,
|
|
202
|
+
tickets, invites, inbox, rooms, chapters, places lookup, locator
|
|
203
|
+
digest. Plus `setup` (writes API key to skill-local `.env.dc`) and
|
|
204
|
+
`self-test` (env + network + `/profile` end-to-end).
|
|
205
|
+
- **Three integration modes**:
|
|
206
|
+
- CLI (`python3 dc_skill.py <command>`) — stdlib only
|
|
207
|
+
- Python library (`from dc_skill import DCSkill`) — stdlib only
|
|
208
|
+
- MCP server (`dc_skill.py --mcp`) — `pip install mcp` (optional, lazy import)
|
|
209
|
+
- **Auto-discovery configs** for Claude Code (`.mcp.json`),
|
|
210
|
+
Codex CLI (`.codex/config.toml`), Gemini CLI (`GEMINI.md` symlink),
|
|
211
|
+
GitHub Copilot (`.github/copilot-instructions.md`), and the
|
|
212
|
+
`.agents/skills/` symlink for Codex skill discovery.
|
|
213
|
+
- **Output formats** — text (default, pretty JSON for dicts/lists),
|
|
214
|
+
`--json` (canonical machine-readable), `--python` (eval-safe `repr`).
|
|
215
|
+
- **Cursor pagination** envelope `{items, count, cursor, has_more}`
|
|
216
|
+
on every list-returning command. Non-paginated extras (e.g.
|
|
217
|
+
`totalUnread` on `inbox`) pass through under `extra`.
|
|
218
|
+
- **Hive-inspired conventions**: two-class pattern (`DC` public wrapper
|
|
219
|
+
+ `_DCCore` private helper), `@skill_command(name=, help=, parser=)`
|
|
220
|
+
decorator, space-form CLI flags, ArgHelpers + HttpClient utilities.
|
|
221
|
+
- **Cross-platform-safe** — every text-mode file op specifies
|
|
222
|
+
`encoding="utf-8"`, atomic env-file write via `.tmp` + `replace()`,
|
|
223
|
+
chmod 600 on `.env.dc` (no-op on Windows, documented).
|
|
224
|
+
- **No telemetry, no usage tracking, no error logging** — public-grade
|
|
225
|
+
design intentionally stripped of internal Hive concerns.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
[Unreleased]: https://github.com/dynamitecircle/dc/compare/v1.6.1...HEAD
|
|
230
|
+
[1.6.1]: https://github.com/dynamitecircle/dc/releases/tag/v1.6.1
|
|
231
|
+
[1.6.0]: https://github.com/dynamitecircle/dc/releases/tag/v1.6.0
|
|
232
|
+
[1.5.0]: https://github.com/dynamitecircle/dc/releases/tag/v1.5.0
|
|
233
|
+
[1.3.0]: https://github.com/dynamitecircle/dc/releases/tag/v1.3.0
|
|
234
|
+
[1.0.0]: https://github.com/dynamitecircle/dc/releases/tag/v1.0.0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dynamite Circle
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|