@vucinatim/agentic-devtools 0.1.0

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 (38) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +202 -0
  3. package/SECURITY.md +47 -0
  4. package/adapters/claude/namecheap/README.md +13 -0
  5. package/adapters/claude/npm/README.md +11 -0
  6. package/adapters/claude/railway/README.md +11 -0
  7. package/adapters/codex/namecheap/.codex-plugin/plugin.json +40 -0
  8. package/adapters/codex/namecheap/.mcp.json +21 -0
  9. package/adapters/codex/namecheap/SKILL.md +40 -0
  10. package/adapters/codex/npm/.codex-plugin/plugin.json +41 -0
  11. package/adapters/codex/npm/.mcp.json +18 -0
  12. package/adapters/codex/npm/SKILL.md +54 -0
  13. package/adapters/codex/railway/.codex-plugin/plugin.json +39 -0
  14. package/adapters/codex/railway/.mcp.json +20 -0
  15. package/adapters/codex/railway/SKILL.md +44 -0
  16. package/docs/README.md +14 -0
  17. package/docs/architecture.md +208 -0
  18. package/docs/auth-and-setup-guidelines.md +261 -0
  19. package/docs/migration-plan.md +55 -0
  20. package/docs/open-source-readiness.md +119 -0
  21. package/docs/publishing.md +211 -0
  22. package/docs/testing.md +61 -0
  23. package/docs/usage.md +144 -0
  24. package/package.json +78 -0
  25. package/src/cli.mjs +158 -0
  26. package/src/core/config-store.mjs +106 -0
  27. package/src/core/result.mjs +13 -0
  28. package/src/core/tool-registry.mjs +29 -0
  29. package/src/index.mjs +47 -0
  30. package/src/tools/namecheap/auth.mjs +429 -0
  31. package/src/tools/namecheap/client.mjs +655 -0
  32. package/src/tools/namecheap/mcp.mjs +298 -0
  33. package/src/tools/npm/auth.mjs +367 -0
  34. package/src/tools/npm/client.mjs +317 -0
  35. package/src/tools/npm/mcp.mjs +343 -0
  36. package/src/tools/railway/auth.mjs +402 -0
  37. package/src/tools/railway/client.mjs +388 -0
  38. package/src/tools/railway/mcp.mjs +282 -0
@@ -0,0 +1,208 @@
1
+ # Architecture
2
+
3
+ Agentic Devtools should be a small, professional open-source package for
4
+ agent-friendly developer integrations.
5
+
6
+ The core idea is simple:
7
+
8
+ - one package contains all tools
9
+ - each tool owns its service-specific client and schemas
10
+ - a shared registry exposes tools through MCP-first CLI execution
11
+ - host-specific integrations stay thin and replaceable
12
+
13
+ ## Package Strategy
14
+
15
+ Use one public npm package for now:
16
+
17
+ ```txt
18
+ @vucinatim/agentic-devtools
19
+ ```
20
+
21
+ This is the right default because the current tools have the same audience,
22
+ runtime, release cadence, and MCP shape. Separate packages would add release and
23
+ coordination overhead before the project has enough tool-specific complexity to
24
+ need it.
25
+
26
+ Split into separate packages only when one of these becomes true:
27
+
28
+ - a tool has a large dependency tree that should not ship to everyone
29
+ - a tool has a materially different runtime target
30
+ - a tool needs independent versioning because users depend on it separately
31
+ - the package grows enough that install size becomes a real problem
32
+
33
+ Until then, keep a single package and expose separate entrypoints.
34
+
35
+ ## Usage Model
36
+
37
+ The primary usage path is MCP execution through `npx`:
38
+
39
+ ```bash
40
+ npx -y @vucinatim/agentic-devtools mcp railway
41
+ npx -y @vucinatim/agentic-devtools mcp namecheap
42
+ npx -y @vucinatim/agentic-devtools mcp npm
43
+ ```
44
+
45
+ This keeps Agentic Devtools out of the user's application dependency tree.
46
+
47
+ Secondary paths:
48
+
49
+ - global CLI install for repeated terminal use
50
+ - package dependency install for users building custom automation
51
+
52
+ Account setup should follow the shared auth/setup model in
53
+ [Auth And Setup Guidelines](auth-and-setup-guidelines.md).
54
+
55
+ ## Target Layout
56
+
57
+ ```txt
58
+ agentic-devtools/
59
+ src/
60
+ cli.ts
61
+ index.ts
62
+ core/
63
+ config-store.ts
64
+ mcp-server.ts
65
+ result.ts
66
+ tool-registry.ts
67
+ tools/
68
+ namecheap/
69
+ auth.ts
70
+ client.ts
71
+ index.ts
72
+ mcp.ts
73
+ schemas.ts
74
+ railway/
75
+ auth.ts
76
+ client.ts
77
+ index.ts
78
+ mcp.ts
79
+ schemas.ts
80
+ npm/
81
+ auth.ts
82
+ client.ts
83
+ index.ts
84
+ mcp.ts
85
+ schemas.ts
86
+ adapters/
87
+ codex/
88
+ namecheap/
89
+ railway/
90
+ claude/
91
+ namecheap/
92
+ railway/
93
+ tests/
94
+ tools/
95
+ namecheap/
96
+ railway/
97
+ docs/
98
+ ```
99
+
100
+ The earlier `plugins/<tool>/src` bootstrap layout has been retired. The package
101
+ now has one source tree, one CLI, and one release flow.
102
+
103
+ ## Public API Shape
104
+
105
+ The package should expose MCP execution through the CLI first, then
106
+ programmatic imports for custom builders.
107
+
108
+ Example package surface:
109
+
110
+ ```json
111
+ {
112
+ "name": "@vucinatim/agentic-devtools",
113
+ "bin": {
114
+ "agentic-devtools": "./dist/cli.js"
115
+ },
116
+ "exports": {
117
+ ".": {
118
+ "types": "./dist/index.d.ts",
119
+ "import": "./dist/index.js"
120
+ },
121
+ "./namecheap": {
122
+ "types": "./dist/tools/namecheap/index.d.ts",
123
+ "import": "./dist/tools/namecheap/index.js"
124
+ },
125
+ "./railway": {
126
+ "types": "./dist/tools/railway/index.d.ts",
127
+ "import": "./dist/tools/railway/index.js"
128
+ }
129
+ }
130
+ }
131
+ ```
132
+
133
+ Example CLI usage:
134
+
135
+ ```bash
136
+ npx -y @vucinatim/agentic-devtools mcp namecheap
137
+ npx -y @vucinatim/agentic-devtools mcp railway
138
+ npx -y @vucinatim/agentic-devtools mcp npm
139
+ npx -y @vucinatim/agentic-devtools connect railway
140
+ npx @vucinatim/agentic-devtools auth-status railway
141
+ ```
142
+
143
+ ## Tool Boundaries
144
+
145
+ Each tool module should own:
146
+
147
+ - auth resolution for that service
148
+ - API client calls
149
+ - request and response schemas
150
+ - MCP tool registration for that service
151
+ - tests for API parsing, auth behavior, and dangerous edge cases
152
+
153
+ The shared core should own:
154
+
155
+ - local config file read/write helpers
156
+ - common tool-result formatting
157
+ - shared MCP server setup
158
+ - CLI routing
159
+ - registry lookup
160
+ - consistent error shape
161
+
162
+ The shared core should not know service-specific API details.
163
+
164
+ ## Write Operations
165
+
166
+ Default new integrations to read-only.
167
+
168
+ Add write tools only when the workflow has:
169
+
170
+ - explicit user intent
171
+ - narrow inputs
172
+ - a dry-run or preview path when possible
173
+ - clear idempotency behavior
174
+ - tests for no-op, duplicate, and failure cases
175
+
176
+ Railway should remain read-only until deployment, variable mutation, and service
177
+ changes have a proper confirmation model.
178
+
179
+ Namecheap already has DNS mutation tools. Those should continue to prefer
180
+ preserving existing state and should clearly label full-zone replacement as
181
+ destructive.
182
+
183
+ npm supports publishing operations, but GitHub Actions Trusted Publishing should
184
+ remain the preferred release path. Local npm publishing must default to dry-run
185
+ and require an exact confirmation string for real publishes.
186
+
187
+ ## Host Adapters
188
+
189
+ Codex and Claude adapters should be metadata and launch wrappers only.
190
+
191
+ Published host configs should prefer:
192
+
193
+ ```json
194
+ {
195
+ "command": "npx",
196
+ "args": ["-y", "@vucinatim/agentic-devtools", "mcp", "<tool>"]
197
+ }
198
+ ```
199
+
200
+ They should not duplicate:
201
+
202
+ - service clients
203
+ - GraphQL or REST calls
204
+ - mutation logic
205
+ - tool validation rules
206
+
207
+ If a host needs a custom shape, adapt at the edge and call the shared tool
208
+ module underneath.
@@ -0,0 +1,261 @@
1
+ # Auth And Setup Guidelines
2
+
3
+ Agentic Devtools should make account setup as low-friction as each provider
4
+ honestly allows.
5
+
6
+ The ideal user experience is:
7
+
8
+ ```bash
9
+ npx -y @vucinatim/agentic-devtools connect <tool>
10
+ ```
11
+
12
+ After that, MCP host config should not need tokens inline:
13
+
14
+ ```json
15
+ {
16
+ "mcpServers": {
17
+ "railway": {
18
+ "command": "npx",
19
+ "args": ["-y", "@vucinatim/agentic-devtools", "mcp", "railway"]
20
+ }
21
+ }
22
+ }
23
+ ```
24
+
25
+ The local MCP server should resolve stored credentials automatically.
26
+
27
+ ## Core Setup Commands
28
+
29
+ Every tool should eventually support the same setup command shape:
30
+
31
+ ```bash
32
+ agentic-devtools connect <tool>
33
+ agentic-devtools disconnect <tool>
34
+ agentic-devtools auth-status <tool>
35
+ agentic-devtools test-connection <tool>
36
+ ```
37
+
38
+ Shared CLI behavior belongs in `src/cli.mjs` and shared helpers under
39
+ `src/core/`.
40
+
41
+ Provider-specific auth details belong inside each tool:
42
+
43
+ ```txt
44
+ src/tools/<tool>/auth.mjs
45
+ src/tools/<tool>/client.mjs
46
+ ```
47
+
48
+ Do not make host adapters own auth logic.
49
+
50
+ ## Credential Storage
51
+
52
+ Store credentials outside project folders by default:
53
+
54
+ ```txt
55
+ ~/.config/agentic-devtools/
56
+ railway.json
57
+ namecheap.json
58
+ ```
59
+
60
+ Rules:
61
+
62
+ - never store credentials in the consuming project
63
+ - never require MCP host config to contain secrets after `connect`
64
+ - allow environment variables for stateless CI/server setups
65
+ - environment variables should override stored local credentials
66
+ - `disconnect <tool>` should remove local stored credentials for that tool
67
+ - auth status commands must never print token values
68
+
69
+ ## Provider Auth Tiers
70
+
71
+ Not every service can support one-click setup. Each tool should document its
72
+ friction level honestly.
73
+
74
+ ### Tier 1: OAuth / One-Click
75
+
76
+ Best case:
77
+
78
+ 1. user runs `connect <tool>`
79
+ 2. browser opens provider OAuth
80
+ 3. user approves access
81
+ 4. local callback captures auth code
82
+ 5. package exchanges code with PKCE
83
+ 6. token is stored locally
84
+ 7. `mcp <tool>` works without extra host config
85
+
86
+ Use this when the provider supports OAuth for user-delegated access.
87
+
88
+ ### Tier 2: Guided Token Setup
89
+
90
+ Use when provider supports API tokens but not first-class OAuth.
91
+
92
+ Flow:
93
+
94
+ 1. user runs `connect <tool>`
95
+ 2. browser opens a local setup page
96
+ 3. page links directly to the provider token screen
97
+ 4. user creates/pastes token
98
+ 5. package validates token
99
+ 6. package stores token locally
100
+
101
+ This is not true one-click, but it can still feel guided and low-friction.
102
+
103
+ ### Tier 3: Guided Manual Setup
104
+
105
+ Use when provider requires extra account-side configuration, such as IP
106
+ allowlisting.
107
+
108
+ Flow:
109
+
110
+ 1. user runs `connect <tool>`
111
+ 2. browser opens a local setup page
112
+ 3. page explains exact provider steps
113
+ 4. page detects and displays needed local facts when possible
114
+ 5. user performs provider-side setup
115
+ 6. user pastes credentials
116
+ 7. package validates credentials
117
+ 8. package stores credentials locally
118
+
119
+ This is the lowest honest friction for providers that require manual controls.
120
+
121
+ ## Railway
122
+
123
+ Railway should aim for Tier 1 eventually.
124
+
125
+ Railway supports the public API through tokens, and Railway docs describe
126
+ “Login with Railway” OAuth for apps acting on behalf of users.
127
+
128
+ Recommended path:
129
+
130
+ 1. implement `connect railway` with guided token setup first
131
+ 2. store token in `~/.config/agentic-devtools/railway.json`
132
+ 3. support:
133
+ - `RAILWAY_PROJECT_TOKEN`
134
+ - `RAILWAY_API_TOKEN`
135
+ - `RAILWAY_TOKEN`
136
+ - `RAILWAY_PROJECT_ID`
137
+ 4. make env vars override stored config
138
+ 5. add OAuth once the app registration and callback flow are ready
139
+
140
+ Token guidance:
141
+
142
+ - project token: narrow project-scoped inspection
143
+ - account/workspace token: account identity and project listing
144
+ - do not ask for account token when a project token is enough
145
+
146
+ ## Namecheap
147
+
148
+ Namecheap is Tier 3.
149
+
150
+ Namecheap API access requires:
151
+
152
+ - API access enabled in the account
153
+ - API user
154
+ - API key
155
+ - username
156
+ - client IPv4
157
+ - whitelisted IPv4 address
158
+
159
+ The setup flow should therefore be guided:
160
+
161
+ 1. `connect namecheap`
162
+ 2. open local browser setup page
163
+ 3. display current public IPv4 if it can be detected
164
+ 4. link to Namecheap API access page
165
+ 5. explain IP whitelist requirement
166
+ 6. accept API credentials
167
+ 7. validate with a lightweight API call
168
+ 8. store credentials in `~/.config/agentic-devtools/namecheap.json`
169
+
170
+ Do not describe Namecheap as one-click unless we later build a hosted connector
171
+ with a stable egress IP and explicit security model.
172
+
173
+ ## npm
174
+
175
+ npm is Tier 2 for local tools and Tier 1 for CI publishing.
176
+
177
+ For local MCP use, npm does not provide a normal third-party OAuth flow. Use a
178
+ guided token setup:
179
+
180
+ 1. `connect npm`
181
+ 2. open local browser setup page
182
+ 3. link to npm granular access token settings
183
+ 4. explain least-privilege token selection
184
+ 5. accept token
185
+ 6. validate with npm identity endpoint
186
+ 7. store token in `~/.config/agentic-devtools/npm.json`
187
+
188
+ Supported auth sources:
189
+
190
+ - `NPM_TOKEN`
191
+ - `NODE_AUTH_TOKEN`
192
+ - explicit `.npmrc` auth token
193
+ - local Agentic Devtools npm config
194
+
195
+ For package publishing, prefer GitHub Actions Trusted Publishing through OIDC.
196
+ The local npm tool may support publishing for controlled use cases, but real
197
+ publishes must be explicit and confirmation-gated. Dry-run should be the default.
198
+
199
+ ## Hosted Connect Option
200
+
201
+ A future hosted “Agentic Devtools Connect” service could reduce friction further.
202
+
203
+ Potential benefits:
204
+
205
+ - true OAuth-style web connection for providers that support OAuth
206
+ - stable callback URLs
207
+ - hosted token broker
208
+ - stable egress IP for providers that require IP allowlisting
209
+
210
+ Costs and risks:
211
+
212
+ - secure secret storage
213
+ - token revocation flows
214
+ - account access auditability
215
+ - uptime responsibility
216
+ - abuse prevention
217
+ - paid infrastructure
218
+
219
+ Do not introduce hosted auth casually. The open-source package should work
220
+ locally first.
221
+
222
+ ## Security Requirements
223
+
224
+ Auth flows must follow these rules:
225
+
226
+ - never print token values
227
+ - never commit credentials
228
+ - store local files with restrictive permissions when possible
229
+ - prefer least-privilege tokens
230
+ - validate credentials before reporting setup success
231
+ - make disconnect explicit and reliable
232
+ - document where credentials are stored
233
+ - keep write tools gated behind narrow, explicit actions
234
+
235
+ ## MCP Authorization Note
236
+
237
+ For local stdio MCP servers, credentials should be resolved from environment
238
+ variables or local storage. The MCP authorization specification says stdio
239
+ transports should not use the HTTP OAuth flow directly.
240
+
241
+ If Agentic Devtools later ships a hosted HTTP MCP server, that server should
242
+ follow the MCP authorization model and OAuth best practices.
243
+
244
+ ## Implementation Checklist For New Tools
245
+
246
+ When adding a new tool, define:
247
+
248
+ - auth tier: OAuth, guided token, or guided manual
249
+ - required credentials
250
+ - least-privilege recommendation
251
+ - local config file shape
252
+ - env var overrides
253
+ - `connect`
254
+ - `disconnect`
255
+ - `auth-status`
256
+ - `test-connection`
257
+ - MCP host config example
258
+ - security caveats
259
+
260
+ If a provider cannot support one-click setup, say so directly and provide the
261
+ shortest guided setup path.
@@ -0,0 +1,55 @@
1
+ # Migration Plan
2
+
3
+ This plan tracks the move from the original plugin bootstrap layout to a single
4
+ professional public npm package.
5
+
6
+ ## Phase 1: Public Repo Baseline
7
+
8
+ - choose license: done
9
+ - add `CONTRIBUTING.md`: done
10
+ - add `SECURITY.md`: done
11
+ - remove local credential files from the working tree: done
12
+ - initialize Git
13
+ - create public GitHub repo
14
+ - push initial baseline
15
+
16
+ ## Phase 2: Package Consolidation
17
+
18
+ - move shared source from `plugins/namecheap/src` into `src/tools/namecheap`: done
19
+ - move shared source from `plugins/railway/src` into `src/tools/railway`: done
20
+ - create `src/core` for registry and result formatting: done
21
+ - create `src/cli.mjs`: done
22
+ - keep adapter metadata thin under `adapters/`: done
23
+ - replace per-plugin package manifests with one root package manifest: done
24
+
25
+ ## Phase 3: TypeScript Build
26
+
27
+ - add TypeScript
28
+ - add `tsup`
29
+ - add generated `dist`
30
+ - add package `exports`
31
+ - add package `bin`
32
+ - convert tests to run against source or built output consistently
33
+
34
+ ## Phase 4: CI
35
+
36
+ - add GitHub Actions CI: done
37
+ - run install, tests, and build: done
38
+ - add pull request template: done
39
+ - add issue templates: done
40
+
41
+ ## Phase 5: Publish
42
+
43
+ - configure npm package metadata: done
44
+ - configure npm Trusted Publishing
45
+ - add manual publish workflow: done
46
+ - run `npm pack --dry-run`
47
+ - publish `0.1.0` under `latest`
48
+ - create GitHub release
49
+
50
+ ## Phase 6: Release Management
51
+
52
+ Add Changesets only after release cadence justifies it.
53
+
54
+ Until then, manual version bumps plus a guarded publish workflow are simpler and
55
+ easier to reason about.
@@ -0,0 +1,119 @@
1
+ # Open Source Readiness
2
+
3
+ This repo is intended to become public. Treat everything committed here as
4
+ publishable by default.
5
+
6
+ ## Repository Identity
7
+
8
+ Recommended GitHub repo:
9
+
10
+ ```txt
11
+ vucinatim/agentic-devtools
12
+ ```
13
+
14
+ Recommended npm package:
15
+
16
+ ```txt
17
+ @vucinatim/agentic-devtools
18
+ ```
19
+
20
+ The scoped npm name is the better default because it ties ownership to the
21
+ publisher namespace and avoids competing with broad unscoped package names.
22
+
23
+ As of 2026-05-14, `npm view agentic-devtools` and
24
+ `npm view @vucinatim/agentic-devtools` both returned 404 locally, so both names
25
+ appeared unclaimed at that moment. Check again immediately before first publish.
26
+
27
+ ## Public Repo Checklist
28
+
29
+ Before creating the GitHub repo:
30
+
31
+ - remove local credential files from the working tree
32
+ - verify `.gitignore` covers local auth files
33
+ - add a license
34
+ - add `CONTRIBUTING.md`
35
+ - add `SECURITY.md`
36
+ - add CI
37
+ - add release/publishing docs
38
+ - make README accurate for public users
39
+ - ensure package metadata points to the final GitHub URL
40
+ - run tests from a fresh install
41
+
42
+ ## Secret Hygiene
43
+
44
+ Never commit:
45
+
46
+ - local Namecheap auth files
47
+ - `.env`
48
+ - `.env.*`
49
+ - API tokens
50
+ - Railway project tokens
51
+ - npm tokens
52
+ - generated local caches
53
+ - `node_modules`
54
+
55
+ The Namecheap browser auth flow stores credentials outside the repo by default
56
+ under the user's config directory. If `NAMECHEAP_AUTH_CONFIG_PATH` points into
57
+ the repo during local testing, remove that file before committing.
58
+
59
+ ## License
60
+
61
+ Recommended license: MIT.
62
+
63
+ Reason: this is a developer tooling package where easy reuse matters more than
64
+ copyleft constraints. MIT also matches common npm ecosystem expectations.
65
+
66
+ Apache-2.0 is also reasonable if explicit patent language matters more. Pick one
67
+ before the first public commit and keep package manifests consistent.
68
+
69
+ ## Minimum Public Metadata
70
+
71
+ The published package should include:
72
+
73
+ - `name`
74
+ - `version`
75
+ - `description`
76
+ - `license`
77
+ - `repository`
78
+ - `homepage`
79
+ - `bugs`
80
+ - `keywords`
81
+ - `bin`
82
+ - `exports`
83
+ - `files`
84
+ - `publishConfig.access`
85
+
86
+ Keep the package description concrete:
87
+
88
+ ```txt
89
+ MCP-first devtools for AI agents.
90
+ ```
91
+
92
+ Avoid broad claims until the tool catalog is larger.
93
+
94
+ ## Dependency Posture
95
+
96
+ Keep dependencies boring and few.
97
+
98
+ Good defaults:
99
+
100
+ - `@modelcontextprotocol/sdk`
101
+ - `zod`
102
+ - `fast-xml-parser` while Namecheap uses XML
103
+
104
+ Avoid adding frameworks for small CLI routing or config parsing unless they
105
+ remove real complexity.
106
+
107
+ ## Documentation Standard
108
+
109
+ Every tool should document:
110
+
111
+ - what it can do
112
+ - auth variables
113
+ - MCP host configuration
114
+ - read/write safety model
115
+ - exposed MCP tools
116
+ - examples
117
+ - known limitations
118
+
119
+ The top-level README should stay concise and route deeper details to `docs/`.