@dtoolkit/dwork 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 (134) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/dist/cli/configure.d.ts +2 -0
  4. package/dist/cli/configure.d.ts.map +1 -0
  5. package/dist/cli/configure.js +83 -0
  6. package/dist/cli/configure.js.map +1 -0
  7. package/dist/cli/index.d.ts +3 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +76 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/init.d.ts +4 -0
  12. package/dist/cli/init.d.ts.map +1 -0
  13. package/dist/cli/init.js +143 -0
  14. package/dist/cli/init.js.map +1 -0
  15. package/dist/cli/keys.d.ts +11 -0
  16. package/dist/cli/keys.d.ts.map +1 -0
  17. package/dist/cli/keys.js +85 -0
  18. package/dist/cli/keys.js.map +1 -0
  19. package/dist/cli/start.d.ts +2 -0
  20. package/dist/cli/start.d.ts.map +1 -0
  21. package/dist/cli/start.js +53 -0
  22. package/dist/cli/start.js.map +1 -0
  23. package/dist/cli/status.d.ts +2 -0
  24. package/dist/cli/status.d.ts.map +1 -0
  25. package/dist/cli/status.js +36 -0
  26. package/dist/cli/status.js.map +1 -0
  27. package/dist/cli/sync.d.ts +4 -0
  28. package/dist/cli/sync.d.ts.map +1 -0
  29. package/dist/cli/sync.js +38 -0
  30. package/dist/cli/sync.js.map +1 -0
  31. package/dist/core/config.d.ts +21 -0
  32. package/dist/core/config.d.ts.map +1 -0
  33. package/dist/core/config.js +31 -0
  34. package/dist/core/config.js.map +1 -0
  35. package/dist/core/db.d.ts +4 -0
  36. package/dist/core/db.d.ts.map +1 -0
  37. package/dist/core/db.js +90 -0
  38. package/dist/core/db.js.map +1 -0
  39. package/dist/core/indexer.d.ts +9 -0
  40. package/dist/core/indexer.d.ts.map +1 -0
  41. package/dist/core/indexer.js +145 -0
  42. package/dist/core/indexer.js.map +1 -0
  43. package/dist/core/models.d.ts +113 -0
  44. package/dist/core/models.d.ts.map +1 -0
  45. package/dist/core/models.js +53 -0
  46. package/dist/core/models.js.map +1 -0
  47. package/dist/core/parser.d.ts +20 -0
  48. package/dist/core/parser.d.ts.map +1 -0
  49. package/dist/core/parser.js +126 -0
  50. package/dist/core/parser.js.map +1 -0
  51. package/dist/core/templates.d.ts +5 -0
  52. package/dist/core/templates.d.ts.map +1 -0
  53. package/dist/core/templates.js +84 -0
  54. package/dist/core/templates.js.map +1 -0
  55. package/dist/dashboard/index.html +1127 -0
  56. package/dist/dashboard/logo-dwork-complete.png +0 -0
  57. package/dist/dashboard/logo-dwork.png +0 -0
  58. package/dist/dashboard/server.d.ts +2 -0
  59. package/dist/dashboard/server.d.ts.map +1 -0
  60. package/dist/dashboard/server.js +27 -0
  61. package/dist/dashboard/server.js.map +1 -0
  62. package/dist/mcp/server.d.ts +5 -0
  63. package/dist/mcp/server.d.ts.map +1 -0
  64. package/dist/mcp/server.js +242 -0
  65. package/dist/mcp/server.js.map +1 -0
  66. package/dist/server/index.d.ts +7 -0
  67. package/dist/server/index.d.ts.map +1 -0
  68. package/dist/server/index.js +63 -0
  69. package/dist/server/index.js.map +1 -0
  70. package/dist/server/routes/docs.d.ts +3 -0
  71. package/dist/server/routes/docs.d.ts.map +1 -0
  72. package/dist/server/routes/docs.js +53 -0
  73. package/dist/server/routes/docs.js.map +1 -0
  74. package/dist/server/routes/health.d.ts +3 -0
  75. package/dist/server/routes/health.d.ts.map +1 -0
  76. package/dist/server/routes/health.js +27 -0
  77. package/dist/server/routes/health.js.map +1 -0
  78. package/dist/server/routes/keys.d.ts +3 -0
  79. package/dist/server/routes/keys.d.ts.map +1 -0
  80. package/dist/server/routes/keys.js +58 -0
  81. package/dist/server/routes/keys.js.map +1 -0
  82. package/dist/server/routes/overview.d.ts +3 -0
  83. package/dist/server/routes/overview.d.ts.map +1 -0
  84. package/dist/server/routes/overview.js +12 -0
  85. package/dist/server/routes/overview.js.map +1 -0
  86. package/dist/server/routes/permissions.d.ts +3 -0
  87. package/dist/server/routes/permissions.d.ts.map +1 -0
  88. package/dist/server/routes/permissions.js +9 -0
  89. package/dist/server/routes/permissions.js.map +1 -0
  90. package/dist/server/routes/projects.d.ts +3 -0
  91. package/dist/server/routes/projects.d.ts.map +1 -0
  92. package/dist/server/routes/projects.js +50 -0
  93. package/dist/server/routes/projects.js.map +1 -0
  94. package/dist/server/routes/search.d.ts +3 -0
  95. package/dist/server/routes/search.d.ts.map +1 -0
  96. package/dist/server/routes/search.js +10 -0
  97. package/dist/server/routes/search.js.map +1 -0
  98. package/dist/server/routes/sync.d.ts +3 -0
  99. package/dist/server/routes/sync.d.ts.map +1 -0
  100. package/dist/server/routes/sync.js +11 -0
  101. package/dist/server/routes/sync.js.map +1 -0
  102. package/dist/server/routes/tasks.d.ts +3 -0
  103. package/dist/server/routes/tasks.d.ts.map +1 -0
  104. package/dist/server/routes/tasks.js +45 -0
  105. package/dist/server/routes/tasks.js.map +1 -0
  106. package/dist/service/docs.d.ts +26 -0
  107. package/dist/service/docs.d.ts.map +1 -0
  108. package/dist/service/docs.js +137 -0
  109. package/dist/service/docs.js.map +1 -0
  110. package/dist/service/overview.d.ts +18 -0
  111. package/dist/service/overview.d.ts.map +1 -0
  112. package/dist/service/overview.js +46 -0
  113. package/dist/service/overview.js.map +1 -0
  114. package/dist/service/projects.d.ts +34 -0
  115. package/dist/service/projects.d.ts.map +1 -0
  116. package/dist/service/projects.js +99 -0
  117. package/dist/service/projects.js.map +1 -0
  118. package/dist/service/search.d.ts +13 -0
  119. package/dist/service/search.d.ts.map +1 -0
  120. package/dist/service/search.js +59 -0
  121. package/dist/service/search.js.map +1 -0
  122. package/dist/service/sync.d.ts +9 -0
  123. package/dist/service/sync.d.ts.map +1 -0
  124. package/dist/service/sync.js +95 -0
  125. package/dist/service/sync.js.map +1 -0
  126. package/dist/service/tasks.d.ts +40 -0
  127. package/dist/service/tasks.d.ts.map +1 -0
  128. package/dist/service/tasks.js +156 -0
  129. package/dist/service/tasks.js.map +1 -0
  130. package/dist/service/utils.d.ts +2 -0
  131. package/dist/service/utils.d.ts.map +1 -0
  132. package/dist/service/utils.js +5 -0
  133. package/dist/service/utils.js.map +1 -0
  134. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/cli/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function start(pathArg?: string): Promise<void>;
2
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAiBA,wBAAsB,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,iBA4C3C"}
@@ -0,0 +1,53 @@
1
+ import { readdirSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join, resolve } from 'node:path';
4
+ import pc from 'picocolors';
5
+ import { loadConfig } from '../core/config.js';
6
+ import { createDatabase } from '../core/db.js';
7
+ import { indexProject } from '../core/indexer.js';
8
+ import { startDashboard } from '../dashboard/server.js';
9
+ import { createServer } from '../server/index.js';
10
+ function resolveDataPath(pathArg) {
11
+ if (pathArg)
12
+ return resolve(pathArg.replace('~', homedir()));
13
+ return resolve(homedir(), '.dwork');
14
+ }
15
+ export async function start(pathArg) {
16
+ const dataPath = resolveDataPath(pathArg);
17
+ const config = { ...loadConfig(dataPath), dataPath };
18
+ const db = createDatabase(config);
19
+ const app = createServer(config, db);
20
+ const projectsDir = join(dataPath, 'projects');
21
+ try {
22
+ const slugs = readdirSync(projectsDir);
23
+ for (const slug of slugs) {
24
+ const projectPath = join(projectsDir, slug);
25
+ try {
26
+ indexProject(db, slug, projectPath);
27
+ }
28
+ catch {
29
+ // skip broken projects
30
+ }
31
+ }
32
+ }
33
+ catch {
34
+ // projects dir may not exist
35
+ }
36
+ const address = await app.listen({ port: config.port, host: config.host });
37
+ const dashboardPort = config.port + 1;
38
+ startDashboard(dashboardPort);
39
+ const { projects } = db.prepare('SELECT COUNT(*) as projects FROM projects').get();
40
+ const { tasks } = db.prepare('SELECT COUNT(*) as tasks FROM tasks').get();
41
+ console.log(`
42
+ ${pc.cyan('dwork')} is running
43
+
44
+ ${pc.green('API')}: ${address}
45
+ ${pc.green('MCP')}: ${address}/mcp
46
+ ${pc.green('Dashboard')}: http://localhost:${dashboardPort}
47
+ ${pc.green('Data')}: ${config.dataPath}
48
+ ${pc.green('Token')}: ${config.token.slice(0, 16)}...
49
+ ${pc.green('Projects')}: ${projects}
50
+ ${pc.green('Tasks')}: ${tasks}
51
+ `);
52
+ }
53
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAgB;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrD,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3E,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACtC,cAAc,CAAC,aAAa,CAAC,CAAC;IAE9B,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,EAE/E,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAEtE,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC;EACZ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;;IAEd,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,OAAO;IACjC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,OAAO;IACjC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,aAAa;IACxD,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,QAAQ;IACzC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IACnD,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ;IACjC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK;CACjC,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function status(pathArg?: string): Promise<void>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAYA,wBAAsB,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,iBAkC5C"}
@@ -0,0 +1,36 @@
1
+ import { homedir } from 'node:os';
2
+ import { resolve } from 'node:path';
3
+ import pc from 'picocolors';
4
+ import { loadConfig } from '../core/config.js';
5
+ function resolveDataPath(pathArg) {
6
+ if (pathArg)
7
+ return resolve(pathArg.replace('~', homedir()));
8
+ return resolve(homedir(), '.dwork');
9
+ }
10
+ export async function status(pathArg) {
11
+ const dataPath = resolveDataPath(pathArg);
12
+ try {
13
+ const config = loadConfig(dataPath);
14
+ const url = `http://${config.host === '0.0.0.0' ? 'localhost' : config.host}:${config.port}`;
15
+ const res = await fetch(`${url}/health`);
16
+ if (!res.ok) {
17
+ console.log(pc.red('dwork is not responding'));
18
+ return;
19
+ }
20
+ const data = (await res.json());
21
+ console.log(`
22
+ ${pc.cyan('dwork')} ${pc.dim(`v${data.version}`)}
23
+
24
+ ${pc.green('Status')}: ${data.status}
25
+ ${pc.green('URL')}: ${url}
26
+ ${pc.green('Projects')}: ${data.projects}
27
+ ${pc.green('Tasks')}: ${data.tasks}
28
+ ${pc.green('Docs')}: ${data.docs}
29
+ `);
30
+ }
31
+ catch {
32
+ console.log(pc.red('dwork is not running'));
33
+ console.log(pc.dim(`Expected config at ${dataPath}/config.json`));
34
+ }
35
+ }
36
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAgB;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,UAAU,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAE7F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAM7B,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC;EACd,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;;IAE5C,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM;IACpC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG;IAC5B,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,QAAQ;IACtC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK;IACnC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI;CACrC,CAAC,CAAC;IACD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,sBAAsB,QAAQ,cAAc,CAAC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function sync(project: string, opts: {
2
+ path?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAcA,wBAAsB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBA6BlE"}
@@ -0,0 +1,38 @@
1
+ import { homedir } from 'node:os';
2
+ import { resolve } from 'node:path';
3
+ import pc from 'picocolors';
4
+ import { loadConfig } from '../core/config.js';
5
+ import { createDatabase } from '../core/db.js';
6
+ import { syncProject } from '../service/sync.js';
7
+ function resolveDataPath(pathArg) {
8
+ if (pathArg)
9
+ return resolve(pathArg.replace('~', homedir()));
10
+ return resolve(homedir(), '.dwork');
11
+ }
12
+ export async function sync(project, opts) {
13
+ const dataPath = resolveDataPath(opts.path);
14
+ let config;
15
+ try {
16
+ config = loadConfig(dataPath);
17
+ }
18
+ catch {
19
+ console.log(`${pc.red('Not initialized.')} Run: ${pc.cyan('dwork init')}`);
20
+ return;
21
+ }
22
+ const db = createDatabase({ ...config, dataPath });
23
+ console.log(`${pc.dim('Syncing')} ${pc.green(project)}${pc.dim('...')}`);
24
+ const result = await syncProject(db, config, project);
25
+ db.close();
26
+ if (result.success) {
27
+ console.log(`${pc.green('Synced:')} ${result.message}`);
28
+ if (result.updatedFiles) {
29
+ for (const f of result.updatedFiles) {
30
+ console.log(` ${pc.dim('updated')} ${f}`);
31
+ }
32
+ }
33
+ }
34
+ else {
35
+ console.log(`${pc.red('Failed:')} ${result.message}`);
36
+ }
37
+ }
38
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAe,EAAE,IAAuB;IACjE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO;IACT,CAAC;IAED,MAAM,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtD,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ export declare const DProxyConfigSchema: z.ZodObject<{
3
+ url: z.ZodDefault<z.ZodString>;
4
+ token: z.ZodOptional<z.ZodString>;
5
+ provider: z.ZodDefault<z.ZodString>;
6
+ }, z.core.$strip>;
7
+ export type DProxyConfig = z.infer<typeof DProxyConfigSchema>;
8
+ export declare const ConfigSchema: z.ZodObject<{
9
+ dataPath: z.ZodString;
10
+ port: z.ZodDefault<z.ZodNumber>;
11
+ host: z.ZodDefault<z.ZodString>;
12
+ token: z.ZodString;
13
+ dproxy: z.ZodOptional<z.ZodObject<{
14
+ url: z.ZodDefault<z.ZodString>;
15
+ token: z.ZodOptional<z.ZodString>;
16
+ provider: z.ZodDefault<z.ZodString>;
17
+ }, z.core.$strip>>;
18
+ }, z.core.$strip>;
19
+ export type Config = z.infer<typeof ConfigSchema>;
20
+ export declare function loadConfig(dataPath: string): Config;
21
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;iBAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,YAAY;;;;;;;;;;iBAMvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWnD"}
@@ -0,0 +1,31 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { z } from 'zod';
4
+ export const DProxyConfigSchema = z.object({
5
+ url: z.string().default('http://localhost:7880'),
6
+ token: z.string().optional(),
7
+ provider: z.string().default('claude'),
8
+ });
9
+ export const ConfigSchema = z.object({
10
+ dataPath: z.string(),
11
+ port: z.number().default(7881),
12
+ host: z.string().default('0.0.0.0'),
13
+ token: z.string(),
14
+ dproxy: DProxyConfigSchema.optional(),
15
+ });
16
+ export function loadConfig(dataPath) {
17
+ const configPath = join(dataPath, 'config.json');
18
+ if (!existsSync(configPath)) {
19
+ throw new Error(`Config not found at ${configPath}. Run 'dwork init' first.`);
20
+ }
21
+ const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
22
+ raw.dataPath = dataPath;
23
+ if (process.env.DWORK_PORT)
24
+ raw.port = parseInt(process.env.DWORK_PORT, 10);
25
+ if (process.env.DWORK_HOST)
26
+ raw.host = process.env.DWORK_HOST;
27
+ if (process.env.DWORK_TOKEN)
28
+ raw.token = process.env.DWORK_TOKEN;
29
+ return ConfigSchema.parse(raw);
30
+ }
31
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;CACvC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,2BAA2B,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU;QAAE,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;QAAE,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACjE,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import Database from 'better-sqlite3';
2
+ import type { Config } from './config.js';
3
+ export declare function createDatabase(config: Config): Database.Database;
4
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAoF1C,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAQhE"}
@@ -0,0 +1,90 @@
1
+ import { join } from 'node:path';
2
+ import Database from 'better-sqlite3';
3
+ const SCHEMA = `
4
+ CREATE TABLE IF NOT EXISTS projects (
5
+ slug TEXT PRIMARY KEY,
6
+ name TEXT NOT NULL,
7
+ description TEXT,
8
+ status TEXT DEFAULT 'active',
9
+ path TEXT NOT NULL,
10
+ source_path TEXT,
11
+ created_at TEXT NOT NULL,
12
+ updated_at TEXT NOT NULL
13
+ );
14
+
15
+ CREATE TABLE IF NOT EXISTS tasks (
16
+ id TEXT PRIMARY KEY,
17
+ project_slug TEXT NOT NULL REFERENCES projects(slug),
18
+ title TEXT NOT NULL,
19
+ type TEXT DEFAULT 'task',
20
+ status TEXT DEFAULT 'todo',
21
+ priority TEXT DEFAULT 'P2',
22
+ estimate TEXT,
23
+ deadline TEXT,
24
+ source TEXT DEFAULT 'manual',
25
+ detail_path TEXT,
26
+ tags TEXT DEFAULT '[]',
27
+ line_number INTEGER,
28
+ created_at TEXT NOT NULL,
29
+ updated_at TEXT NOT NULL
30
+ );
31
+
32
+ CREATE TABLE IF NOT EXISTS docs (
33
+ id TEXT PRIMARY KEY,
34
+ project_slug TEXT NOT NULL REFERENCES projects(slug),
35
+ title TEXT NOT NULL,
36
+ type TEXT NOT NULL,
37
+ file_path TEXT NOT NULL,
38
+ body_hash TEXT,
39
+ created_at TEXT NOT NULL,
40
+ updated_at TEXT NOT NULL
41
+ );
42
+
43
+ CREATE VIRTUAL TABLE IF NOT EXISTS docs_fts USING fts5(
44
+ title, body, project_slug, type,
45
+ content='',
46
+ contentless_delete=1
47
+ );
48
+
49
+ CREATE VIRTUAL TABLE IF NOT EXISTS tasks_fts USING fts5(
50
+ title, description, project_slug,
51
+ content='',
52
+ contentless_delete=1
53
+ );
54
+
55
+ CREATE TABLE IF NOT EXISTS schema_version (version INTEGER PRIMARY KEY);
56
+
57
+ CREATE TABLE IF NOT EXISTS api_keys (
58
+ id TEXT PRIMARY KEY,
59
+ token TEXT NOT NULL UNIQUE,
60
+ user_id TEXT NOT NULL,
61
+ user_name TEXT NOT NULL,
62
+ permissions TEXT NOT NULL DEFAULT 'read+write',
63
+ created_at TEXT NOT NULL,
64
+ last_used TEXT,
65
+ status TEXT DEFAULT 'active'
66
+ );
67
+
68
+ CREATE INDEX IF NOT EXISTS idx_tasks_project ON tasks(project_slug);
69
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
70
+ CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);
71
+ CREATE INDEX IF NOT EXISTS idx_docs_project ON docs(project_slug);
72
+ CREATE INDEX IF NOT EXISTS idx_docs_type ON docs(type);
73
+ CREATE INDEX IF NOT EXISTS idx_api_keys_token ON api_keys(token);
74
+ `;
75
+ function migrate(db) {
76
+ db.exec('CREATE TABLE IF NOT EXISTS schema_version (version INTEGER PRIMARY KEY)');
77
+ const row = db.prepare('SELECT MAX(version) as v FROM schema_version').get();
78
+ const _current = row?.v ?? 0;
79
+ // Future migrations go here
80
+ }
81
+ export function createDatabase(config) {
82
+ const dbPath = join(config.dataPath, 'dwork.db');
83
+ const db = new Database(dbPath);
84
+ db.pragma('journal_mode = WAL');
85
+ db.pragma('foreign_keys = ON');
86
+ db.exec(SCHEMA);
87
+ migrate(db);
88
+ return db;
89
+ }
90
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEd,CAAC;AAEF,SAAS,OAAO,CAAC,EAAqB;IACpC,EAAE,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACnF,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,EAE7D,CAAC;IACd,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC7B,4BAA4B;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type Database from 'better-sqlite3';
2
+ export interface IndexResult {
3
+ docsIndexed: number;
4
+ tasksIndexed: number;
5
+ docsRemoved: number;
6
+ }
7
+ export declare function computeHash(content: string): string;
8
+ export declare function indexProject(db: Database.Database, projectSlug: string, projectPath: string): IndexResult;
9
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/core/indexer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAQD,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,WAAW,CAyDb"}
@@ -0,0 +1,145 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFileSync, readdirSync, statSync } from 'node:fs';
3
+ import { join, relative } from 'node:path';
4
+ import { parseBacklog, parseFrontmatter } from './parser.js';
5
+ export function computeHash(content) {
6
+ return createHash('sha256').update(content).digest('hex');
7
+ }
8
+ function genId(prefix) {
9
+ const bytes = new Uint8Array(12);
10
+ crypto.getRandomValues(bytes);
11
+ return `${prefix}_${Buffer.from(bytes).toString('base64url')}`;
12
+ }
13
+ export function indexProject(db, projectSlug, projectPath) {
14
+ const result = { docsIndexed: 0, tasksIndexed: 0, docsRemoved: 0 };
15
+ const mdFiles = walkMdFiles(projectPath);
16
+ const existingDocs = db
17
+ .prepare('SELECT id, file_path, body_hash FROM docs WHERE project_slug = ?')
18
+ .all(projectSlug);
19
+ const existingByPath = new Map(existingDocs.map((d) => [d.file_path, d]));
20
+ const seenPaths = new Set();
21
+ const transaction = db.transaction(() => {
22
+ for (const absPath of mdFiles) {
23
+ const relPath = relative(projectPath, absPath);
24
+ seenPaths.add(relPath);
25
+ const content = readFileSync(absPath, 'utf-8');
26
+ const hash = computeHash(content);
27
+ const existing = existingByPath.get(relPath);
28
+ if (existing && existing.body_hash === hash)
29
+ continue;
30
+ const { frontmatter, body } = parseFrontmatter(content);
31
+ const title = frontmatter.title || relPath;
32
+ const docType = inferDocType(relPath, frontmatter);
33
+ const now = new Date().toISOString();
34
+ if (existing) {
35
+ deleteFtsDoc(db, existing.id);
36
+ db.prepare('UPDATE docs SET title = ?, type = ?, body_hash = ?, updated_at = ? WHERE id = ?').run(title, docType, hash, now, existing.id);
37
+ insertFtsDoc(db, existing.id, title, body, projectSlug, docType);
38
+ }
39
+ else {
40
+ const id = genId('doc');
41
+ db.prepare('INSERT INTO docs (id, project_slug, title, type, file_path, body_hash, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)').run(id, projectSlug, title, docType, relPath, hash, now, now);
42
+ insertFtsDoc(db, id, title, body, projectSlug, docType);
43
+ }
44
+ result.docsIndexed++;
45
+ if (relPath === 'BACKLOG.md') {
46
+ result.tasksIndexed = indexBacklogTasks(db, projectSlug, content);
47
+ }
48
+ }
49
+ for (const existing of existingDocs) {
50
+ if (!seenPaths.has(existing.file_path)) {
51
+ deleteFtsDoc(db, existing.id);
52
+ db.prepare('DELETE FROM docs WHERE id = ?').run(existing.id);
53
+ result.docsRemoved++;
54
+ }
55
+ }
56
+ });
57
+ transaction();
58
+ return result;
59
+ }
60
+ function deleteFtsTask(db, taskId) {
61
+ const row = db.prepare('SELECT rowid FROM tasks WHERE id = ?').get(taskId);
62
+ if (!row)
63
+ return;
64
+ db.prepare('DELETE FROM tasks_fts WHERE rowid = ?').run(row.rowid);
65
+ }
66
+ function indexBacklogTasks(db, projectSlug, content) {
67
+ const parsed = parseBacklog(content, projectSlug);
68
+ const existingTasks = db
69
+ .prepare('SELECT id FROM tasks WHERE project_slug = ?')
70
+ .all(projectSlug);
71
+ for (const t of existingTasks) {
72
+ deleteFtsTask(db, t.id);
73
+ }
74
+ db.prepare('DELETE FROM tasks WHERE project_slug = ?').run(projectSlug);
75
+ const insertTask = db.prepare('INSERT INTO tasks (id, project_slug, title, type, status, priority, estimate, deadline, source, detail_path, tags, line_number, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
76
+ const now = new Date().toISOString();
77
+ for (const task of parsed) {
78
+ const id = genId('task');
79
+ const type = task.metadata.type || 'task';
80
+ const estimate = task.metadata.estimate || null;
81
+ const deadline = task.metadata.deadline || null;
82
+ const detailPath = task.metadata.detail || null;
83
+ const tags = task.metadata.tags || '[]';
84
+ insertTask.run(id, projectSlug, task.title, type, task.status, task.priority, estimate, deadline, 'manual', detailPath, tags, task.lineNumber, now, now);
85
+ insertFtsTask(db, id, task.title, '', projectSlug);
86
+ }
87
+ return parsed.length;
88
+ }
89
+ function insertFtsDoc(db, docId, title, body, projectSlug, type) {
90
+ const rowid = getRowid(db, 'docs', docId);
91
+ if (rowid == null)
92
+ return;
93
+ db.prepare('INSERT INTO docs_fts(rowid, title, body, project_slug, type) VALUES (?, ?, ?, ?, ?)').run(rowid, title, body, projectSlug, type);
94
+ }
95
+ function deleteFtsDoc(db, docId) {
96
+ const row = db.prepare('SELECT rowid FROM docs WHERE id = ?').get(docId);
97
+ if (!row)
98
+ return;
99
+ db.prepare('DELETE FROM docs_fts WHERE rowid = ?').run(row.rowid);
100
+ }
101
+ function insertFtsTask(db, taskId, title, description, projectSlug) {
102
+ const rowid = getRowid(db, 'tasks', taskId);
103
+ if (rowid == null)
104
+ return;
105
+ db.prepare('INSERT INTO tasks_fts(rowid, title, description, project_slug) VALUES (?, ?, ?, ?)').run(rowid, title, description, projectSlug);
106
+ }
107
+ function getRowid(db, table, id) {
108
+ const row = db.prepare(`SELECT rowid FROM ${table} WHERE id = ?`).get(id);
109
+ return row?.rowid ?? null;
110
+ }
111
+ function inferDocType(relPath, frontmatter) {
112
+ if (frontmatter.type && typeof frontmatter.type === 'string')
113
+ return frontmatter.type;
114
+ const lower = relPath.toLowerCase();
115
+ if (lower === 'readme.md')
116
+ return 'readme';
117
+ if (lower === 'tech.md')
118
+ return 'tech';
119
+ if (lower === 'roadmap.md')
120
+ return 'roadmap';
121
+ if (lower === 'backlog.md')
122
+ return 'backlog';
123
+ return 'note';
124
+ }
125
+ function walkMdFiles(dir) {
126
+ const files = [];
127
+ try {
128
+ const entries = readdirSync(dir);
129
+ for (const entry of entries) {
130
+ const full = join(dir, entry);
131
+ const stat = statSync(full);
132
+ if (stat.isDirectory()) {
133
+ files.push(...walkMdFiles(full));
134
+ }
135
+ else if (entry.endsWith('.md')) {
136
+ files.push(full);
137
+ }
138
+ }
139
+ }
140
+ catch {
141
+ // directory may not exist
142
+ }
143
+ return files;
144
+ }
145
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/core/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAI3C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQ7D,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,KAAK,CAAC,MAAc;IAC3B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,EAAqB,EACrB,WAAmB,EACnB,WAAmB;IAEnB,MAAM,MAAM,GAAgB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAEhF,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,WAAW,CAAkE,CAAC;IACrF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE7C,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI;gBAAE,SAAS;YAEtD,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,KAAK,GAAI,WAAW,CAAC,KAAgB,IAAI,OAAO,CAAC;YACvD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAErC,IAAI,QAAQ,EAAE,CAAC;gBACb,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC9B,EAAE,CAAC,OAAO,CACR,iFAAiF,CAClF,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC9C,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxB,EAAE,CAAC,OAAO,CACR,gIAAgI,CACjI,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAChE,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,CAAC,WAAW,EAAE,CAAC;YAErB,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;gBAC7B,MAAM,CAAC,YAAY,GAAG,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC9B,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC7D,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,WAAW,EAAE,CAAC;IACd,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB,EAAE,MAAc;IAC1D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,CAAC,MAAM,CAE5D,CAAC;IACd,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAqB,EAAE,WAAmB,EAAE,OAAe;IACpF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAElD,MAAM,aAAa,GAAG,EAAE;SACrB,OAAO,CAAC,6CAA6C,CAAC;SACtD,GAAG,CAAC,WAAW,CAAqB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAExE,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAC3B,2MAA2M,CAC5M,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;QAExC,UAAU,CAAC,GAAG,CACZ,EAAE,EACF,WAAW,EACX,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,IAAI,CAAC,UAAU,EACf,GAAG,EACH,GAAG,CACJ,CAAC;QAEF,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAS,YAAY,CACnB,EAAqB,EACrB,KAAa,EACb,KAAa,EACb,IAAY,EACZ,WAAmB,EACnB,IAAY;IAEZ,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAC1B,EAAE,CAAC,OAAO,CACR,qFAAqF,CACtF,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,EAAqB,EAAE,KAAa;IACxD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,KAAK,CAE1D,CAAC;IACd,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,aAAa,CACpB,EAAqB,EACrB,MAAc,EACd,KAAa,EACb,WAAmB,EACnB,WAAmB;IAEnB,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAC1B,EAAE,CAAC,OAAO,CACR,oFAAoF,CACrF,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,EAAqB,EAAE,KAAa,EAAE,EAAU;IAChE,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,CAE3D,CAAC;IACd,OAAO,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,WAAoC;IACzE,IAAI,WAAW,CAAC,IAAI,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC;IACtF,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { z } from 'zod';
2
+ export declare const ProjectStatusSchema: z.ZodEnum<{
3
+ active: "active";
4
+ archived: "archived";
5
+ paused: "paused";
6
+ }>;
7
+ export type ProjectStatus = z.infer<typeof ProjectStatusSchema>;
8
+ export declare const TaskStatusSchema: z.ZodEnum<{
9
+ done: "done";
10
+ todo: "todo";
11
+ refinement: "refinement";
12
+ doing: "doing";
13
+ blocked: "blocked";
14
+ }>;
15
+ export type TaskStatus = z.infer<typeof TaskStatusSchema>;
16
+ export declare const TaskTypeSchema: z.ZodEnum<{
17
+ task: "task";
18
+ note: "note";
19
+ bug: "bug";
20
+ feature: "feature";
21
+ idea: "idea";
22
+ }>;
23
+ export type TaskType = z.infer<typeof TaskTypeSchema>;
24
+ export declare const PrioritySchema: z.ZodEnum<{
25
+ P0: "P0";
26
+ P1: "P1";
27
+ P2: "P2";
28
+ P3: "P3";
29
+ }>;
30
+ export type Priority = z.infer<typeof PrioritySchema>;
31
+ export declare const DocTypeSchema: z.ZodEnum<{
32
+ readme: "readme";
33
+ tech: "tech";
34
+ roadmap: "roadmap";
35
+ backlog: "backlog";
36
+ note: "note";
37
+ idea: "idea";
38
+ planning: "planning";
39
+ decision: "decision";
40
+ postmortem: "postmortem";
41
+ }>;
42
+ export type DocType = z.infer<typeof DocTypeSchema>;
43
+ export declare const ProjectSchema: z.ZodObject<{
44
+ slug: z.ZodString;
45
+ name: z.ZodString;
46
+ description: z.ZodOptional<z.ZodString>;
47
+ status: z.ZodDefault<z.ZodEnum<{
48
+ active: "active";
49
+ archived: "archived";
50
+ paused: "paused";
51
+ }>>;
52
+ path: z.ZodString;
53
+ source_path: z.ZodOptional<z.ZodString>;
54
+ created_at: z.ZodString;
55
+ updated_at: z.ZodString;
56
+ }, z.core.$strip>;
57
+ export type Project = z.infer<typeof ProjectSchema>;
58
+ export declare const TaskSchema: z.ZodObject<{
59
+ id: z.ZodString;
60
+ project_slug: z.ZodString;
61
+ title: z.ZodString;
62
+ type: z.ZodDefault<z.ZodEnum<{
63
+ task: "task";
64
+ note: "note";
65
+ bug: "bug";
66
+ feature: "feature";
67
+ idea: "idea";
68
+ }>>;
69
+ status: z.ZodDefault<z.ZodEnum<{
70
+ done: "done";
71
+ todo: "todo";
72
+ refinement: "refinement";
73
+ doing: "doing";
74
+ blocked: "blocked";
75
+ }>>;
76
+ priority: z.ZodDefault<z.ZodEnum<{
77
+ P0: "P0";
78
+ P1: "P1";
79
+ P2: "P2";
80
+ P3: "P3";
81
+ }>>;
82
+ estimate: z.ZodOptional<z.ZodString>;
83
+ deadline: z.ZodOptional<z.ZodString>;
84
+ source: z.ZodDefault<z.ZodString>;
85
+ detail_path: z.ZodOptional<z.ZodString>;
86
+ tags: z.ZodDefault<z.ZodString>;
87
+ line_number: z.ZodOptional<z.ZodNumber>;
88
+ created_at: z.ZodString;
89
+ updated_at: z.ZodString;
90
+ }, z.core.$strip>;
91
+ export type Task = z.infer<typeof TaskSchema>;
92
+ export declare const DocSchema: z.ZodObject<{
93
+ id: z.ZodString;
94
+ project_slug: z.ZodString;
95
+ title: z.ZodString;
96
+ type: z.ZodEnum<{
97
+ readme: "readme";
98
+ tech: "tech";
99
+ roadmap: "roadmap";
100
+ backlog: "backlog";
101
+ note: "note";
102
+ idea: "idea";
103
+ planning: "planning";
104
+ decision: "decision";
105
+ postmortem: "postmortem";
106
+ }>;
107
+ file_path: z.ZodString;
108
+ body_hash: z.ZodOptional<z.ZodString>;
109
+ created_at: z.ZodString;
110
+ updated_at: z.ZodString;
111
+ }, z.core.$strip>;
112
+ export type Doc = z.infer<typeof DocSchema>;
113
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;;EAA2C,CAAC;AAC5E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,gBAAgB;;;;;;EAA6D,CAAC;AAC3F,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,cAAc;;;;;;EAAqD,CAAC;AACjF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,cAAc;;;;;EAAmC,CAAC;AAC/D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,aAAa;;;;;;;;;;EAUxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,aAAa;;;;;;;;;;;;;iBASxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAerB,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;iBASpB,CAAC;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC"}