@mono-labs/tracker 0.1.269

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 (126) hide show
  1. package/README.md +1196 -0
  2. package/bin/tracker.js +2 -0
  3. package/dist/dashboard/cli.d.ts +2 -0
  4. package/dist/dashboard/cli.d.ts.map +1 -0
  5. package/dist/dashboard/cli.js +38 -0
  6. package/dist/dashboard/index.d.ts +3 -0
  7. package/dist/dashboard/index.d.ts.map +1 -0
  8. package/dist/dashboard/index.js +5 -0
  9. package/dist/dashboard/server.d.ts +3 -0
  10. package/dist/dashboard/server.d.ts.map +1 -0
  11. package/dist/dashboard/server.js +130 -0
  12. package/dist/dashboard/types.d.ts +13 -0
  13. package/dist/dashboard/types.d.ts.map +1 -0
  14. package/dist/dashboard/types.js +2 -0
  15. package/dist/dashboard/watcher.d.ts +7 -0
  16. package/dist/dashboard/watcher.d.ts.map +1 -0
  17. package/dist/dashboard/watcher.js +44 -0
  18. package/dist/executor/action-executor.d.ts +10 -0
  19. package/dist/executor/action-executor.d.ts.map +1 -0
  20. package/dist/executor/action-executor.js +19 -0
  21. package/dist/executor/actions/index.d.ts +4 -0
  22. package/dist/executor/actions/index.d.ts.map +1 -0
  23. package/dist/executor/actions/index.js +9 -0
  24. package/dist/executor/actions/remove-action.d.ts +4 -0
  25. package/dist/executor/actions/remove-action.d.ts.map +1 -0
  26. package/dist/executor/actions/remove-action.js +10 -0
  27. package/dist/executor/actions/rename-action.d.ts +4 -0
  28. package/dist/executor/actions/rename-action.d.ts.map +1 -0
  29. package/dist/executor/actions/rename-action.js +10 -0
  30. package/dist/executor/actions/replace-action.d.ts +4 -0
  31. package/dist/executor/actions/replace-action.d.ts.map +1 -0
  32. package/dist/executor/actions/replace-action.js +10 -0
  33. package/dist/executor/index.d.ts +4 -0
  34. package/dist/executor/index.d.ts.map +1 -0
  35. package/dist/executor/index.js +10 -0
  36. package/dist/index.d.ts +20 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +58 -0
  39. package/dist/manager/index.d.ts +7 -0
  40. package/dist/manager/index.d.ts.map +1 -0
  41. package/dist/manager/index.js +19 -0
  42. package/dist/manager/notation-manager.d.ts +18 -0
  43. package/dist/manager/notation-manager.d.ts.map +1 -0
  44. package/dist/manager/notation-manager.js +137 -0
  45. package/dist/manager/notation-manager.test.d.ts +2 -0
  46. package/dist/manager/notation-manager.test.d.ts.map +1 -0
  47. package/dist/manager/notation-manager.test.js +211 -0
  48. package/dist/manager/notation-updater.d.ts +6 -0
  49. package/dist/manager/notation-updater.d.ts.map +1 -0
  50. package/dist/manager/notation-updater.js +20 -0
  51. package/dist/manager/relationship-manager.d.ts +5 -0
  52. package/dist/manager/relationship-manager.d.ts.map +1 -0
  53. package/dist/manager/relationship-manager.js +46 -0
  54. package/dist/manager/stats.d.ts +3 -0
  55. package/dist/manager/stats.d.ts.map +1 -0
  56. package/dist/manager/stats.js +41 -0
  57. package/dist/manager/validator.d.ts +9 -0
  58. package/dist/manager/validator.d.ts.map +1 -0
  59. package/dist/manager/validator.js +62 -0
  60. package/dist/scanner/action-parser.d.ts +3 -0
  61. package/dist/scanner/action-parser.d.ts.map +1 -0
  62. package/dist/scanner/action-parser.js +97 -0
  63. package/dist/scanner/action-parser.test.d.ts +2 -0
  64. package/dist/scanner/action-parser.test.d.ts.map +1 -0
  65. package/dist/scanner/action-parser.test.js +94 -0
  66. package/dist/scanner/attribute-parser.d.ts +15 -0
  67. package/dist/scanner/attribute-parser.d.ts.map +1 -0
  68. package/dist/scanner/attribute-parser.js +183 -0
  69. package/dist/scanner/attribute-parser.test.d.ts +2 -0
  70. package/dist/scanner/attribute-parser.test.d.ts.map +1 -0
  71. package/dist/scanner/attribute-parser.test.js +93 -0
  72. package/dist/scanner/file-scanner.d.ts +3 -0
  73. package/dist/scanner/file-scanner.d.ts.map +1 -0
  74. package/dist/scanner/file-scanner.js +58 -0
  75. package/dist/scanner/index.d.ts +6 -0
  76. package/dist/scanner/index.d.ts.map +1 -0
  77. package/dist/scanner/index.js +11 -0
  78. package/dist/scanner/notation-parser.d.ts +3 -0
  79. package/dist/scanner/notation-parser.d.ts.map +1 -0
  80. package/dist/scanner/notation-parser.js +88 -0
  81. package/dist/scanner/notation-parser.test.d.ts +2 -0
  82. package/dist/scanner/notation-parser.test.d.ts.map +1 -0
  83. package/dist/scanner/notation-parser.test.js +153 -0
  84. package/dist/storage/config-loader.d.ts +3 -0
  85. package/dist/storage/config-loader.d.ts.map +1 -0
  86. package/dist/storage/config-loader.js +55 -0
  87. package/dist/storage/index.d.ts +3 -0
  88. package/dist/storage/index.d.ts.map +1 -0
  89. package/dist/storage/index.js +7 -0
  90. package/dist/storage/jsonl-storage.d.ts +11 -0
  91. package/dist/storage/jsonl-storage.d.ts.map +1 -0
  92. package/dist/storage/jsonl-storage.js +88 -0
  93. package/dist/storage/jsonl-storage.test.d.ts +2 -0
  94. package/dist/storage/jsonl-storage.test.d.ts.map +1 -0
  95. package/dist/storage/jsonl-storage.test.js +126 -0
  96. package/dist/types/action.d.ts +57 -0
  97. package/dist/types/action.d.ts.map +1 -0
  98. package/dist/types/action.js +13 -0
  99. package/dist/types/config.d.ts +11 -0
  100. package/dist/types/config.d.ts.map +1 -0
  101. package/dist/types/config.js +11 -0
  102. package/dist/types/enums.d.ts +40 -0
  103. package/dist/types/enums.d.ts.map +1 -0
  104. package/dist/types/enums.js +37 -0
  105. package/dist/types/index.d.ts +7 -0
  106. package/dist/types/index.d.ts.map +1 -0
  107. package/dist/types/index.js +13 -0
  108. package/dist/types/notation.d.ts +64 -0
  109. package/dist/types/notation.d.ts.map +1 -0
  110. package/dist/types/notation.js +2 -0
  111. package/dist/utils/date-parser.d.ts +3 -0
  112. package/dist/utils/date-parser.d.ts.map +1 -0
  113. package/dist/utils/date-parser.js +51 -0
  114. package/dist/utils/date-parser.test.d.ts +2 -0
  115. package/dist/utils/date-parser.test.d.ts.map +1 -0
  116. package/dist/utils/date-parser.test.js +34 -0
  117. package/dist/utils/id-generator.d.ts +3 -0
  118. package/dist/utils/id-generator.d.ts.map +1 -0
  119. package/dist/utils/id-generator.js +12 -0
  120. package/dist/utils/id-generator.test.d.ts +2 -0
  121. package/dist/utils/id-generator.test.d.ts.map +1 -0
  122. package/dist/utils/id-generator.test.js +30 -0
  123. package/dist/utils/index.d.ts +3 -0
  124. package/dist/utils/index.d.ts.map +1 -0
  125. package/dist/utils/index.js +9 -0
  126. package/package.json +60 -0
package/bin/tracker.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/dashboard/cli.js')
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/dashboard/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const shared_1 = require("@mono-labs/shared");
4
+ const storage_1 = require("../storage");
5
+ const server_1 = require("./server");
6
+ async function main() {
7
+ const args = process.argv.slice(2);
8
+ let port = 4321;
9
+ let rootOverride;
10
+ for (let i = 0; i < args.length; i++) {
11
+ if (args[i] === '--port' && args[i + 1]) {
12
+ port = parseInt(args[i + 1], 10);
13
+ i++;
14
+ }
15
+ else if (args[i] === '--root' && args[i + 1]) {
16
+ rootOverride = args[i + 1];
17
+ i++;
18
+ }
19
+ }
20
+ // Auto-detect monorepo/project root
21
+ const { root: detectedRoot, isWorkspace } = (0, shared_1.findWorkspaceRoot)(rootOverride);
22
+ const projectRoot = rootOverride ?? detectedRoot;
23
+ console.log(`[tracker] Project root: ${projectRoot}${isWorkspace ? ' (workspace)' : ''}`);
24
+ const config = (0, storage_1.loadConfig)(projectRoot);
25
+ const server = await (0, server_1.startDashboard)({ projectRoot, config, port });
26
+ console.log(`[tracker] Dashboard running at http://localhost:${port}`);
27
+ const shutdown = async () => {
28
+ console.log('\n[tracker] Shutting down...');
29
+ await server.close();
30
+ process.exit(0);
31
+ };
32
+ process.on('SIGINT', shutdown);
33
+ process.on('SIGTERM', shutdown);
34
+ }
35
+ main().catch((err) => {
36
+ console.error('[tracker] Failed to start:', err);
37
+ process.exit(1);
38
+ });
@@ -0,0 +1,3 @@
1
+ export { startDashboard } from './server';
2
+ export type { DashboardConfig, DashboardServer } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startDashboard = void 0;
4
+ var server_1 = require("./server");
5
+ Object.defineProperty(exports, "startDashboard", { enumerable: true, get: function () { return server_1.startDashboard; } });
@@ -0,0 +1,3 @@
1
+ import type { DashboardConfig, DashboardServer } from './types';
2
+ export declare function startDashboard(opts: DashboardConfig): Promise<DashboardServer>;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAM/D,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAkIpF"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startDashboard = startDashboard;
7
+ const http_1 = __importDefault(require("http"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const express_1 = __importDefault(require("express"));
10
+ const cors_1 = __importDefault(require("cors"));
11
+ const ws_1 = require("ws");
12
+ const manager_1 = require("../manager");
13
+ const scanner_1 = require("../scanner");
14
+ const watcher_1 = require("./watcher");
15
+ async function startDashboard(opts) {
16
+ const { projectRoot, config, port = 4321 } = opts;
17
+ const manager = new manager_1.NotationManager(config);
18
+ // Initial scan
19
+ const notations = await (0, scanner_1.scanFiles)(config, projectRoot);
20
+ manager.setAll(notations);
21
+ const app = (0, express_1.default)();
22
+ app.use((0, cors_1.default)());
23
+ app.use(express_1.default.json());
24
+ // --- API Routes ---
25
+ app.get('/api/notations', (req, res) => {
26
+ const query = {};
27
+ if (req.query.type)
28
+ query.type = req.query.type;
29
+ if (req.query.status)
30
+ query.status = req.query.status;
31
+ if (req.query.priority)
32
+ query.priority = req.query.priority;
33
+ if (req.query.tags)
34
+ query.tags = req.query.tags.split(',');
35
+ if (req.query.search)
36
+ query.search = req.query.search;
37
+ if (req.query.file)
38
+ query.file = req.query.file;
39
+ if (req.query.assignee)
40
+ query.assignee = req.query.assignee;
41
+ if (req.query.overdue === 'true')
42
+ query.overdue = true;
43
+ if (req.query.blocked === 'true')
44
+ query.blocked = true;
45
+ if (req.query.dueBefore)
46
+ query.dueBefore = req.query.dueBefore;
47
+ if (req.query.dueAfter)
48
+ query.dueAfter = req.query.dueAfter;
49
+ res.json(manager.query(query));
50
+ });
51
+ app.get('/api/notations/:id', (req, res) => {
52
+ const notation = manager.getById(req.params.id);
53
+ if (!notation) {
54
+ res.status(404).json({ error: 'Notation not found' });
55
+ return;
56
+ }
57
+ res.json(notation);
58
+ });
59
+ app.get('/api/stats', (_req, res) => {
60
+ res.json(manager.stats());
61
+ });
62
+ app.get('/api/config', (_req, res) => {
63
+ res.json({ config, projectRoot });
64
+ });
65
+ app.post('/api/scan', async (_req, res) => {
66
+ try {
67
+ const fresh = await (0, scanner_1.scanFiles)(config, projectRoot);
68
+ manager.setAll(fresh);
69
+ broadcastUpdate();
70
+ res.json({ count: fresh.length });
71
+ }
72
+ catch (err) {
73
+ res.status(500).json({ error: 'Scan failed' });
74
+ }
75
+ });
76
+ // --- Static SPA ---
77
+ const distDashboard = path_1.default.join(__dirname, '..', '..', 'dist-dashboard');
78
+ app.use(express_1.default.static(distDashboard));
79
+ // SPA fallback: all non-API routes serve index.html
80
+ app.get('*', (_req, res) => {
81
+ res.sendFile(path_1.default.join(distDashboard, 'index.html'));
82
+ });
83
+ // --- HTTP + WebSocket ---
84
+ const server = http_1.default.createServer(app);
85
+ const wss = new ws_1.WebSocketServer({ server });
86
+ const clients = new Set();
87
+ wss.on('connection', (ws) => {
88
+ clients.add(ws);
89
+ // Send full state on connect
90
+ ws.send(JSON.stringify({
91
+ type: 'init',
92
+ notations: manager.getAll(),
93
+ stats: manager.stats(),
94
+ }));
95
+ ws.on('close', () => {
96
+ clients.delete(ws);
97
+ });
98
+ });
99
+ function broadcastUpdate() {
100
+ const message = JSON.stringify({
101
+ type: 'update',
102
+ notations: manager.getAll(),
103
+ stats: manager.stats(),
104
+ });
105
+ for (const client of clients) {
106
+ if (client.readyState === ws_1.WebSocket.OPEN) {
107
+ client.send(message);
108
+ }
109
+ }
110
+ }
111
+ // --- File Watcher ---
112
+ const watcher = (0, watcher_1.createFileWatcher)(config, projectRoot, manager, broadcastUpdate);
113
+ // --- Start ---
114
+ await new Promise((resolve) => {
115
+ server.listen(port, () => resolve());
116
+ });
117
+ return {
118
+ server,
119
+ manager,
120
+ close: async () => {
121
+ await watcher.close();
122
+ for (const client of clients) {
123
+ client.close();
124
+ }
125
+ await new Promise((resolve, reject) => {
126
+ server.close((err) => (err ? reject(err) : resolve()));
127
+ });
128
+ },
129
+ };
130
+ }
@@ -0,0 +1,13 @@
1
+ import type http from 'http';
2
+ import type { TrackerConfig, NotationManager } from '..';
3
+ export interface DashboardConfig {
4
+ projectRoot: string;
5
+ config: TrackerConfig;
6
+ port?: number;
7
+ }
8
+ export interface DashboardServer {
9
+ server: http.Server;
10
+ manager: NotationManager;
11
+ close: () => Promise<void>;
12
+ }
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AAExD,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;IACnB,OAAO,EAAE,eAAe,CAAA;IACxB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import type { TrackerConfig } from '../types';
2
+ import type { NotationManager } from '../manager';
3
+ export interface FileWatcher {
4
+ close: () => Promise<void>;
5
+ }
6
+ export declare function createFileWatcher(config: TrackerConfig, projectRoot: string, manager: NotationManager, onUpdate: () => void): FileWatcher;
7
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/dashboard/watcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAGjD,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,MAAM,IAAI,GAClB,WAAW,CAqCb"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createFileWatcher = createFileWatcher;
7
+ const chokidar_1 = __importDefault(require("chokidar"));
8
+ const scanner_1 = require("../scanner");
9
+ function createFileWatcher(config, projectRoot, manager, onUpdate) {
10
+ let debounceTimer = null;
11
+ const handleChange = () => {
12
+ if (debounceTimer)
13
+ clearTimeout(debounceTimer);
14
+ debounceTimer = setTimeout(async () => {
15
+ try {
16
+ const notations = await (0, scanner_1.scanFiles)(config, projectRoot);
17
+ manager.setAll(notations);
18
+ onUpdate();
19
+ }
20
+ catch (err) {
21
+ console.error('[tracker] Re-scan failed:', err);
22
+ }
23
+ }, 300);
24
+ };
25
+ const watcher = chokidar_1.default.watch(config.include, {
26
+ cwd: projectRoot,
27
+ ignored: config.exclude,
28
+ ignoreInitial: true,
29
+ awaitWriteFinish: {
30
+ stabilityThreshold: 100,
31
+ pollInterval: 50,
32
+ },
33
+ });
34
+ watcher.on('add', handleChange);
35
+ watcher.on('change', handleChange);
36
+ watcher.on('unlink', handleChange);
37
+ return {
38
+ close: async () => {
39
+ if (debounceTimer)
40
+ clearTimeout(debounceTimer);
41
+ await watcher.close();
42
+ },
43
+ };
44
+ }
@@ -0,0 +1,10 @@
1
+ import type { NotationAction } from '../types';
2
+ export interface ActionResult {
3
+ success: boolean;
4
+ message: string;
5
+ verb: string;
6
+ }
7
+ export type ActionHandler = (action: NotationAction) => Promise<ActionResult>;
8
+ export declare function registerActionHandler(verb: string, handler: ActionHandler): void;
9
+ export declare function executeAction(action: NotationAction): Promise<ActionResult>;
10
+ //# sourceMappingURL=action-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../../src/executor/action-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAI7E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAEhF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAUjF"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerActionHandler = registerActionHandler;
4
+ exports.executeAction = executeAction;
5
+ const handlers = new Map();
6
+ function registerActionHandler(verb, handler) {
7
+ handlers.set(verb, handler);
8
+ }
9
+ async function executeAction(action) {
10
+ const handler = handlers.get(action.verb);
11
+ if (!handler) {
12
+ return {
13
+ success: false,
14
+ message: `No handler registered for verb: ${action.verb}`,
15
+ verb: action.verb,
16
+ };
17
+ }
18
+ return handler(action);
19
+ }
@@ -0,0 +1,4 @@
1
+ export { handleReplace } from './replace-action';
2
+ export { handleRemove } from './remove-action';
3
+ export { handleRename } from './rename-action';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executor/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRename = exports.handleRemove = exports.handleReplace = void 0;
4
+ var replace_action_1 = require("./replace-action");
5
+ Object.defineProperty(exports, "handleReplace", { enumerable: true, get: function () { return replace_action_1.handleReplace; } });
6
+ var remove_action_1 = require("./remove-action");
7
+ Object.defineProperty(exports, "handleRemove", { enumerable: true, get: function () { return remove_action_1.handleRemove; } });
8
+ var rename_action_1 = require("./rename-action");
9
+ Object.defineProperty(exports, "handleRename", { enumerable: true, get: function () { return rename_action_1.handleRename; } });
@@ -0,0 +1,4 @@
1
+ import type { NotationAction } from '../../types';
2
+ import type { ActionResult } from '../action-executor';
3
+ export declare function handleRemove(action: NotationAction): Promise<ActionResult>;
4
+ //# sourceMappingURL=remove-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-action.d.ts","sourceRoot":"","sources":["../../../src/executor/actions/remove-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAMhF"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRemove = handleRemove;
4
+ async function handleRemove(action) {
5
+ return {
6
+ success: true,
7
+ message: `Would execute remove: ${action.raw}`,
8
+ verb: 'remove',
9
+ };
10
+ }
@@ -0,0 +1,4 @@
1
+ import type { NotationAction } from '../../types';
2
+ import type { ActionResult } from '../action-executor';
3
+ export declare function handleRename(action: NotationAction): Promise<ActionResult>;
4
+ //# sourceMappingURL=rename-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename-action.d.ts","sourceRoot":"","sources":["../../../src/executor/actions/rename-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAMhF"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRename = handleRename;
4
+ async function handleRename(action) {
5
+ return {
6
+ success: true,
7
+ message: `Would execute rename: ${action.raw}`,
8
+ verb: 'rename',
9
+ };
10
+ }
@@ -0,0 +1,4 @@
1
+ import type { NotationAction } from '../../types';
2
+ import type { ActionResult } from '../action-executor';
3
+ export declare function handleReplace(action: NotationAction): Promise<ActionResult>;
4
+ //# sourceMappingURL=replace-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-action.d.ts","sourceRoot":"","sources":["../../../src/executor/actions/replace-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,wBAAsB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAMjF"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleReplace = handleReplace;
4
+ async function handleReplace(action) {
5
+ return {
6
+ success: true,
7
+ message: `Would execute replace: ${action.raw}`,
8
+ verb: 'replace',
9
+ };
10
+ }
@@ -0,0 +1,4 @@
1
+ export { executeAction, registerActionHandler } from './action-executor';
2
+ export type { ActionResult, ActionHandler } from './action-executor';
3
+ export { handleReplace, handleRemove, handleRename } from './actions';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACxE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRename = exports.handleRemove = exports.handleReplace = exports.registerActionHandler = exports.executeAction = void 0;
4
+ var action_executor_1 = require("./action-executor");
5
+ Object.defineProperty(exports, "executeAction", { enumerable: true, get: function () { return action_executor_1.executeAction; } });
6
+ Object.defineProperty(exports, "registerActionHandler", { enumerable: true, get: function () { return action_executor_1.registerActionHandler; } });
7
+ var actions_1 = require("./actions");
8
+ Object.defineProperty(exports, "handleReplace", { enumerable: true, get: function () { return actions_1.handleReplace; } });
9
+ Object.defineProperty(exports, "handleRemove", { enumerable: true, get: function () { return actions_1.handleRemove; } });
10
+ Object.defineProperty(exports, "handleRename", { enumerable: true, get: function () { return actions_1.handleRename; } });
@@ -0,0 +1,20 @@
1
+ export { MarkerType, Priority, RiskLevel, Status, CompoundingRate } from './types';
2
+ export { ActionVerbEnum as ActionVerb } from './types';
3
+ export type { Notation, SourceLocation, PerformanceImpact, TechnicalDebt, NotationQuery, NotationStats, NotationAction, ActionArgs, ReplaceArgs, RemoveArgs, RenameArgs, InsertArgs, ExtractArgs, MoveArgs, WrapInArgs, GenericArgs, TrackerConfig, } from './types';
4
+ export { DEFAULT_CONFIG } from './types';
5
+ export { generateId, generateStableId, parseDate, isOverdue } from './utils';
6
+ export { JsonlStorage } from './storage';
7
+ export { loadConfig } from './storage';
8
+ export { parseAttributes, parseActions, parseFileContent, scanFiles } from './scanner';
9
+ export type { ParsedAttributes } from './scanner';
10
+ export { NotationManager } from './manager';
11
+ export { getBlockers, isBlocked, detectCircularDependencies } from './manager';
12
+ export { updateStatus, addTag, removeTag, setAssignee } from './manager';
13
+ export { validateNotation, validateAll, computeStats } from './manager';
14
+ export type { ValidationError } from './manager';
15
+ export { executeAction, registerActionHandler } from './executor';
16
+ export type { ActionResult, ActionHandler } from './executor';
17
+ export { handleReplace, handleRemove, handleRename } from './executor';
18
+ export { startDashboard } from './dashboard';
19
+ export type { DashboardConfig, DashboardServer } from './dashboard';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAClF,OAAO,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,SAAS,CAAA;AACtD,YAAY,EACX,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,aAAa,GACb,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAG5E,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAGtC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACtF,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACvE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startDashboard = exports.handleRename = exports.handleRemove = exports.handleReplace = exports.registerActionHandler = exports.executeAction = exports.computeStats = exports.validateAll = exports.validateNotation = exports.setAssignee = exports.removeTag = exports.addTag = exports.updateStatus = exports.detectCircularDependencies = exports.isBlocked = exports.getBlockers = exports.NotationManager = exports.scanFiles = exports.parseFileContent = exports.parseActions = exports.parseAttributes = exports.loadConfig = exports.JsonlStorage = exports.isOverdue = exports.parseDate = exports.generateStableId = exports.generateId = exports.DEFAULT_CONFIG = exports.ActionVerb = exports.CompoundingRate = exports.Status = exports.RiskLevel = exports.Priority = exports.MarkerType = void 0;
4
+ // Types
5
+ var types_1 = require("./types");
6
+ Object.defineProperty(exports, "MarkerType", { enumerable: true, get: function () { return types_1.MarkerType; } });
7
+ Object.defineProperty(exports, "Priority", { enumerable: true, get: function () { return types_1.Priority; } });
8
+ Object.defineProperty(exports, "RiskLevel", { enumerable: true, get: function () { return types_1.RiskLevel; } });
9
+ Object.defineProperty(exports, "Status", { enumerable: true, get: function () { return types_1.Status; } });
10
+ Object.defineProperty(exports, "CompoundingRate", { enumerable: true, get: function () { return types_1.CompoundingRate; } });
11
+ var types_2 = require("./types");
12
+ Object.defineProperty(exports, "ActionVerb", { enumerable: true, get: function () { return types_2.ActionVerbEnum; } });
13
+ var types_3 = require("./types");
14
+ Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function () { return types_3.DEFAULT_CONFIG; } });
15
+ // Utils
16
+ var utils_1 = require("./utils");
17
+ Object.defineProperty(exports, "generateId", { enumerable: true, get: function () { return utils_1.generateId; } });
18
+ Object.defineProperty(exports, "generateStableId", { enumerable: true, get: function () { return utils_1.generateStableId; } });
19
+ Object.defineProperty(exports, "parseDate", { enumerable: true, get: function () { return utils_1.parseDate; } });
20
+ Object.defineProperty(exports, "isOverdue", { enumerable: true, get: function () { return utils_1.isOverdue; } });
21
+ // Storage
22
+ var storage_1 = require("./storage");
23
+ Object.defineProperty(exports, "JsonlStorage", { enumerable: true, get: function () { return storage_1.JsonlStorage; } });
24
+ var storage_2 = require("./storage");
25
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return storage_2.loadConfig; } });
26
+ // Scanner
27
+ var scanner_1 = require("./scanner");
28
+ Object.defineProperty(exports, "parseAttributes", { enumerable: true, get: function () { return scanner_1.parseAttributes; } });
29
+ Object.defineProperty(exports, "parseActions", { enumerable: true, get: function () { return scanner_1.parseActions; } });
30
+ Object.defineProperty(exports, "parseFileContent", { enumerable: true, get: function () { return scanner_1.parseFileContent; } });
31
+ Object.defineProperty(exports, "scanFiles", { enumerable: true, get: function () { return scanner_1.scanFiles; } });
32
+ // Manager
33
+ var manager_1 = require("./manager");
34
+ Object.defineProperty(exports, "NotationManager", { enumerable: true, get: function () { return manager_1.NotationManager; } });
35
+ var manager_2 = require("./manager");
36
+ Object.defineProperty(exports, "getBlockers", { enumerable: true, get: function () { return manager_2.getBlockers; } });
37
+ Object.defineProperty(exports, "isBlocked", { enumerable: true, get: function () { return manager_2.isBlocked; } });
38
+ Object.defineProperty(exports, "detectCircularDependencies", { enumerable: true, get: function () { return manager_2.detectCircularDependencies; } });
39
+ var manager_3 = require("./manager");
40
+ Object.defineProperty(exports, "updateStatus", { enumerable: true, get: function () { return manager_3.updateStatus; } });
41
+ Object.defineProperty(exports, "addTag", { enumerable: true, get: function () { return manager_3.addTag; } });
42
+ Object.defineProperty(exports, "removeTag", { enumerable: true, get: function () { return manager_3.removeTag; } });
43
+ Object.defineProperty(exports, "setAssignee", { enumerable: true, get: function () { return manager_3.setAssignee; } });
44
+ var manager_4 = require("./manager");
45
+ Object.defineProperty(exports, "validateNotation", { enumerable: true, get: function () { return manager_4.validateNotation; } });
46
+ Object.defineProperty(exports, "validateAll", { enumerable: true, get: function () { return manager_4.validateAll; } });
47
+ Object.defineProperty(exports, "computeStats", { enumerable: true, get: function () { return manager_4.computeStats; } });
48
+ // Executor
49
+ var executor_1 = require("./executor");
50
+ Object.defineProperty(exports, "executeAction", { enumerable: true, get: function () { return executor_1.executeAction; } });
51
+ Object.defineProperty(exports, "registerActionHandler", { enumerable: true, get: function () { return executor_1.registerActionHandler; } });
52
+ var executor_2 = require("./executor");
53
+ Object.defineProperty(exports, "handleReplace", { enumerable: true, get: function () { return executor_2.handleReplace; } });
54
+ Object.defineProperty(exports, "handleRemove", { enumerable: true, get: function () { return executor_2.handleRemove; } });
55
+ Object.defineProperty(exports, "handleRename", { enumerable: true, get: function () { return executor_2.handleRename; } });
56
+ // Dashboard
57
+ var dashboard_1 = require("./dashboard");
58
+ Object.defineProperty(exports, "startDashboard", { enumerable: true, get: function () { return dashboard_1.startDashboard; } });
@@ -0,0 +1,7 @@
1
+ export { NotationManager } from './notation-manager';
2
+ export { getBlockers, isBlocked, detectCircularDependencies } from './relationship-manager';
3
+ export { updateStatus, addTag, removeTag, setAssignee } from './notation-updater';
4
+ export { validateNotation, validateAll } from './validator';
5
+ export type { ValidationError } from './validator';
6
+ export { computeStats } from './stats';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3D,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeStats = exports.validateAll = exports.validateNotation = exports.setAssignee = exports.removeTag = exports.addTag = exports.updateStatus = exports.detectCircularDependencies = exports.isBlocked = exports.getBlockers = exports.NotationManager = void 0;
4
+ var notation_manager_1 = require("./notation-manager");
5
+ Object.defineProperty(exports, "NotationManager", { enumerable: true, get: function () { return notation_manager_1.NotationManager; } });
6
+ var relationship_manager_1 = require("./relationship-manager");
7
+ Object.defineProperty(exports, "getBlockers", { enumerable: true, get: function () { return relationship_manager_1.getBlockers; } });
8
+ Object.defineProperty(exports, "isBlocked", { enumerable: true, get: function () { return relationship_manager_1.isBlocked; } });
9
+ Object.defineProperty(exports, "detectCircularDependencies", { enumerable: true, get: function () { return relationship_manager_1.detectCircularDependencies; } });
10
+ var notation_updater_1 = require("./notation-updater");
11
+ Object.defineProperty(exports, "updateStatus", { enumerable: true, get: function () { return notation_updater_1.updateStatus; } });
12
+ Object.defineProperty(exports, "addTag", { enumerable: true, get: function () { return notation_updater_1.addTag; } });
13
+ Object.defineProperty(exports, "removeTag", { enumerable: true, get: function () { return notation_updater_1.removeTag; } });
14
+ Object.defineProperty(exports, "setAssignee", { enumerable: true, get: function () { return notation_updater_1.setAssignee; } });
15
+ var validator_1 = require("./validator");
16
+ Object.defineProperty(exports, "validateNotation", { enumerable: true, get: function () { return validator_1.validateNotation; } });
17
+ Object.defineProperty(exports, "validateAll", { enumerable: true, get: function () { return validator_1.validateAll; } });
18
+ var stats_1 = require("./stats");
19
+ Object.defineProperty(exports, "computeStats", { enumerable: true, get: function () { return stats_1.computeStats; } });
@@ -0,0 +1,18 @@
1
+ import type { Notation, NotationQuery, NotationStats, TrackerConfig } from '../types';
2
+ import { type ValidationError } from './validator';
3
+ export declare class NotationManager {
4
+ private storage;
5
+ private notations;
6
+ private config;
7
+ constructor(config: TrackerConfig);
8
+ load(): Promise<void>;
9
+ save(): Promise<void>;
10
+ getAll(): Notation[];
11
+ setAll(notations: Notation[]): void;
12
+ getById(id: string): Notation | undefined;
13
+ query(q: NotationQuery): Notation[];
14
+ update(id: string, updates: Partial<Notation>): boolean;
15
+ validate(): ValidationError[];
16
+ stats(): NotationStats;
17
+ }
18
+ //# sourceMappingURL=notation-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notation-manager.d.ts","sourceRoot":"","sources":["../../src/manager/notation-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIrF,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAG/D,qBAAa,eAAe;IAC3B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,aAAa;IAQ3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,MAAM,IAAI,QAAQ,EAAE;IAIpB,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAInC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIzC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,QAAQ,EAAE;IA4CnC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO;IAOvD,QAAQ,IAAI,eAAe,EAAE;IAI7B,KAAK,IAAI,aAAa;CAGtB"}