TypeScript project conventions for delegate-ai-mcp locked in and applied — build/typecheck strategy, lint/format tooling, multi-tool source structure, and a publish-shaped package.json — so a second delegate tool (beyond qwen_delegate) can be added by following a clear, documented pattern, and the package could be npm published later without restructuring.
Notes
Domain: this is an MCP server project (@modelcontextprotocol/sdk, stdio transport), not application code — conventions should match how the wider TS+MCP ecosystem builds these, not generic app conventions.
Already in place from the prior session (not up for re-litigation unless a ticket finds a conflict): qwen_delegate tool in src/qwen-delegate-server.ts (thin MCP wiring) + src/qwen-delegate.ts (testable core logic); tests via built-in node --test in test/; runs via Node's native TS type-stripping (no build step, no tsconfig.json); registered globally with claude mcp add --scope user.
Relevant docs: research/qwen-mcp-delegation.md (prior research on the qwen delegation problem itself — separate from this map's TS-project-setup question), docs/agents/domain.md, docs/agents/issue-tracker.md (this repo's Gitea/tea conventions).
Skills to consult per ticket: /research for the research ticket; /grilling + /domain-modeling for the decision tickets.
User preference (locked via ticket #3, second pass): no build process, ever, for now — write and run TypeScript directly. Don't re-propose a tsc/tsup build or a Gitea Actions pipeline unless the user raises it again.
Multi-tool convention (locked via ticket #4): each backend is its own MCP server process + its own claude mcp add registration — not one process with many tools. src/-delegate-server.ts + src/-delegate.ts per backend, flat in src/. Shared subprocess logic lives in src/lib/spawn-cli.ts (spawnCli(command, args, opts) -> {ok, output}, injectable spawnFn). Tests split to match: test/spawn-cli.test.ts + test/-delegate.test.ts per backend.
Decisions so far
How do TS MCP servers conventionally handle build, types, and publishing? — tsc-to-dist is the de facto build/publish standard (official SDK + example servers + real third-party servers); native strip-types can't survive node_modules. Full findings: research/ts-mcp-project-conventions.md on branch research/ts-mcp-conventions.
Build & typecheck strategy for delegate-ai-mcp — no build, no typecheck sidecar. Keep running src/*.ts directly via native type-stripping, no tsconfig.json, no dist/bin/files, no Gitea Actions. (Superseded an earlier 'build now' resolution — see the ticket's comment history for both passes.)
Multi-tool source structure for delegate-ai-mcp — separate process + separate registration per backend; flat src/-delegate(-server).ts naming; generic src/lib/spawn-cli.ts extracted now (ahead of a second real caller, at the user's request); tests split to mirror. Implementation not yet done — decision only.
Whether/how to actually npm-publish (registry, versioning, changelog, and — now — what build step that would need) — deferred; revisit only if/when publishing is actually wanted.
Implementation of the multi-tool refactor (extracting src/lib/spawn-cli.ts, splitting tests) — decided in ticket #4, not yet done; someone needs to actually do it (not itself a wayfinder decision, just follow-up work).
Out of scope
Re-deciding the qwen delegation approach itself (WSL vs native, timeout strategy) — already resolved in research/qwen-mcp-delegation.md and built; this map is about TS project conventions, not that decision.
## Destination
TypeScript project conventions for delegate-ai-mcp locked in and applied — build/typecheck strategy, lint/format tooling, multi-tool source structure, and a publish-shaped package.json — so a second delegate tool (beyond qwen_delegate) can be added by following a clear, documented pattern, and the package could be npm published later without restructuring.
## Notes
- Domain: this is an MCP server project (@modelcontextprotocol/sdk, stdio transport), not application code — conventions should match how the wider TS+MCP ecosystem builds these, not generic app conventions.
- Already in place from the prior session (not up for re-litigation unless a ticket finds a conflict): qwen_delegate tool in src/qwen-delegate-server.ts (thin MCP wiring) + src/qwen-delegate.ts (testable core logic); tests via built-in node --test in test/; runs via Node's native TS type-stripping (no build step, no tsconfig.json); registered globally with claude mcp add --scope user.
- Relevant docs: research/qwen-mcp-delegation.md (prior research on the qwen delegation problem itself — separate from this map's TS-project-setup question), docs/agents/domain.md, docs/agents/issue-tracker.md (this repo's Gitea/tea conventions).
- Skills to consult per ticket: /research for the research ticket; /grilling + /domain-modeling for the decision tickets.
- User preference (locked via ticket #3, second pass): no build process, ever, for now — write and run TypeScript directly. Don't re-propose a tsc/tsup build or a Gitea Actions pipeline unless the user raises it again.
- Multi-tool convention (locked via ticket #4): each backend is its own MCP server process + its own `claude mcp add` registration — not one process with many tools. src/<backend>-delegate-server.ts + src/<backend>-delegate.ts per backend, flat in src/. Shared subprocess logic lives in src/lib/spawn-cli.ts (spawnCli(command, args, opts) -> {ok, output}, injectable spawnFn). Tests split to match: test/spawn-cli.test.ts + test/<backend>-delegate.test.ts per backend.
## Decisions so far
- [How do TS MCP servers conventionally handle build, types, and publishing?](https://git.arthurerlich.de/haylan/delegate-ai-mcp/issues/2) — tsc-to-dist is the de facto build/publish standard (official SDK + example servers + real third-party servers); native strip-types can't survive node_modules. Full findings: research/ts-mcp-project-conventions.md on branch research/ts-mcp-conventions.
- [Build & typecheck strategy for delegate-ai-mcp](https://git.arthurerlich.de/haylan/delegate-ai-mcp/issues/3) — no build, no typecheck sidecar. Keep running src/*.ts directly via native type-stripping, no tsconfig.json, no dist/bin/files, no Gitea Actions. (Superseded an earlier 'build now' resolution — see the ticket's comment history for both passes.)
- [Multi-tool source structure for delegate-ai-mcp](https://git.arthurerlich.de/haylan/delegate-ai-mcp/issues/4) — separate process + separate registration per backend; flat src/<backend>-delegate(-server).ts naming; generic src/lib/spawn-cli.ts extracted now (ahead of a second real caller, at the user's request); tests split to mirror. Implementation not yet done — decision only.
- [Lint/format tooling for delegate-ai-mcp](https://git.arthurerlich.de/haylan/delegate-ai-mcp/issues/5) — skip entirely for now, project too small to justify it.
## Children
(none open — see Out of scope for #6, closed)
## Not yet specified
- Whether/how to actually npm-publish (registry, versioning, changelog, and — now — what build step that would need) — deferred; revisit only if/when publishing is actually wanted.
- Implementation of the multi-tool refactor (extracting src/lib/spawn-cli.ts, splitting tests) — decided in ticket #4, not yet done; someone needs to actually do it (not itself a wayfinder decision, just follow-up work).
## Out of scope
- Re-deciding the qwen delegation approach itself (WSL vs native, timeout strategy) — already resolved in research/qwen-mcp-delegation.md and built; this map is about TS project conventions, not that decision.
- [Set up Gitea Actions: build, test, and publish delegate-ai-mcp to this repo's package registry](https://git.arthurerlich.de/haylan/delegate-ai-mcp/issues/7) — depended on the build-now decision, which was reverted; no build step means nothing to run CI/publish on right now.
- [Publish-shaped package.json for delegate-ai-mcp](https://git.arthurerlich.de/haylan/delegate-ai-mcp/issues/6) — assumed eventual npm-publish, but native strip-types can't run from node_modules, so nothing to shape while the no-build decision stands.
Map complete — frontier is empty, no open children, remaining fog (npm-publish, once-#4's-refactor-is-implemented) is explicitly deferred, not ticket-ready. Closing the map.
Map complete — frontier is empty, no open children, remaining fog (npm-publish, once-#4's-refactor-is-implemented) is explicitly deferred, not ticket-ready. Closing the map.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Destination
TypeScript project conventions for delegate-ai-mcp locked in and applied — build/typecheck strategy, lint/format tooling, multi-tool source structure, and a publish-shaped package.json — so a second delegate tool (beyond qwen_delegate) can be added by following a clear, documented pattern, and the package could be npm published later without restructuring.
Notes
claude mcp addregistration — not one process with many tools. src/-delegate-server.ts + src/-delegate.ts per backend, flat in src/. Shared subprocess logic lives in src/lib/spawn-cli.ts (spawnCli(command, args, opts) -> {ok, output}, injectable spawnFn). Tests split to match: test/spawn-cli.test.ts + test/-delegate.test.ts per backend.Decisions so far
Children
(none open — see Out of scope for #6, closed)
Not yet specified
Out of scope
Map complete — frontier is empty, no open children, remaining fog (npm-publish, once-#4's-refactor-is-implemented) is explicitly deferred, not ticket-ready. Closing the map.