@lon-ask/dockit 0.1.1 → 0.1.2

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 (136) hide show
  1. package/README.md +482 -337
  2. package/SKILL.md +94 -103
  3. package/apps/client/index.html +12 -0
  4. package/apps/client/package.json +26 -0
  5. package/apps/client/src/App.tsx +18 -0
  6. package/apps/client/src/api/client.ts +54 -0
  7. package/apps/client/src/components/BuildPanel.tsx +77 -0
  8. package/apps/client/src/components/DocViewer.tsx +76 -0
  9. package/apps/client/src/components/EntryDetail.tsx +322 -0
  10. package/apps/client/src/components/EntryForm.tsx +117 -0
  11. package/apps/client/src/components/EntryList.tsx +165 -0
  12. package/apps/client/src/components/GlobalSearchBar.tsx +166 -0
  13. package/apps/client/src/components/Layout.tsx +57 -0
  14. package/apps/client/src/components/SearchBar.tsx +103 -0
  15. package/apps/client/src/components/SourceForm.tsx +497 -0
  16. package/apps/client/src/hooks/useTheme.ts +19 -0
  17. package/apps/client/src/index.css +77 -0
  18. package/apps/client/src/main.tsx +13 -0
  19. package/apps/client/src/types.ts +105 -0
  20. package/apps/client/vite.config.ts +13 -0
  21. package/apps/server/dist/core/domain/entry.js +20 -0
  22. package/apps/server/dist/core/domain/entry.js.map +1 -0
  23. package/apps/server/dist/core/domain/errors.js +33 -0
  24. package/apps/server/dist/core/domain/errors.js.map +1 -0
  25. package/apps/server/dist/core/domain/knowledge-graph.js +2 -0
  26. package/apps/server/dist/core/domain/knowledge-graph.js.map +1 -0
  27. package/apps/server/dist/core/domain/types.js +2 -0
  28. package/apps/server/dist/core/domain/types.js.map +1 -0
  29. package/apps/server/dist/core/ports/IBuildRepository.js +2 -0
  30. package/apps/server/dist/core/ports/IBuildRepository.js.map +1 -0
  31. package/apps/server/dist/core/ports/IDocumentNormalizer.js +2 -0
  32. package/apps/server/dist/core/ports/IDocumentNormalizer.js.map +1 -0
  33. package/apps/server/dist/core/ports/IDocumentStore.js +2 -0
  34. package/apps/server/dist/core/ports/IDocumentStore.js.map +1 -0
  35. package/apps/server/dist/core/ports/IEntryReadModel.js +2 -0
  36. package/apps/server/dist/core/ports/IEntryReadModel.js.map +1 -0
  37. package/apps/server/dist/core/ports/IEntryRepository.js +2 -0
  38. package/apps/server/dist/core/ports/IEntryRepository.js.map +1 -0
  39. package/apps/server/dist/core/ports/IKnowledgeGraph.js +2 -0
  40. package/apps/server/dist/core/ports/IKnowledgeGraph.js.map +1 -0
  41. package/apps/server/dist/core/ports/IPathResolver.js +2 -0
  42. package/apps/server/dist/core/ports/IPathResolver.js.map +1 -0
  43. package/apps/server/dist/core/ports/ISearchEngine.js +2 -0
  44. package/apps/server/dist/core/ports/ISearchEngine.js.map +1 -0
  45. package/apps/server/dist/core/ports/ISourceProcessor.js +2 -0
  46. package/apps/server/dist/core/ports/ISourceProcessor.js.map +1 -0
  47. package/apps/server/dist/core/ports/ISourceRepository.js +2 -0
  48. package/apps/server/dist/core/ports/ISourceRepository.js.map +1 -0
  49. package/apps/server/dist/core/usecases/BuildUseCase.js +76 -0
  50. package/apps/server/dist/core/usecases/BuildUseCase.js.map +1 -0
  51. package/apps/server/dist/core/usecases/ConfigUseCase.js +62 -0
  52. package/apps/server/dist/core/usecases/ConfigUseCase.js.map +1 -0
  53. package/apps/server/dist/core/usecases/SearchUseCase.js +17 -0
  54. package/apps/server/dist/core/usecases/SearchUseCase.js.map +1 -0
  55. package/apps/server/dist/index.js +86 -0
  56. package/apps/server/dist/index.js.map +1 -0
  57. package/apps/server/dist/infrastructure/filesystem/FileSystemDocumentStore.js +25 -0
  58. package/apps/server/dist/infrastructure/filesystem/FileSystemDocumentStore.js.map +1 -0
  59. package/apps/server/dist/infrastructure/graph/GraphSearchDecorator.js +42 -0
  60. package/apps/server/dist/infrastructure/graph/GraphSearchDecorator.js.map +1 -0
  61. package/apps/server/dist/infrastructure/graph/GraphifyKnowledgeGraph.js +145 -0
  62. package/apps/server/dist/infrastructure/graph/GraphifyKnowledgeGraph.js.map +1 -0
  63. package/apps/server/dist/infrastructure/graph/index.js +3 -0
  64. package/apps/server/dist/infrastructure/graph/index.js.map +1 -0
  65. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteBuildRepository.js +21 -0
  66. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteBuildRepository.js.map +1 -0
  67. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryReadModel.js +11 -0
  68. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryReadModel.js.map +1 -0
  69. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryRepository.js +59 -0
  70. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryRepository.js.map +1 -0
  71. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteSourceRepository.js +47 -0
  72. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteSourceRepository.js.map +1 -0
  73. package/apps/server/dist/infrastructure/persistence/sqlite/connection.js +50 -0
  74. package/apps/server/dist/infrastructure/persistence/sqlite/connection.js.map +1 -0
  75. package/apps/server/dist/infrastructure/search/SearchEngineFactory.js +32 -0
  76. package/apps/server/dist/infrastructure/search/SearchEngineFactory.js.map +1 -0
  77. package/apps/server/dist/infrastructure/search/json/JsonSearchEngine.js +147 -0
  78. package/apps/server/dist/infrastructure/search/json/JsonSearchEngine.js.map +1 -0
  79. package/apps/server/dist/infrastructure/search/vector/EmbeddingService.js +23 -0
  80. package/apps/server/dist/infrastructure/search/vector/EmbeddingService.js.map +1 -0
  81. package/apps/server/dist/infrastructure/search/vector/VectorSearchEngine.js +378 -0
  82. package/apps/server/dist/infrastructure/search/vector/VectorSearchEngine.js.map +1 -0
  83. package/apps/server/dist/infrastructure/source-processors/AntoraSourceProcessor.js +11 -0
  84. package/apps/server/dist/infrastructure/source-processors/AntoraSourceProcessor.js.map +1 -0
  85. package/apps/server/dist/infrastructure/source-processors/AsciidocSourceProcessor.js +9 -0
  86. package/apps/server/dist/infrastructure/source-processors/AsciidocSourceProcessor.js.map +1 -0
  87. package/apps/server/dist/infrastructure/source-processors/DocumentNormalizer.js +11 -0
  88. package/apps/server/dist/infrastructure/source-processors/DocumentNormalizer.js.map +1 -0
  89. package/apps/server/dist/infrastructure/source-processors/GithubMarkdownSourceProcessor.js +9 -0
  90. package/apps/server/dist/infrastructure/source-processors/GithubMarkdownSourceProcessor.js.map +1 -0
  91. package/apps/server/dist/infrastructure/source-processors/MavenSourceProcessor.js +9 -0
  92. package/apps/server/dist/infrastructure/source-processors/MavenSourceProcessor.js.map +1 -0
  93. package/apps/server/dist/infrastructure/source-processors/PathResolver.js +5 -0
  94. package/apps/server/dist/infrastructure/source-processors/PathResolver.js.map +1 -0
  95. package/apps/server/dist/infrastructure/source-processors/SourceCodeSourceProcessor.js +261 -0
  96. package/apps/server/dist/infrastructure/source-processors/SourceCodeSourceProcessor.js.map +1 -0
  97. package/apps/server/dist/infrastructure/source-processors/ZipSourceProcessor.js +9 -0
  98. package/apps/server/dist/infrastructure/source-processors/ZipSourceProcessor.js.map +1 -0
  99. package/apps/server/dist/mcp-http.js +93 -0
  100. package/apps/server/dist/mcp-http.js.map +1 -0
  101. package/apps/server/dist/mcp.js +339 -0
  102. package/apps/server/dist/mcp.js.map +1 -0
  103. package/apps/server/dist/routes/build.js +89 -0
  104. package/apps/server/dist/routes/build.js.map +1 -0
  105. package/apps/server/dist/routes/entries.js +52 -0
  106. package/apps/server/dist/routes/entries.js.map +1 -0
  107. package/apps/server/dist/routes/graph.js +58 -0
  108. package/apps/server/dist/routes/graph.js.map +1 -0
  109. package/apps/server/dist/routes/search.js +24 -0
  110. package/apps/server/dist/routes/search.js.map +1 -0
  111. package/apps/server/dist/routes/sources.js +100 -0
  112. package/apps/server/dist/routes/sources.js.map +1 -0
  113. package/apps/server/dist/routes/viewer.js +22 -0
  114. package/apps/server/dist/routes/viewer.js.map +1 -0
  115. package/apps/server/dist/services/antora.js +222 -0
  116. package/apps/server/dist/services/antora.js.map +1 -0
  117. package/apps/server/dist/services/asciidoc.js +206 -0
  118. package/apps/server/dist/services/asciidoc.js.map +1 -0
  119. package/apps/server/dist/services/configLoader.js +150 -0
  120. package/apps/server/dist/services/configLoader.js.map +1 -0
  121. package/apps/server/dist/services/githubMarkdown.js +221 -0
  122. package/apps/server/dist/services/githubMarkdown.js.map +1 -0
  123. package/apps/server/dist/services/maven.js +148 -0
  124. package/apps/server/dist/services/maven.js.map +1 -0
  125. package/apps/server/dist/services/normalizer.js +42 -0
  126. package/apps/server/dist/services/normalizer.js.map +1 -0
  127. package/apps/server/dist/services/paths.js +5 -0
  128. package/apps/server/dist/services/paths.js.map +1 -0
  129. package/apps/server/dist/services/textExtractor.js +46 -0
  130. package/apps/server/dist/services/textExtractor.js.map +1 -0
  131. package/apps/server/dist/services/zip.js +63 -0
  132. package/apps/server/dist/services/zip.js.map +1 -0
  133. package/apps/server/package.json +38 -0
  134. package/bin/commands/dev.ts +2 -2
  135. package/bin/commands/serve.ts +2 -2
  136. package/package.json +17 -3
@@ -0,0 +1,46 @@
1
+ export function extractTextFromHtml(html, maxLength = 50000) {
2
+ const withoutStyles = html
3
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
4
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
5
+ .replace(/<link[^>]*>/gi, '')
6
+ .replace(/<meta[^>]*>/gi, '');
7
+ const withoutTags = withoutStyles
8
+ .replace(/<h1[^>]*>/gi, '\n\n## ')
9
+ .replace(/<\/h1>/gi, '\n')
10
+ .replace(/<h2[^>]*>/gi, '\n\n### ')
11
+ .replace(/<\/h2>/gi, '\n')
12
+ .replace(/<h3[^>]*>/gi, '\n\n#### ')
13
+ .replace(/<\/h3>/gi, '\n')
14
+ .replace(/<h4[^>]*>/gi, '\n\n**')
15
+ .replace(/<\/h4>/gi, '**\n')
16
+ .replace(/<li[^>]*>/gi, '\n- ')
17
+ .replace(/<\/li>/gi, '')
18
+ .replace(/<\/?p[^>]*>/gi, '\n\n')
19
+ .replace(/<br\s*\/?>/gi, '\n')
20
+ .replace(/<hr\s*\/?>/gi, '\n---\n')
21
+ .replace(/<\/?pre[^>]*>/gi, '\n```\n')
22
+ .replace(/<\/?code[^>]*>/gi, '`')
23
+ .replace(/<a[^>]*href="([^"]*)"[^>]*>/gi, ' [$1] ')
24
+ .replace(/<\/a>/gi, '')
25
+ .replace(/<[^>]+>/g, ' ')
26
+ .replace(/&amp;/g, '&')
27
+ .replace(/&lt;/g, '<')
28
+ .replace(/&gt;/g, '>')
29
+ .replace(/&quot;/g, '"')
30
+ .replace(/&#39;/g, "'")
31
+ .replace(/&nbsp;/g, ' ')
32
+ .replace(/&#x2F;/g, '/')
33
+ .replace(/&#(\d+);/g, (_, d) => String.fromCharCode(Number(d)));
34
+ const cleaned = withoutTags
35
+ .replace(/\n{3,}/g, '\n\n')
36
+ .replace(/[ \t]{3,}/g, ' ')
37
+ .trim();
38
+ if (cleaned.length <= maxLength)
39
+ return cleaned;
40
+ const truncated = cleaned.slice(0, maxLength);
41
+ const lastNewline = truncated.lastIndexOf('\n');
42
+ const cutPoint = lastNewline > maxLength * 0.8 ? lastNewline : truncated.lastIndexOf(' ');
43
+ const final = cutPoint > maxLength * 0.8 ? truncated.slice(0, cutPoint) : truncated;
44
+ return final + '\n\n[... content truncated ...]';
45
+ }
46
+ //# sourceMappingURL=textExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textExtractor.js","sourceRoot":"","sources":["../../src/services/textExtractor.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,YAAoB,KAAK;IACzE,MAAM,aAAa,GAAG,IAAI;SACvB,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;SAC9C,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC;SAChD,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAEhC,MAAM,WAAW,GAAG,aAAa;SAC9B,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC;SACjC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;SACzB,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;SAClC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;SACzB,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC;SACnC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;SACzB,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC;SAChC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;SAC3B,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;SAChC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;SAC7B,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC;SAClC,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC;SACrC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,+BAA+B,EAAE,QAAQ,CAAC;SAClD,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,WAAW;SACxB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;SAC3B,IAAI,EAAE,CAAC;IAEV,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,OAAO,CAAC;IAEhD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpF,OAAO,KAAK,GAAG,iCAAiC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,63 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import { Readable } from 'node:stream';
4
+ import { pipeline } from 'node:stream/promises';
5
+ import unzipper from 'unzipper';
6
+ export async function extractLocalZip(localPath, targetDir, log) {
7
+ if (!fs.existsSync(localPath)) {
8
+ throw new Error(`Local file not found: ${localPath}`);
9
+ }
10
+ const stat = fs.statSync(localPath);
11
+ if (!stat.isFile()) {
12
+ throw new Error(`localPath must be a ZIP file, got directory: ${localPath}`);
13
+ }
14
+ log(`Extracting local ZIP from ${localPath}`);
15
+ fs.mkdirSync(targetDir, { recursive: true });
16
+ const data = fs.readFileSync(localPath);
17
+ const stream = Readable.from(data);
18
+ await pipeline(stream, unzipper.Extract({ path: targetDir }));
19
+ log(`Extracted ZIP to ${targetDir}`);
20
+ const files = countFilesRecursive(targetDir);
21
+ log(`Found ${files} files in extracted archive`);
22
+ }
23
+ export async function downloadAndExtractZip(configOrUrl, targetDir, log) {
24
+ const config = typeof configOrUrl === 'string'
25
+ ? { url: configOrUrl }
26
+ : configOrUrl;
27
+ if (config.localPath) {
28
+ await extractLocalZip(config.localPath, targetDir, log);
29
+ return;
30
+ }
31
+ if (!config.url) {
32
+ throw new Error('ZIP source requires url or localPath');
33
+ }
34
+ log(`Downloading ZIP from ${config.url}`);
35
+ const response = await fetch(config.url);
36
+ if (!response.ok) {
37
+ throw new Error(`Failed to download ZIP: ${response.status} ${response.statusText}`);
38
+ }
39
+ fs.mkdirSync(targetDir, { recursive: true });
40
+ if (!response.body) {
41
+ throw new Error('No response body');
42
+ }
43
+ const nodeStream = Readable.fromWeb(response.body);
44
+ await pipeline(nodeStream, unzipper.Extract({ path: targetDir }));
45
+ log(`Extracted ZIP to ${targetDir}`);
46
+ const files = countFilesRecursive(targetDir);
47
+ log(`Found ${files} files in extracted archive`);
48
+ }
49
+ function countFilesRecursive(dir) {
50
+ let count = 0;
51
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
52
+ for (const entry of entries) {
53
+ const fullPath = path.join(dir, entry.name);
54
+ if (entry.isDirectory()) {
55
+ count += countFilesRecursive(fullPath);
56
+ }
57
+ else {
58
+ count++;
59
+ }
60
+ }
61
+ return count;
62
+ }
63
+ //# sourceMappingURL=zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../../src/services/zip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@dockit/server",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "mcp": "tsx src/mcp.ts",
8
+ "dev": "tsx watch src/index.ts",
9
+ "build": "tsc",
10
+ "start": "node dist/index.js"
11
+ },
12
+ "dependencies": {
13
+ "@antora/cli": "^3.1.14",
14
+ "@antora/site-generator": "^3.2.0-alpha.11",
15
+ "@asciidoctor/cli": "^4.0.0",
16
+ "@asciidoctor/core": "^2.2.9",
17
+ "better-sqlite3": "^11.7.0",
18
+ "cors": "^2.8.5",
19
+ "express": "^4.21.2",
20
+ "marked": "^18.0.3",
21
+ "node-html-parser": "^6.1.13",
22
+ "unzipper": "^0.12.3",
23
+ "uuid": "^11.0.5"
24
+ },
25
+ "optionalDependencies": {
26
+ "@lancedb/lancedb": "^0.27.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/better-sqlite3": "^7.6.12",
30
+ "@types/cors": "^2.8.17",
31
+ "@types/express": "^5.0.0",
32
+ "@types/marked": "^6.0.0",
33
+ "@types/unzipper": "^0.10.10",
34
+ "@types/uuid": "^10.0.0",
35
+ "tsx": "^4.19.2",
36
+ "typescript": "^5.7.3"
37
+ }
38
+ }
@@ -4,13 +4,13 @@ export default function dev(root, positional, flags) {
4
4
  console.log('Starting Dockit dev servers...');
5
5
  console.log('');
6
6
 
7
- const server = spawn('npm', ['run', 'dev:server'], {
7
+ const server = spawn('npx tsx watch apps/server/src/index.ts', [], {
8
8
  cwd: root,
9
9
  stdio: 'inherit',
10
10
  shell: true,
11
11
  });
12
12
 
13
- const client = spawn('npm', ['run', 'dev:client'], {
13
+ const client = spawn('npx vite apps/client', [], {
14
14
  cwd: root,
15
15
  stdio: 'inherit',
16
16
  shell: true,
@@ -2,12 +2,12 @@ import { spawn } from 'node:child_process';
2
2
 
3
3
  export default function serve(root, positional, flags) {
4
4
  const port = flags.port || process.env.PORT || 3001;
5
- console.log(`Starting Dockit production server on port ${port}...`);
5
+ console.log(`Starting Dockit server on port ${port}...`);
6
6
  console.log('');
7
7
 
8
8
  const env = { ...process.env, PORT: String(port) };
9
9
 
10
- const server = spawn('npm', ['run', 'start', '-w', 'apps/server'], {
10
+ const server = spawn('npx tsx apps/server/src/index.ts', [], {
11
11
  cwd: root,
12
12
  stdio: 'inherit',
13
13
  shell: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lon-ask/dockit",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Local documentation hub — normalize multiple doc sources into a unified searchable bundle",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,7 +9,13 @@
9
9
  "files": [
10
10
  "bin/",
11
11
  "apps/server/src/",
12
+ "apps/server/dist/",
13
+ "apps/server/package.json",
14
+ "apps/client/src/",
12
15
  "apps/client/dist/",
16
+ "apps/client/package.json",
17
+ "apps/client/vite.config.ts",
18
+ "apps/client/index.html",
13
19
  "dockit.yaml",
14
20
  "SKILL.md",
15
21
  "scripts/mcp-wrapper.sh"
@@ -45,11 +51,19 @@
45
51
  "node-html-parser": "^6.1.13",
46
52
  "marked": "^18.0.3",
47
53
  "unzipper": "^0.12.3",
48
- "uuid": "^11.0.5"
54
+ "uuid": "^11.0.5",
55
+ "react": "^19.0.0",
56
+ "react-dom": "^19.0.0",
57
+ "react-router-dom": "^7.1.1",
58
+ "lucide-react": "^0.469.0",
59
+ "vite": "^6.0.7",
60
+ "@vitejs/plugin-react": "^4.3.4",
61
+ "tailwindcss": "^4.0.0",
62
+ "@tailwindcss/vite": "^4.0.0"
49
63
  },
50
64
  "optionalDependencies": {
51
65
  "@lancedb/lancedb": "^0.27.2",
52
- "@lon-ask/dockit-embeddings": "^0.1.1"
66
+ "@lon-ask/dockit-embeddings": "^0.1.2"
53
67
  },
54
68
  "devDependencies": {
55
69
  "@modelcontextprotocol/sdk": "^1.29.0",