@zonuexe/techbook-mcp 0.1.0 → 0.2.1

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 (124) hide show
  1. package/.claude/settings.local.json +13 -1
  2. package/.codex/skills/techbook-mcp-release-prep/SKILL.md +105 -0
  3. package/.github/workflows/test.yml +36 -0
  4. package/.oxlintrc.json +12 -0
  5. package/AGENTS.md +29 -1
  6. package/CHANGELOG.md +34 -0
  7. package/deno.json +3 -0
  8. package/dist/adapters/html/cheerio-parser.d.ts.map +1 -1
  9. package/dist/adapters/html/cheerio-parser.js.map +1 -1
  10. package/dist/adapters/publishers/base.d.ts +22 -1
  11. package/dist/adapters/publishers/base.d.ts.map +1 -1
  12. package/dist/adapters/publishers/base.js +142 -2
  13. package/dist/adapters/publishers/base.js.map +1 -1
  14. package/dist/adapters/publishers/book-tech.d.ts +3 -0
  15. package/dist/adapters/publishers/book-tech.d.ts.map +1 -0
  16. package/dist/adapters/publishers/book-tech.js +95 -0
  17. package/dist/adapters/publishers/book-tech.js.map +1 -0
  18. package/dist/adapters/publishers/born-digital.d.ts +3 -0
  19. package/dist/adapters/publishers/born-digital.d.ts.map +1 -0
  20. package/dist/adapters/publishers/born-digital.js +122 -0
  21. package/dist/adapters/publishers/born-digital.js.map +1 -0
  22. package/dist/adapters/publishers/coronasha.d.ts +3 -0
  23. package/dist/adapters/publishers/coronasha.d.ts.map +1 -0
  24. package/dist/adapters/publishers/coronasha.js +119 -0
  25. package/dist/adapters/publishers/coronasha.js.map +1 -0
  26. package/dist/adapters/publishers/impress.d.ts +3 -0
  27. package/dist/adapters/publishers/impress.d.ts.map +1 -0
  28. package/dist/adapters/publishers/impress.js +92 -0
  29. package/dist/adapters/publishers/impress.js.map +1 -0
  30. package/dist/adapters/publishers/manatee.d.ts +3 -0
  31. package/dist/adapters/publishers/manatee.d.ts.map +1 -0
  32. package/dist/adapters/publishers/manatee.js +93 -0
  33. package/dist/adapters/publishers/manatee.js.map +1 -0
  34. package/dist/adapters/publishers/maruzen-publishing.d.ts +3 -0
  35. package/dist/adapters/publishers/maruzen-publishing.d.ts.map +1 -0
  36. package/dist/adapters/publishers/maruzen-publishing.js +108 -0
  37. package/dist/adapters/publishers/maruzen-publishing.js.map +1 -0
  38. package/dist/adapters/publishers/optronics.d.ts +3 -0
  39. package/dist/adapters/publishers/optronics.d.ts.map +1 -0
  40. package/dist/adapters/publishers/optronics.js +92 -0
  41. package/dist/adapters/publishers/optronics.js.map +1 -0
  42. package/dist/adapters/publishers/oreilly-japan.d.ts +3 -0
  43. package/dist/adapters/publishers/oreilly-japan.d.ts.map +1 -0
  44. package/dist/adapters/publishers/oreilly-japan.js +112 -0
  45. package/dist/adapters/publishers/oreilly-japan.js.map +1 -0
  46. package/dist/adapters/publishers/peaks.d.ts +3 -0
  47. package/dist/adapters/publishers/peaks.d.ts.map +1 -0
  48. package/dist/adapters/publishers/peaks.js +80 -0
  49. package/dist/adapters/publishers/peaks.js.map +1 -0
  50. package/dist/adapters/publishers/personal-media.d.ts +3 -0
  51. package/dist/adapters/publishers/personal-media.d.ts.map +1 -0
  52. package/dist/adapters/publishers/personal-media.js +144 -0
  53. package/dist/adapters/publishers/personal-media.js.map +1 -0
  54. package/dist/adapters/publishers/registry.d.ts.map +1 -1
  55. package/dist/adapters/publishers/registry.js +26 -0
  56. package/dist/adapters/publishers/registry.js.map +1 -1
  57. package/dist/adapters/publishers/rutles.d.ts +3 -0
  58. package/dist/adapters/publishers/rutles.d.ts.map +1 -0
  59. package/dist/adapters/publishers/rutles.js +128 -0
  60. package/dist/adapters/publishers/rutles.js.map +1 -0
  61. package/dist/adapters/publishers/saiensu.d.ts +3 -0
  62. package/dist/adapters/publishers/saiensu.d.ts.map +1 -0
  63. package/dist/adapters/publishers/saiensu.js +109 -0
  64. package/dist/adapters/publishers/saiensu.js.map +1 -0
  65. package/dist/adapters/publishers/seshop.d.ts +3 -0
  66. package/dist/adapters/publishers/seshop.d.ts.map +1 -0
  67. package/dist/adapters/publishers/seshop.js +98 -0
  68. package/dist/adapters/publishers/seshop.js.map +1 -0
  69. package/dist/application/get-book-detail.d.ts.map +1 -1
  70. package/dist/application/get-book-detail.js +5 -0
  71. package/dist/application/get-book-detail.js.map +1 -1
  72. package/dist/application/search-books.d.ts.map +1 -1
  73. package/dist/application/search-books.js +7 -1
  74. package/dist/application/search-books.js.map +1 -1
  75. package/dist/domain/book.d.ts +5 -4
  76. package/dist/domain/book.d.ts.map +1 -1
  77. package/dist/main.d.ts +1 -0
  78. package/dist/main.js +1 -0
  79. package/dist/main.js.map +1 -1
  80. package/dist/mcp/server.d.ts.map +1 -1
  81. package/dist/mcp/server.js +1 -0
  82. package/dist/mcp/server.js.map +1 -1
  83. package/flake.nix +1 -1
  84. package/package.json +7 -5
  85. package/src/adapters/html/cheerio-parser.ts +4 -3
  86. package/src/adapters/publishers/base.ts +150 -0
  87. package/src/adapters/publishers/born-digital.ts +2 -17
  88. package/src/adapters/publishers/impress.ts +103 -0
  89. package/src/adapters/publishers/manatee.ts +2 -1
  90. package/src/adapters/publishers/maruzen-publishing.ts +4 -16
  91. package/src/adapters/publishers/oreilly-japan.ts +5 -10
  92. package/src/adapters/publishers/registry.ts +2 -0
  93. package/src/adapters/publishers/rutles.ts +1 -13
  94. package/src/adapters/publishers/saiensu.ts +5 -18
  95. package/src/adapters/publishers/seshop.ts +1 -1
  96. package/src/adapters/publishers/tatsu-zine.ts +61 -36
  97. package/src/application/get-book-detail.ts +7 -0
  98. package/src/application/search-books.ts +6 -1
  99. package/src/main.ts +1 -0
  100. package/tests/fixtures/impress-detail-epub.html +746 -0
  101. package/tests/fixtures/impress-detail-social.html +689 -0
  102. package/tests/fixtures/tatsu-zine-search.html +29 -13
  103. package/tests/unit/adapters/base.test.ts +441 -0
  104. package/tests/unit/adapters/publishers/book-tech.test.ts +18 -15
  105. package/tests/unit/adapters/publishers/born-digital.test.ts +18 -15
  106. package/tests/unit/adapters/publishers/coronasha.test.ts +26 -20
  107. package/tests/unit/adapters/publishers/gihyo.test.ts +21 -19
  108. package/tests/unit/adapters/publishers/impress.test.ts +129 -0
  109. package/tests/unit/adapters/publishers/lambdanote.test.ts +12 -11
  110. package/tests/unit/adapters/publishers/manatee.test.ts +14 -12
  111. package/tests/unit/adapters/publishers/maruzen-publishing.test.ts +19 -17
  112. package/tests/unit/adapters/publishers/optronics.test.ts +19 -16
  113. package/tests/unit/adapters/publishers/oreilly-japan.test.ts +19 -16
  114. package/tests/unit/adapters/publishers/peaks.test.ts +17 -14
  115. package/tests/unit/adapters/publishers/personal-media.test.ts +18 -15
  116. package/tests/unit/adapters/publishers/rutles.test.ts +15 -12
  117. package/tests/unit/adapters/publishers/saiensu.test.ts +14 -12
  118. package/tests/unit/adapters/publishers/seshop.test.ts +16 -13
  119. package/tests/unit/adapters/publishers/tatsu-zine.test.ts +56 -14
  120. package/tests/unit/adapters/publishers/techbookfest.test.ts +12 -11
  121. package/tests/unit/adapters/registry.test.ts +37 -0
  122. package/tests/unit/application/get-book-detail.test.ts +102 -0
  123. package/tests/unit/application/search-books.test.ts +137 -0
  124. package/vitest.config.ts +0 -8
@@ -1,5 +1,6 @@
1
1
  import type { BookRecord, SearchQuery } from "../domain/book.js";
2
2
  import type { PublisherAdapter, PublisherDeps } from "../domain/publisher.js";
3
+ import { checkRobotsTxt } from "../adapters/publishers/base.js";
3
4
 
4
5
  export interface SearchBooksResult {
5
6
  books: BookRecord[];
@@ -16,7 +17,11 @@ export async function searchBooks(
16
17
  : publishers;
17
18
 
18
19
  const results = await Promise.allSettled(
19
- targets.map(p => p.search(query, deps)),
20
+ targets.map(async (p) => {
21
+ const allowed = await checkRobotsTxt(p.baseUrl, deps);
22
+ if (!allowed) throw new Error(`robots.txt によりアクセスが禁止されています: ${p.baseUrl}`);
23
+ return p.search(query, deps);
24
+ }),
20
25
  );
21
26
 
22
27
  const books: BookRecord[] = [];
package/src/main.ts CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  import { startServer } from "./mcp/server.js";
2
3
  import { DEFAULT_PUBLISHERS } from "./adapters/publishers/registry.js";
3
4
  import { FetchHttpClient } from "./adapters/http/fetch-client.js";