@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.
- package/LICENSE +21 -0
- package/README.md +202 -0
- package/SECURITY.md +47 -0
- package/adapters/claude/namecheap/README.md +13 -0
- package/adapters/claude/npm/README.md +11 -0
- package/adapters/claude/railway/README.md +11 -0
- package/adapters/codex/namecheap/.codex-plugin/plugin.json +40 -0
- package/adapters/codex/namecheap/.mcp.json +21 -0
- package/adapters/codex/namecheap/SKILL.md +40 -0
- package/adapters/codex/npm/.codex-plugin/plugin.json +41 -0
- package/adapters/codex/npm/.mcp.json +18 -0
- package/adapters/codex/npm/SKILL.md +54 -0
- package/adapters/codex/railway/.codex-plugin/plugin.json +39 -0
- package/adapters/codex/railway/.mcp.json +20 -0
- package/adapters/codex/railway/SKILL.md +44 -0
- package/docs/README.md +14 -0
- package/docs/architecture.md +208 -0
- package/docs/auth-and-setup-guidelines.md +261 -0
- package/docs/migration-plan.md +55 -0
- package/docs/open-source-readiness.md +119 -0
- package/docs/publishing.md +211 -0
- package/docs/testing.md +61 -0
- package/docs/usage.md +144 -0
- package/package.json +78 -0
- package/src/cli.mjs +158 -0
- package/src/core/config-store.mjs +106 -0
- package/src/core/result.mjs +13 -0
- package/src/core/tool-registry.mjs +29 -0
- package/src/index.mjs +47 -0
- package/src/tools/namecheap/auth.mjs +429 -0
- package/src/tools/namecheap/client.mjs +655 -0
- package/src/tools/namecheap/mcp.mjs +298 -0
- package/src/tools/npm/auth.mjs +367 -0
- package/src/tools/npm/client.mjs +317 -0
- package/src/tools/npm/mcp.mjs +343 -0
- package/src/tools/railway/auth.mjs +402 -0
- package/src/tools/railway/client.mjs +388 -0
- 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/`.
|