tractum 0.5.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.
Files changed (176) hide show
  1. tractum-0.5.0/.env.example +39 -0
  2. tractum-0.5.0/.gitattributes +39 -0
  3. tractum-0.5.0/.github/ISSUE_TEMPLATE/bug_report.yml +89 -0
  4. tractum-0.5.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
  5. tractum-0.5.0/.github/ISSUE_TEMPLATE/feature_request.yml +64 -0
  6. tractum-0.5.0/.github/ISSUE_TEMPLATE/security_report.md +38 -0
  7. tractum-0.5.0/.github/workflows/ci.yml +59 -0
  8. tractum-0.5.0/.github/workflows/docs.yml +76 -0
  9. tractum-0.5.0/.github/workflows/gitleaks.yml +24 -0
  10. tractum-0.5.0/.github/workflows/publish.yml +75 -0
  11. tractum-0.5.0/.gitignore +88 -0
  12. tractum-0.5.0/CODE_OF_CONDUCT.md +77 -0
  13. tractum-0.5.0/CONTRIBUTING.md +138 -0
  14. tractum-0.5.0/LICENSE +113 -0
  15. tractum-0.5.0/PKG-INFO +397 -0
  16. tractum-0.5.0/PRD.md +51 -0
  17. tractum-0.5.0/QUICKSTART.md +97 -0
  18. tractum-0.5.0/README.md +334 -0
  19. tractum-0.5.0/SECURITY.md +85 -0
  20. tractum-0.5.0/TESTLOG.md +132 -0
  21. tractum-0.5.0/api/__init__.py +5 -0
  22. tractum-0.5.0/api/agents/__init__.py +20 -0
  23. tractum-0.5.0/api/agents/deployment.py +82 -0
  24. tractum-0.5.0/api/agents/models.py +65 -0
  25. tractum-0.5.0/api/agents/router.py +137 -0
  26. tractum-0.5.0/api/agents/service.py +185 -0
  27. tractum-0.5.0/api/billing/__init__.py +25 -0
  28. tractum-0.5.0/api/config.py +75 -0
  29. tractum-0.5.0/api/database.py +75 -0
  30. tractum-0.5.0/api/main.py +143 -0
  31. tractum-0.5.0/api/middleware.py +86 -0
  32. tractum-0.5.0/api/orchestration.py +157 -0
  33. tractum-0.5.0/api/platform-deprecated/README.md +73 -0
  34. tractum-0.5.0/api/platform-deprecated/billing/__init__.py +6 -0
  35. tractum-0.5.0/api/platform-deprecated/billing/models.py +102 -0
  36. tractum-0.5.0/api/platform-deprecated/billing/router.py +100 -0
  37. tractum-0.5.0/api/platform-deprecated/billing/service.py +170 -0
  38. tractum-0.5.0/api/platform-deprecated/gateway/__init__.py +4 -0
  39. tractum-0.5.0/api/platform-deprecated/gateway/client.py +116 -0
  40. tractum-0.5.0/api/platform-deprecated/templates/__init__.py +6 -0
  41. tractum-0.5.0/api/platform-deprecated/templates/models.py +58 -0
  42. tractum-0.5.0/api/platform-deprecated/templates/router.py +86 -0
  43. tractum-0.5.0/api/platform-deprecated/templates/service.py +213 -0
  44. tractum-0.5.0/api/platform-deprecated/tenants/__init__.py +6 -0
  45. tractum-0.5.0/api/platform-deprecated/tenants/models.py +70 -0
  46. tractum-0.5.0/api/platform-deprecated/tenants/router.py +94 -0
  47. tractum-0.5.0/api/platform-deprecated/tenants/service.py +154 -0
  48. tractum-0.5.0/api/state.py +32 -0
  49. tractum-0.5.0/api/templates/__init__.py +25 -0
  50. tractum-0.5.0/api/tenants/__init__.py +25 -0
  51. tractum-0.5.0/assets/newell-badge.png +0 -0
  52. tractum-0.5.0/assets/og/tractum-og.png +0 -0
  53. tractum-0.5.0/benchmarks/Dockerfile +60 -0
  54. tractum-0.5.0/benchmarks/README.md +57 -0
  55. tractum-0.5.0/benchmarks/run.sh +68 -0
  56. tractum-0.5.0/dashboard/.npmrc +1 -0
  57. tractum-0.5.0/dashboard/app/dashboard/agents/page.tsx +108 -0
  58. tractum-0.5.0/dashboard/app/dashboard/billing/page.tsx +150 -0
  59. tractum-0.5.0/dashboard/app/dashboard/layout.tsx +29 -0
  60. tractum-0.5.0/dashboard/app/dashboard/page.tsx +123 -0
  61. tractum-0.5.0/dashboard/app/dashboard/settings/page.tsx +106 -0
  62. tractum-0.5.0/dashboard/app/dashboard/templates/page.tsx +91 -0
  63. tractum-0.5.0/dashboard/app/dashboard/tenants/page.tsx +123 -0
  64. tractum-0.5.0/dashboard/app/docs/page.tsx +67 -0
  65. tractum-0.5.0/dashboard/app/globals.css +141 -0
  66. tractum-0.5.0/dashboard/app/layout.tsx +49 -0
  67. tractum-0.5.0/dashboard/app/page.tsx +70 -0
  68. tractum-0.5.0/dashboard/app/providers.tsx +38 -0
  69. tractum-0.5.0/dashboard/components/deploy-agent-modal.tsx +269 -0
  70. tractum-0.5.0/dashboard/components/header.tsx +47 -0
  71. tractum-0.5.0/dashboard/components/sidebar.tsx +83 -0
  72. tractum-0.5.0/dashboard/components/theme-provider.tsx +75 -0
  73. tractum-0.5.0/dashboard/components/ui/badge.tsx +30 -0
  74. tractum-0.5.0/dashboard/components/ui/button.tsx +44 -0
  75. tractum-0.5.0/dashboard/components/ui/card.tsx +48 -0
  76. tractum-0.5.0/dashboard/components/ui/table.tsx +61 -0
  77. tractum-0.5.0/dashboard/lib/api-client.ts +98 -0
  78. tractum-0.5.0/dashboard/lib/store.ts +24 -0
  79. tractum-0.5.0/dashboard/lib/types.ts +108 -0
  80. tractum-0.5.0/dashboard/lib/utils.ts +6 -0
  81. tractum-0.5.0/dashboard/next-env.d.ts +5 -0
  82. tractum-0.5.0/dashboard/next.config.js +6 -0
  83. tractum-0.5.0/dashboard/package-lock.json +7026 -0
  84. tractum-0.5.0/dashboard/package.json +36 -0
  85. tractum-0.5.0/dashboard/postcss.config.js +5 -0
  86. tractum-0.5.0/dashboard/tsconfig.json +27 -0
  87. tractum-0.5.0/docker-compose.yml +60 -0
  88. tractum-0.5.0/docs/ARCHITECTURE.md +567 -0
  89. tractum-0.5.0/docs/CHANGELOG.md +311 -0
  90. tractum-0.5.0/docs/DEPLOYMENT.md +442 -0
  91. tractum-0.5.0/docs/DEPRECATION.md +195 -0
  92. tractum-0.5.0/docs/NAMING.md +117 -0
  93. tractum-0.5.0/docs/PARALLEL_APPROACHES.md +134 -0
  94. tractum-0.5.0/docs/PORT_AUTHORITY.md +165 -0
  95. tractum-0.5.0/docs/THREAT-MODEL.md +128 -0
  96. tractum-0.5.0/docs/TRACTUM_TOOL.md +218 -0
  97. tractum-0.5.0/docs/adapters.md +287 -0
  98. tractum-0.5.0/docs/api-reference.md +146 -0
  99. tractum-0.5.0/docs/apple-touch-icon.png +0 -0
  100. tractum-0.5.0/docs/assets/favicon.svg +9 -0
  101. tractum-0.5.0/docs/assets/logo.svg +15 -0
  102. tractum-0.5.0/docs/benchmarks.md +122 -0
  103. tractum-0.5.0/docs/concepts.md +252 -0
  104. tractum-0.5.0/docs/configuration.md +281 -0
  105. tractum-0.5.0/docs/coordinator.md +132 -0
  106. tractum-0.5.0/docs/examples.md +187 -0
  107. tractum-0.5.0/docs/faq.md +115 -0
  108. tractum-0.5.0/docs/favicon-32.png +0 -0
  109. tractum-0.5.0/docs/favicon-512.png +0 -0
  110. tractum-0.5.0/docs/favicon.ico +0 -0
  111. tractum-0.5.0/docs/index.md +161 -0
  112. tractum-0.5.0/docs/mcp-demo.md +180 -0
  113. tractum-0.5.0/docs/mcp-server.md +182 -0
  114. tractum-0.5.0/docs/overrides/assets/nmoji-button.png +0 -0
  115. tractum-0.5.0/docs/overrides/main.html +115 -0
  116. tractum-0.5.0/docs/quickstart.md +136 -0
  117. tractum-0.5.0/docs/streaming-events.md +146 -0
  118. tractum-0.5.0/docs/stylesheets/extra.css +536 -0
  119. tractum-0.5.0/docs/transparency-log.md +108 -0
  120. tractum-0.5.0/docs/transports.md +119 -0
  121. tractum-0.5.0/docs/troubleshooting.md +126 -0
  122. tractum-0.5.0/examples/buzz_consensus_demo.py +225 -0
  123. tractum-0.5.0/examples/buzz_wire_event_v030.json +18 -0
  124. tractum-0.5.0/examples/buzz_wire_publish.py +205 -0
  125. tractum-0.5.0/examples/consensus_demo.py +127 -0
  126. tractum-0.5.0/examples/coordinator_demo.py +94 -0
  127. tractum-0.5.0/examples/crewai_adapter_demo.py +125 -0
  128. tractum-0.5.0/examples/killer_demo.py +797 -0
  129. tractum-0.5.0/examples/killer_demo_results.md +398 -0
  130. tractum-0.5.0/examples/langgraph_adapter_demo.py +123 -0
  131. tractum-0.5.0/examples/maf_adapter_demo.py +151 -0
  132. tractum-0.5.0/examples/mcp_demo.py +249 -0
  133. tractum-0.5.0/examples/quickstart.py +94 -0
  134. tractum-0.5.0/examples/transparency_demo.py +168 -0
  135. tractum-0.5.0/infra/docker-compose.yml +68 -0
  136. tractum-0.5.0/mkdocs.yml +128 -0
  137. tractum-0.5.0/pyproject.toml +143 -0
  138. tractum-0.5.0/scripts/__init__.py +1 -0
  139. tractum-0.5.0/scripts/generate_og.py +175 -0
  140. tractum-0.5.0/scripts/port_authority.py +252 -0
  141. tractum-0.5.0/test_connection.py +74 -0
  142. tractum-0.5.0/tests/conftest.py +14 -0
  143. tractum-0.5.0/tests/test_adversarial.py +796 -0
  144. tractum-0.5.0/tests/test_agent_statements.py +411 -0
  145. tractum-0.5.0/tests/test_consensus.py +365 -0
  146. tractum-0.5.0/tests/test_coordinator.py +147 -0
  147. tractum-0.5.0/tests/test_crewai_adapter.py +230 -0
  148. tractum-0.5.0/tests/test_curt_link.py +481 -0
  149. tractum-0.5.0/tests/test_langgraph_adapter.py +417 -0
  150. tractum-0.5.0/tests/test_maf_adapter.py +466 -0
  151. tractum-0.5.0/tests/test_nostr.py +237 -0
  152. tractum-0.5.0/tests/test_server.py +177 -0
  153. tractum-0.5.0/tests/test_signing.py +176 -0
  154. tractum-0.5.0/tests/test_signing_pq.py +142 -0
  155. tractum-0.5.0/tests/test_transparency.py +394 -0
  156. tractum-0.5.0/tractum/__init__.py +81 -0
  157. tractum-0.5.0/tractum/adapters/__init__.py +7 -0
  158. tractum-0.5.0/tractum/adapters/crewai.py +334 -0
  159. tractum-0.5.0/tractum/adapters/langgraph.py +273 -0
  160. tractum-0.5.0/tractum/adapters/maf.py +317 -0
  161. tractum-0.5.0/tractum/agent.py +235 -0
  162. tractum-0.5.0/tractum/consensus.py +333 -0
  163. tractum-0.5.0/tractum/coordinator.py +370 -0
  164. tractum-0.5.0/tractum/curt_link.py +511 -0
  165. tractum-0.5.0/tractum/events.py +55 -0
  166. tractum-0.5.0/tractum/runtime.py +191 -0
  167. tractum-0.5.0/tractum/server.py +321 -0
  168. tractum-0.5.0/tractum/signing.py +568 -0
  169. tractum-0.5.0/tractum/signing_pq.py +77 -0
  170. tractum-0.5.0/tractum/swarm.py +369 -0
  171. tractum-0.5.0/tractum/tools/__init__.py +26 -0
  172. tractum-0.5.0/tractum/tools/base.py +73 -0
  173. tractum-0.5.0/tractum/tools/mcp.py +103 -0
  174. tractum-0.5.0/tractum/tools/tractum.py +190 -0
  175. tractum-0.5.0/tractum/transparency.py +326 -0
  176. tractum-0.5.0/tractum/transports.py +257 -0
@@ -0,0 +1,39 @@
1
+ # Tractum Environment Configuration
2
+
3
+ # API Settings
4
+ CLAUDWAY_API_HOST=0.0.0.0
5
+ CLAUDWAY_API_PORT=8000
6
+ CLAUDWAY_DEBUG=true
7
+
8
+ # Database
9
+ CLAUDWAY_DATABASE_URL=postgresql+asyncpg://tractum:tractum@localhost:5432/tractum
10
+
11
+ # Redis
12
+ CLAUDWAY_REDIS_URL=redis://localhost:6379/0
13
+
14
+ # Claude-Flow
15
+ CLAUDWAY_CLAUDE_FLOW_URL=http://localhost:8080
16
+ CLAUDWAY_CLAUDE_FLOW_API_KEY=
17
+
18
+ # NATS
19
+ CLAUDWAY_NATS_URL=nats://localhost:4222
20
+ CLAUDWAY_NATS_USER=
21
+ CLAUDWAY_NATS_PASSWORD=
22
+
23
+ # JWT / Auth
24
+ CLAUDWAY_SECRET_KEY=change-this-to-a-random-string-in-production
25
+ CLAUDWAY_ALGORITHM=HS256
26
+ CLAUDWAY_ACCESS_TOKEN_EXPIRE_MINUTES=30
27
+
28
+ # Stripe (Billing)
29
+ CLAUDWAY_STRIPE_API_KEY=sk_test_your_stripe_key_here
30
+ CLAUDWAY_STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret_here
31
+ CLAUDWAY_STRIPE_PRICE_ID_PRO=price_your_pro_price_id
32
+ CLAUDWAY_STRIPE_PRICE_ID_ENTERPRISE=price_your_enterprise_price_id
33
+
34
+ # Rate Limiting
35
+ CLAUDWAY_RATE_LIMIT_REQUESTS=100
36
+ CLAUDWAY_RATE_LIMIT_PERIOD=60
37
+
38
+ # Anthropic
39
+ CLAUDWAY_ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here
@@ -0,0 +1,39 @@
1
+ # Normalize line endings: LF in repo, LF in working copy.
2
+ # Ends the "LF will be replaced by CRLF" warnings.
3
+ * text=auto eol=lf
4
+
5
+ # Explicit text types
6
+ *.md text eol=lf
7
+ *.json text eol=lf
8
+ *.js text eol=lf
9
+ *.ts text eol=lf
10
+ *.tsx text eol=lf
11
+ *.jsx text eol=lf
12
+ *.css text eol=lf
13
+ *.html text eol=lf
14
+ *.yml text eol=lf
15
+ *.yaml text eol=lf
16
+ *.toml text eol=lf
17
+ *.sh text eol=lf
18
+ *.py text eol=lf
19
+ *.go text eol=lf
20
+ *.rs text eol=lf
21
+ *.txt text eol=lf
22
+
23
+ # Binaries — never touch
24
+ *.png binary
25
+ *.jpg binary
26
+ *.jpeg binary
27
+ *.gif binary
28
+ *.webp binary
29
+ *.svg text eol=lf
30
+ *.ico binary
31
+ *.pdf binary
32
+ *.mp4 binary
33
+ *.mov binary
34
+ *.mp3 binary
35
+ *.wav binary
36
+ *.zip binary
37
+ *.gz binary
38
+ *.7z binary
39
+
@@ -0,0 +1,89 @@
1
+ name: Bug report
2
+ description: Report something that's broken in Tractum.
3
+ labels: ["bug", "needs-triage"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for taking the time to file a bug.
9
+
10
+ **Security vulnerability?** Do not use this template. Follow the
11
+ private reporting process in
12
+ [SECURITY.md](https://github.com/JordanNewell/tractum/blob/main/SECURITY.md)
13
+ instead — public issues risk exposing unpatched flaws.
14
+
15
+ - type: textarea
16
+ id: summary
17
+ attributes:
18
+ label: Summary
19
+ description: One paragraph. What did you expect, and what happened instead?
20
+ validations:
21
+ required: true
22
+
23
+ - type: textarea
24
+ id: reproducer
25
+ attributes:
26
+ label: Minimal reproducer
27
+ description: The smallest self-contained code that triggers the bug. Paste a single Python file or a transcript.
28
+ placeholder: |
29
+ from tractum import Swarm, SwarmConfig, AgentConfig, Task
30
+ ...
31
+ validations:
32
+ required: true
33
+
34
+ - type: input
35
+ id: version
36
+ attributes:
37
+ label: Tractum version
38
+ placeholder: "0.3.2 (or commit SHA if installed editable)"
39
+ validations:
40
+ required: true
41
+
42
+ - type: input
43
+ id: python
44
+ attributes:
45
+ label: Python version
46
+ placeholder: "3.12.5"
47
+ validations:
48
+ required: true
49
+
50
+ - type: input
51
+ id: os
52
+ attributes:
53
+ label: Operating system
54
+ placeholder: "Ubuntu 24.04 / macOS 14 / Windows 11"
55
+ validations:
56
+ required: true
57
+
58
+ - type: dropdown
59
+ id: extras
60
+ attributes:
61
+ label: Extras installed
62
+ description: Which `tractum[...]` extras did you install? Select all that apply.
63
+ multiple: true
64
+ options:
65
+ - "[mcp]"
66
+ - "[nostr]"
67
+ - "[pq]"
68
+ - "[langgraph]"
69
+ - "[maf]"
70
+ - "[crewai]"
71
+ - "[benchmark]"
72
+ - "[runner]"
73
+ - "[persist]"
74
+ - "[docs]"
75
+ - "[dev]"
76
+ - "none / base only"
77
+
78
+ - type: textarea
79
+ id: logs
80
+ attributes:
81
+ label: Logs / traceback
82
+ description: Paste the full traceback or relevant log lines. Wrap in triple backticks. No API keys.
83
+ render: shell
84
+
85
+ - type: textarea
86
+ id: notes
87
+ attributes:
88
+ label: Anything else?
89
+ description: Workarounds you tried, related issues, context.
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security vulnerability (read SECURITY.md, do NOT use a public issue)
4
+ url: https://github.com/JordanNewell/tractum/blob/main/SECURITY.md
5
+ about: Found a security issue? Follow the private reporting process in SECURITY.md.
6
+ - name: Docs site
7
+ url: https://jordannewell.github.io/tractum/
8
+ about: API reference, transports, adapters, and benchmarks.
9
+ - name: Questions / discussions
10
+ url: https://github.com/JordanNewell/tractum/discussions
11
+ about: Usage questions and design discussion go in Discussions, not Issues.
@@ -0,0 +1,64 @@
1
+ name: Feature request
2
+ description: Suggest an idea for Tractum.
3
+ labels: ["enhancement", "needs-triage"]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Thanks for the idea. Tractum is intentionally lean — every new
9
+ runtime dependency needs to justify its weight. The strongest
10
+ feature requests tie back to the core wedge (verifiable
11
+ multi-agent consensus) and work without bloating the base install.
12
+
13
+ - type: textarea
14
+ id: problem
15
+ attributes:
16
+ label: The problem
17
+ description: What are you trying to do that Tractum doesn't let you do today? What's the current workaround, and why is it painful?
18
+ validations:
19
+ required: true
20
+
21
+ - type: textarea
22
+ id: proposal
23
+ attributes:
24
+ label: The proposal
25
+ description: What would the API look like? Sketch the smallest version that solves your problem.
26
+ placeholder: |
27
+ from tractum import ...
28
+ validations:
29
+ required: true
30
+
31
+ - type: textarea
32
+ id: alternatives
33
+ attributes:
34
+ label: Alternatives considered
35
+ description: What else did you try? Why didn't it work?
36
+
37
+ - type: dropdown
38
+ id: scope
39
+ attributes:
40
+ label: Area
41
+ multiple: true
42
+ options:
43
+ - Core SDK (tractum.swarm, .consensus, .coordinator)
44
+ - Signing / receipts (tractum.signing)
45
+ - Transports (JSON / W3C VC / Nostr)
46
+ - Adapters (LangGraph, future: CrewAI, A2A, AutoGen)
47
+ - MCP server (tractum.server)
48
+ - Tool layer (tractum.tools)
49
+ - Docs / examples
50
+ - Other
51
+
52
+ - type: checkboxes
53
+ id: lean
54
+ attributes:
55
+ label: Lean-install check
56
+ description: A reminder that the base `pip install tractum` stays at 4 deps.
57
+ options:
58
+ - label: This feature can ship without adding a base-install dependency (or it belongs in an optional extra).
59
+ required: true
60
+
61
+ - type: textarea
62
+ id: context
63
+ attributes:
64
+ label: Additional context
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: Security report (read me first)
3
+ about: Found a security vulnerability? This is NOT the right place — read below.
4
+ title: "[SECURITY] DO NOT POST DETAILS HERE"
5
+ labels: ["security", "do-not-disclose"]
6
+ ---
7
+
8
+ ---
9
+
10
+ :rotating_light: **Do not post vulnerability details in this issue.**
11
+
12
+ :rotating_light: This issue tracker is **public**. Anything you write here
13
+ is visible to the world and indexed forever — including by anyone who would
14
+ exploit the bug before a fix ships.
15
+
16
+ ## Report vulnerabilities privately
17
+
18
+ Follow the private reporting process described in
19
+ **[SECURITY.md](https://github.com/JordanNewell/tractum/blob/main/SECURITY.md)**:
20
+
21
+ 1. Email **<security@jordannewell.com>** with a description, reproducer,
22
+ and affected versions.
23
+ 2. If you have a PGP key, encrypt the report. (The project's PGP fingerprint
24
+ will be published in SECURITY.md once generated.)
25
+ 3. Do **not** open a public GitHub issue, blog post, or tweet until a fix
26
+ has shipped and coordinated disclosure is complete.
27
+
28
+ See [SECURITY.md](https://github.com/JordanNewell/tractum/blob/main/SECURITY.md)
29
+ for the full scope, SLA, threat model link, and disclosure policy.
30
+
31
+ ## After you've emailed
32
+
33
+ You can open a placeholder issue here — **without vulnerability details** —
34
+ saying "I sent a security report via email on YYYY-MM-DD, awaiting ack." That
35
+ lets us track the timeline publicly without exposing anything.
36
+
37
+ This template exists only to redirect you. Anything posted here with actual
38
+ vulnerability details will be deleted on sight.
@@ -0,0 +1,59 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, "feat/**"]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ os: [ubuntu-latest, windows-latest]
16
+ python-version: ["3.11", "3.12", "3.13"]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - name: Set up Python ${{ matrix.python-version }}
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+ cache: pip
26
+
27
+ - name: Install package + dev deps
28
+ run: |
29
+ python -m pip install --upgrade pip
30
+ pip install -e ".[mcp,pq,dev]"
31
+
32
+ - name: Lint (ruff)
33
+ run: ruff check tractum/ tests/ examples/
34
+
35
+ - name: Test (pytest)
36
+ run: pytest tests/ -v
37
+
38
+ build:
39
+ needs: test
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ - uses: actions/setup-python@v5
44
+ with:
45
+ python-version: "3.12"
46
+ cache: pip
47
+ - run: pip install --upgrade pip build
48
+ - name: Build wheel
49
+ run: python -m build --wheel
50
+ - name: Verify wheel contents
51
+ run: |
52
+ python -c "
53
+ import zipfile, glob
54
+ w = glob.glob('dist/*.whl')[0]
55
+ names = zipfile.ZipFile(w).namelist()
56
+ assert 'tractum/__init__.py' in names, 'missing tractum package'
57
+ assert 'tractum/server.py' in names, 'missing MCP server'
58
+ print('wheel OK:', w)
59
+ "
@@ -0,0 +1,76 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - "docs/**"
8
+ - "mkdocs.yml"
9
+ - "tractum/**"
10
+ - "pyproject.toml"
11
+ - ".github/workflows/docs.yml"
12
+ pull_request:
13
+ branches: [main]
14
+ paths:
15
+ - "docs/**"
16
+ - "mkdocs.yml"
17
+ - "tractum/**"
18
+ - "pyproject.toml"
19
+ - ".github/workflows/docs.yml"
20
+ # Allow manual runs from the Actions tab.
21
+ workflow_dispatch:
22
+
23
+ permissions:
24
+ contents: read
25
+ pages: write
26
+ id-token: write
27
+
28
+ # Only one docs build/deploy at a time per ref. Newer runs cancel older ones.
29
+ concurrency:
30
+ group: pages
31
+ cancel-in-progress: true
32
+
33
+ jobs:
34
+ build:
35
+ name: Build docs site
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+
40
+ - name: Set up Python
41
+ uses: actions/setup-python@v5
42
+ with:
43
+ python-version: "3.12"
44
+ cache: pip
45
+ cache-dependency-path: pyproject.toml
46
+
47
+ - name: Install Tractum + docs extras
48
+ run: |
49
+ python -m pip install --upgrade pip
50
+ pip install -e ".[docs]"
51
+
52
+ - name: Build site (strict)
53
+ # `--strict` fails the build on broken mkdocstrings references,
54
+ # missing imports, or any warning — catches API drift at CI time.
55
+ run: mkdocs build --strict
56
+
57
+ - name: Upload Pages artifact
58
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
59
+ uses: actions/upload-pages-artifact@v3
60
+ with:
61
+ path: site
62
+
63
+ deploy:
64
+ name: Deploy to GitHub Pages
65
+ # Only deploy on pushes to main — PR builds verify the build passes,
66
+ # they don't publish.
67
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
68
+ needs: build
69
+ runs-on: ubuntu-latest
70
+ environment:
71
+ name: github-pages
72
+ url: ${{ steps.deployment.outputs.page_url }}
73
+ steps:
74
+ - name: Deploy to GitHub Pages
75
+ id: deployment
76
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,24 @@
1
+ name: Gitleaks
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ gitleaks:
14
+ name: Secret scan (gitleaks)
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ with:
19
+ fetch-depth: 0
20
+
21
+ - name: Run gitleaks
22
+ uses: gitleaks/gitleaks-action@v2
23
+ env:
24
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,75 @@
1
+ name: Publish
2
+
3
+ # Fires on v* tags (the convention from harbormasterd). Also exposes a
4
+ # manual workflow_dispatch trigger so we can re-publish an existing tag
5
+ # if needed (e.g., first time after setting up the secret).
6
+ on:
7
+ push:
8
+ tags: ['v*']
9
+ workflow_dispatch:
10
+ inputs:
11
+ tag:
12
+ description: 'Tag to publish (e.g. v0.3.0)'
13
+ required: true
14
+ type: string
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ build:
21
+ name: Build wheel + sdist
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - name: Checkout (tag from input, or the pushed tag)
25
+ uses: actions/checkout@v4
26
+ with:
27
+ ref: ${{ inputs.tag || github.ref }}
28
+
29
+ - uses: actions/setup-python@v5
30
+ with:
31
+ python-version: '3.12'
32
+ cache: pip
33
+
34
+ - name: Install build tooling
35
+ run: pip install --upgrade pip build twine
36
+
37
+ - name: Build wheel + sdist
38
+ run: python -m build
39
+
40
+ - name: Verify wheel contents
41
+ run: |
42
+ python -c "
43
+ import zipfile, glob
44
+ w = sorted(glob.glob('dist/*.whl'))[-1]
45
+ names = zipfile.ZipFile(w).namelist()
46
+ assert 'tractum/__init__.py' in names, 'missing tractum package'
47
+ assert 'tractum/server.py' in names, 'missing MCP server'
48
+ print('wheel OK:', w)
49
+ "
50
+
51
+ - name: Check metadata
52
+ run: twine check dist/*
53
+
54
+ - name: Upload artifacts
55
+ uses: actions/upload-artifact@v4
56
+ with:
57
+ name: dist
58
+ path: dist/
59
+
60
+ publish:
61
+ name: Publish to PyPI
62
+ needs: build
63
+ runs-on: ubuntu-latest
64
+ environment: pypi # matches PyPI Trusted Publishing config
65
+ permissions:
66
+ id-token: write # required for OIDC trusted publishing
67
+ steps:
68
+ - name: Download artifacts
69
+ uses: actions/download-artifact@v4
70
+ with:
71
+ name: dist
72
+ path: dist/
73
+
74
+ - name: Publish to PyPI
75
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,88 @@
1
+ # Claude
2
+ .claude/
3
+
4
+ # ZCode agent state (never commit — may contain live API keys)
5
+ .zcode/
6
+
7
+ # Python
8
+ __pycache__/
9
+ *.py[cod]
10
+ *$py.class
11
+ *.so
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ /lib/
20
+ /lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ .venv/
29
+ venv/
30
+ ENV/
31
+ env/
32
+
33
+ # Environment
34
+ .env
35
+ .env.local
36
+ .env.*.local
37
+
38
+ # IDE
39
+ .vscode/
40
+ .idea/
41
+ *.swp
42
+ *.swo
43
+ *~
44
+
45
+ # OS
46
+ .DS_Store
47
+ Thumbs.db
48
+
49
+ # Logs
50
+ *.log
51
+ logs/
52
+
53
+ # Database
54
+ *.db
55
+ *.sqlite
56
+ *.sqlite3
57
+
58
+ # Node (dashboard)
59
+ node_modules/
60
+ .next/
61
+ out/
62
+
63
+ # Testing
64
+ .coverage
65
+ .pytest_cache/
66
+ htmlcov/
67
+ .tox/
68
+
69
+ # Docs build output (deployed via GitHub Pages, not committed)
70
+ site/
71
+
72
+ # Docker
73
+ .dockerignore
74
+
75
+ # Session handoff (NOT for public repo - contains flip strategy)
76
+ HANDOFF.md
77
+
78
+ # Benchmark competitive research (NOT for public repo)
79
+ BENCHMARK-RESEARCH.md
80
+
81
+ # Benchmark raw output (regenerable, large, noisy)
82
+ benchmarks/raw/
83
+
84
+ # Benchmark appliance report output (regenerable; lands in the compose volume)
85
+ benchmarks/out/
86
+
87
+ # OG image working files (only the canonical tractum-og.png is committed)
88
+ assets/og/tractum-og-v030*.png
@@ -0,0 +1,77 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
6
+
7
+ We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
8
+
9
+ ## Our Standards
10
+
11
+ Examples of behavior that contributes to a positive environment for our community include:
12
+
13
+ * Demonstrating empathy and kindness toward other people
14
+ * Being respectful of differing opinions, viewpoints, and experiences
15
+ * Giving and gracefully accepting constructive feedback
16
+ * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
17
+ * Focusing on what is best not just for us as individuals, but for the overall community
18
+
19
+ Examples of unacceptable behavior include:
20
+
21
+ * The use of sexualized language or imagery, and sexual attention or advances of any kind
22
+ * Trolling, insulting or derogatory comments, and personal or political attacks
23
+ * Public or private harassment
24
+ * Publishing others' private information, such as a physical or email address, without their explicit permission
25
+ * Other conduct which could reasonably be considered inappropriate in a professional setting
26
+
27
+ ## Enforcement Responsibilities
28
+
29
+ Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
30
+
31
+ Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
32
+
33
+ ## Scope
34
+
35
+ This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
36
+
37
+ ## Enforcement
38
+
39
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at **security@jordannewell.com** (general conduct reports; for security vulnerabilities specifically, follow the private process in [SECURITY.md](SECURITY.md)). All complaints will be reviewed and investigated promptly and fairly.
40
+
41
+ All community leaders are obligated to respect the privacy and security of the reporter of any incident.
42
+
43
+ ## Enforcement Guidelines
44
+
45
+ Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
46
+
47
+ ### 1. Correction
48
+
49
+ **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
50
+
51
+ **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
52
+
53
+ ### 2. Warning
54
+
55
+ **Community Impact**: A violation through a single incident or series of actions.
56
+
57
+ **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
58
+
59
+ ### 3. Temporary Ban
60
+
61
+ **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
62
+
63
+ **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
64
+
65
+ ### 4. Permanent Ban
66
+
67
+ **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
68
+
69
+ **Consequence**: A permanent ban from any sort of public interaction within the community.
70
+
71
+ ## Attribution
72
+
73
+ This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
74
+
75
+ Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.
76
+
77
+ For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.