@know-graph/core 0.4.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 (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/connectors/cache.d.ts +25 -0
  4. package/dist/connectors/cache.d.ts.map +1 -0
  5. package/dist/connectors/cache.js +73 -0
  6. package/dist/connectors/cache.js.map +1 -0
  7. package/dist/connectors/index.d.ts +12 -0
  8. package/dist/connectors/index.d.ts.map +1 -0
  9. package/dist/connectors/index.js +7 -0
  10. package/dist/connectors/index.js.map +1 -0
  11. package/dist/connectors/jira-connector.d.ts +26 -0
  12. package/dist/connectors/jira-connector.d.ts.map +1 -0
  13. package/dist/connectors/jira-connector.js +234 -0
  14. package/dist/connectors/jira-connector.js.map +1 -0
  15. package/dist/connectors/notion-connector.d.ts +24 -0
  16. package/dist/connectors/notion-connector.d.ts.map +1 -0
  17. package/dist/connectors/notion-connector.js +246 -0
  18. package/dist/connectors/notion-connector.js.map +1 -0
  19. package/dist/connectors/rate-limiter.d.ts +23 -0
  20. package/dist/connectors/rate-limiter.d.ts.map +1 -0
  21. package/dist/connectors/rate-limiter.js +54 -0
  22. package/dist/connectors/rate-limiter.js.map +1 -0
  23. package/dist/connectors/registry.d.ts +15 -0
  24. package/dist/connectors/registry.d.ts.map +1 -0
  25. package/dist/connectors/registry.js +72 -0
  26. package/dist/connectors/registry.js.map +1 -0
  27. package/dist/connectors/types.d.ts +142 -0
  28. package/dist/connectors/types.d.ts.map +1 -0
  29. package/dist/connectors/types.js +35 -0
  30. package/dist/connectors/types.js.map +1 -0
  31. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts +9 -0
  32. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.d.ts.map +1 -0
  33. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js +11 -0
  34. package/dist/coverage/__tests__/fixtures/mixed-project/annotated.js.map +1 -0
  35. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts +2 -0
  36. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.d.ts.map +1 -0
  37. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js +4 -0
  38. package/dist/coverage/__tests__/fixtures/mixed-project/unannotated.js.map +1 -0
  39. package/dist/coverage/coverage-calculator.d.ts +3 -0
  40. package/dist/coverage/coverage-calculator.d.ts.map +1 -0
  41. package/dist/coverage/coverage-calculator.js +204 -0
  42. package/dist/coverage/coverage-calculator.js.map +1 -0
  43. package/dist/coverage/index.d.ts +3 -0
  44. package/dist/coverage/index.d.ts.map +1 -0
  45. package/dist/coverage/index.js +2 -0
  46. package/dist/coverage/index.js.map +1 -0
  47. package/dist/coverage/types.d.ts +38 -0
  48. package/dist/coverage/types.d.ts.map +1 -0
  49. package/dist/coverage/types.js +13 -0
  50. package/dist/coverage/types.js.map +1 -0
  51. package/dist/index.d.ts +17 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +16 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/indexer/database.d.ts +32 -0
  56. package/dist/indexer/database.d.ts.map +1 -0
  57. package/dist/indexer/database.js +242 -0
  58. package/dist/indexer/database.js.map +1 -0
  59. package/dist/indexer/index.d.ts +7 -0
  60. package/dist/indexer/index.d.ts.map +1 -0
  61. package/dist/indexer/index.js +4 -0
  62. package/dist/indexer/index.js.map +1 -0
  63. package/dist/indexer/indexer.d.ts +12 -0
  64. package/dist/indexer/indexer.d.ts.map +1 -0
  65. package/dist/indexer/indexer.js +145 -0
  66. package/dist/indexer/indexer.js.map +1 -0
  67. package/dist/indexer/schema.d.ts +21 -0
  68. package/dist/indexer/schema.d.ts.map +1 -0
  69. package/dist/indexer/schema.js +122 -0
  70. package/dist/indexer/schema.js.map +1 -0
  71. package/dist/indexer/types.d.ts +85 -0
  72. package/dist/indexer/types.d.ts.map +1 -0
  73. package/dist/indexer/types.js +2 -0
  74. package/dist/indexer/types.js.map +1 -0
  75. package/dist/parsers/generic-parser.d.ts +3 -0
  76. package/dist/parsers/generic-parser.d.ts.map +1 -0
  77. package/dist/parsers/generic-parser.js +150 -0
  78. package/dist/parsers/generic-parser.js.map +1 -0
  79. package/dist/parsers/go-parser.d.ts +3 -0
  80. package/dist/parsers/go-parser.d.ts.map +1 -0
  81. package/dist/parsers/go-parser.js +437 -0
  82. package/dist/parsers/go-parser.js.map +1 -0
  83. package/dist/parsers/index.d.ts +10 -0
  84. package/dist/parsers/index.d.ts.map +1 -0
  85. package/dist/parsers/index.js +8 -0
  86. package/dist/parsers/index.js.map +1 -0
  87. package/dist/parsers/java-parser.d.ts +3 -0
  88. package/dist/parsers/java-parser.d.ts.map +1 -0
  89. package/dist/parsers/java-parser.js +321 -0
  90. package/dist/parsers/java-parser.js.map +1 -0
  91. package/dist/parsers/metadata-extractor.d.ts +25 -0
  92. package/dist/parsers/metadata-extractor.d.ts.map +1 -0
  93. package/dist/parsers/metadata-extractor.js +137 -0
  94. package/dist/parsers/metadata-extractor.js.map +1 -0
  95. package/dist/parsers/python-parser.d.ts +3 -0
  96. package/dist/parsers/python-parser.d.ts.map +1 -0
  97. package/dist/parsers/python-parser.js +226 -0
  98. package/dist/parsers/python-parser.js.map +1 -0
  99. package/dist/parsers/registry.d.ts +3 -0
  100. package/dist/parsers/registry.d.ts.map +1 -0
  101. package/dist/parsers/registry.js +41 -0
  102. package/dist/parsers/registry.js.map +1 -0
  103. package/dist/parsers/types.d.ts +23 -0
  104. package/dist/parsers/types.d.ts.map +1 -0
  105. package/dist/parsers/types.js +2 -0
  106. package/dist/parsers/types.js.map +1 -0
  107. package/dist/parsers/typescript-parser.d.ts +3 -0
  108. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  109. package/dist/parsers/typescript-parser.js +321 -0
  110. package/dist/parsers/typescript-parser.js.map +1 -0
  111. package/dist/query/index.d.ts +3 -0
  112. package/dist/query/index.d.ts.map +1 -0
  113. package/dist/query/index.js +2 -0
  114. package/dist/query/index.js.map +1 -0
  115. package/dist/query/query-engine.d.ts +40 -0
  116. package/dist/query/query-engine.d.ts.map +1 -0
  117. package/dist/query/query-engine.js +126 -0
  118. package/dist/query/query-engine.js.map +1 -0
  119. package/dist/suggest/index.d.ts +3 -0
  120. package/dist/suggest/index.d.ts.map +1 -0
  121. package/dist/suggest/index.js +2 -0
  122. package/dist/suggest/index.js.map +1 -0
  123. package/dist/suggest/suggestion-engine.d.ts +7 -0
  124. package/dist/suggest/suggestion-engine.d.ts.map +1 -0
  125. package/dist/suggest/suggestion-engine.js +239 -0
  126. package/dist/suggest/suggestion-engine.js.map +1 -0
  127. package/dist/suggest/types.d.ts +29 -0
  128. package/dist/suggest/types.d.ts.map +1 -0
  129. package/dist/suggest/types.js +13 -0
  130. package/dist/suggest/types.js.map +1 -0
  131. package/dist/types/entity.d.ts +336 -0
  132. package/dist/types/entity.d.ts.map +1 -0
  133. package/dist/types/entity.js +99 -0
  134. package/dist/types/entity.js.map +1 -0
  135. package/dist/types/index.d.ts +6 -0
  136. package/dist/types/index.d.ts.map +1 -0
  137. package/dist/types/index.js +3 -0
  138. package/dist/types/index.js.map +1 -0
  139. package/dist/types/manifest.d.ts +488 -0
  140. package/dist/types/manifest.d.ts.map +1 -0
  141. package/dist/types/manifest.js +66 -0
  142. package/dist/types/manifest.js.map +1 -0
  143. package/dist/types/parse-result.d.ts +25 -0
  144. package/dist/types/parse-result.d.ts.map +1 -0
  145. package/dist/types/parse-result.js +2 -0
  146. package/dist/types/parse-result.js.map +1 -0
  147. package/dist/validation/index.d.ts +5 -0
  148. package/dist/validation/index.d.ts.map +1 -0
  149. package/dist/validation/index.js +3 -0
  150. package/dist/validation/index.js.map +1 -0
  151. package/dist/validation/rules.d.ts +9 -0
  152. package/dist/validation/rules.d.ts.map +1 -0
  153. package/dist/validation/rules.js +119 -0
  154. package/dist/validation/rules.js.map +1 -0
  155. package/dist/validation/types.d.ts +34 -0
  156. package/dist/validation/types.d.ts.map +1 -0
  157. package/dist/validation/types.js +2 -0
  158. package/dist/validation/types.js.map +1 -0
  159. package/dist/validation/validator.d.ts +10 -0
  160. package/dist/validation/validator.d.ts.map +1 -0
  161. package/dist/validation/validator.js +111 -0
  162. package/dist/validation/validator.js.map +1 -0
  163. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 KnowGraph Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # @know-graph/core
2
+
3
+ Core library for [KnowGraph](https://github.com/idosams/know-know) — parsers, indexer, query engine, and type definitions.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @know-graph/core
9
+ ```
10
+
11
+ ## What's Included
12
+
13
+ - **Parsers** — Language-specific parsers for Python, TypeScript/JavaScript, and a generic comment parser
14
+ - **Metadata Extractor** — Extracts and validates `@knowgraph` YAML metadata from code comments
15
+ - **Indexer** — SQLite-backed indexer with FTS5 full-text search
16
+ - **Query Engine** — Search and filter indexed entities by text, owner, tags, type, and status
17
+ - **Types** — Zod schemas and TypeScript types for entities, metadata, and manifests
18
+
19
+ ## Usage
20
+
21
+ ```typescript
22
+ import {
23
+ createDefaultRegistry,
24
+ createIndexer,
25
+ createQueryEngine,
26
+ } from '@know-graph/core';
27
+
28
+ // Parse files
29
+ const registry = createDefaultRegistry();
30
+ const results = registry.parse(fileContent, 'src/auth.ts');
31
+
32
+ // Index a project
33
+ const indexer = createIndexer({ dbPath: '.knowgraph/knowgraph.db' });
34
+ await indexer.indexDirectory('./src');
35
+
36
+ // Query the index
37
+ const engine = createQueryEngine('.knowgraph/knowgraph.db');
38
+ const entities = engine.search('authentication', { owner: 'auth-team' });
39
+ ```
40
+
41
+ ## Documentation
42
+
43
+ See the [main repository](https://github.com/idosams/know-know) for full documentation, annotation format, and examples.
44
+
45
+ ## License
46
+
47
+ MIT
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @knowgraph
3
+ * type: module
4
+ * description: In-memory TTL cache for connector API responses to reduce external calls
5
+ * owner: knowgraph-core
6
+ * status: experimental
7
+ * tags: [connector, cache, ttl, performance]
8
+ * context:
9
+ * business_goal: Reduce API calls to external services by caching responses
10
+ * domain: connectors
11
+ */
12
+ export interface ConnectorCache<T = unknown> {
13
+ get(key: string): T | undefined;
14
+ set(key: string, value: T): void;
15
+ has(key: string): boolean;
16
+ delete(key: string): boolean;
17
+ clear(): void;
18
+ size(): number;
19
+ }
20
+ export interface CacheOptions {
21
+ readonly ttlMs: number;
22
+ readonly maxEntries?: number;
23
+ }
24
+ export declare function createCache<T = unknown>(options: CacheOptions): ConnectorCache<T>;
25
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/connectors/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAkEjF"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @knowgraph
3
+ * type: module
4
+ * description: In-memory TTL cache for connector API responses to reduce external calls
5
+ * owner: knowgraph-core
6
+ * status: experimental
7
+ * tags: [connector, cache, ttl, performance]
8
+ * context:
9
+ * business_goal: Reduce API calls to external services by caching responses
10
+ * domain: connectors
11
+ */
12
+ export function createCache(options) {
13
+ const { ttlMs, maxEntries = 1000 } = options;
14
+ const entries = new Map();
15
+ function isExpired(entry) {
16
+ return Date.now() >= entry.expiresAt;
17
+ }
18
+ function evictExpired() {
19
+ for (const [key, entry] of entries) {
20
+ if (isExpired(entry)) {
21
+ entries.delete(key);
22
+ }
23
+ }
24
+ }
25
+ function evictOldest() {
26
+ if (entries.size <= maxEntries)
27
+ return;
28
+ const firstKey = entries.keys().next().value;
29
+ if (firstKey !== undefined) {
30
+ entries.delete(firstKey);
31
+ }
32
+ }
33
+ return {
34
+ get(key) {
35
+ const entry = entries.get(key);
36
+ if (!entry)
37
+ return undefined;
38
+ if (isExpired(entry)) {
39
+ entries.delete(key);
40
+ return undefined;
41
+ }
42
+ return entry.value;
43
+ },
44
+ set(key, value) {
45
+ entries.set(key, {
46
+ value,
47
+ expiresAt: Date.now() + ttlMs,
48
+ });
49
+ evictOldest();
50
+ },
51
+ has(key) {
52
+ const entry = entries.get(key);
53
+ if (!entry)
54
+ return false;
55
+ if (isExpired(entry)) {
56
+ entries.delete(key);
57
+ return false;
58
+ }
59
+ return true;
60
+ },
61
+ delete(key) {
62
+ return entries.delete(key);
63
+ },
64
+ clear() {
65
+ entries.clear();
66
+ },
67
+ size() {
68
+ evictExpired();
69
+ return entries.size;
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/connectors/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,UAAU,WAAW,CAAc,OAAqB;IAC5D,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjD,SAAS,SAAS,CAAC,KAAoB;QACrC,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,SAAS,YAAY;QACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,WAAW;QAClB,IAAI,OAAO,CAAC,IAAI,IAAI,UAAU;YAAE,OAAO;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,CAAC,GAAW;YACb,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK;gBAAE,OAAO,SAAS,CAAC;YAC7B,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,GAAG,CAAC,GAAW,EAAE,KAAQ;YACvB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBACf,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC9B,CAAC,CAAC;YACH,WAAW,EAAE,CAAC;QAChB,CAAC;QAED,GAAG,CAAC,GAAW;YACb,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACzB,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,GAAW;YAChB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK;YACH,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QAED,IAAI;YACF,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type { Connector, ConnectorRegistry, ConnectorSyncOptions, ConnectorSyncResult, ConnectorError, ConnectorValidationResult, ConnectorValidationIssue, SyncAllOptions, } from './types.js';
2
+ export { ConnectorValidationIssueSchema, ConnectorValidationResultSchema, ConnectorErrorSchema, ConnectorSyncResultSchema, } from './types.js';
3
+ export { createConnectorRegistry, createDefaultConnectorRegistry, } from './registry.js';
4
+ export type { ConnectorCache, CacheOptions } from './cache.js';
5
+ export { createCache } from './cache.js';
6
+ export type { RateLimiter, RateLimiterOptions } from './rate-limiter.js';
7
+ export { createRateLimiter } from './rate-limiter.js';
8
+ export type { NotionPage, NotionApiClient } from './notion-connector.js';
9
+ export { createNotionConnector, isNotionUrl, extractNotionPageId, } from './notion-connector.js';
10
+ export type { JiraIssue, JiraApiClient } from './jira-connector.js';
11
+ export { createJiraConnector, isJiraUrl, extractJiraIssueKey, } from './jira-connector.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { ConnectorValidationIssueSchema, ConnectorValidationResultSchema, ConnectorErrorSchema, ConnectorSyncResultSchema, } from './types.js';
2
+ export { createConnectorRegistry, createDefaultConnectorRegistry, } from './registry.js';
3
+ export { createCache } from './cache.js';
4
+ export { createRateLimiter } from './rate-limiter.js';
5
+ export { createNotionConnector, isNotionUrl, extractNotionPageId, } from './notion-connector.js';
6
+ export { createJiraConnector, isJiraUrl, extractJiraIssueKey, } from './jira-connector.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { Connector } from './types.js';
2
+ import type { ConnectorCache } from './cache.js';
3
+ import type { RateLimiter } from './rate-limiter.js';
4
+ export interface JiraIssue {
5
+ readonly key: string;
6
+ readonly url: string;
7
+ readonly summary: string;
8
+ readonly status: string;
9
+ readonly assignee?: string;
10
+ readonly priority?: string;
11
+ readonly lastUpdated: string;
12
+ }
13
+ export interface JiraApiClient {
14
+ getIssue(issueKey: string): Promise<JiraIssue>;
15
+ searchIssues(jql: string): Promise<readonly JiraIssue[]>;
16
+ }
17
+ export declare function isJiraUrl(url: string): boolean;
18
+ export declare function extractJiraIssueKey(url: string): string | undefined;
19
+ export declare function createJiraApiClient(baseUrl: string, apiKey: string, email?: string): JiraApiClient;
20
+ export interface JiraConnectorDeps {
21
+ readonly apiClient?: JiraApiClient;
22
+ readonly cache?: ConnectorCache<JiraIssue>;
23
+ readonly rateLimiter?: RateLimiter;
24
+ }
25
+ export declare function createJiraConnector(deps?: JiraConnectorDeps): Connector;
26
+ //# sourceMappingURL=jira-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-connector.d.ts","sourceRoot":"","sources":["../../src/connectors/jira-connector.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,SAAS,EAKV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/C,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;CAC1D;AAQD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGnE;AAID,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,aAAa,CAoEf;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AAsFD,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,iBAAsB,GAAG,SAAS,CAmI3E"}
@@ -0,0 +1,234 @@
1
+ import { createCache } from './cache.js';
2
+ import { createRateLimiter } from './rate-limiter.js';
3
+ // --- Jira URL Utilities ---
4
+ const JIRA_ISSUE_PATTERN = /\/browse\/([A-Z][A-Z0-9_]+-\d+)/;
5
+ const JIRA_URL_PATTERN = /^https?:\/\/[^/]+\.(atlassian\.net|jira\.[^/]+)\/browse\//;
6
+ export function isJiraUrl(url) {
7
+ return JIRA_URL_PATTERN.test(url);
8
+ }
9
+ export function extractJiraIssueKey(url) {
10
+ const match = url.match(JIRA_ISSUE_PATTERN);
11
+ return match?.[1];
12
+ }
13
+ // --- Fetch-based Jira API Client ---
14
+ export function createJiraApiClient(baseUrl, apiKey, email) {
15
+ const apiBase = baseUrl.replace(/\/$/, '');
16
+ const authHeader = email
17
+ ? `Basic ${Buffer.from(`${email}:${apiKey}`).toString('base64')}`
18
+ : `Bearer ${apiKey}`;
19
+ const headers = {
20
+ Authorization: authHeader,
21
+ Accept: 'application/json',
22
+ 'Content-Type': 'application/json',
23
+ };
24
+ function parseIssue(data, issueBaseUrl) {
25
+ const fields = data.fields;
26
+ const status = fields.status;
27
+ const assignee = fields.assignee;
28
+ const priority = fields.priority;
29
+ return {
30
+ key: data.key,
31
+ url: `${issueBaseUrl}/browse/${data.key}`,
32
+ summary: fields.summary ?? '',
33
+ status: status?.name ?? 'Unknown',
34
+ assignee: assignee?.displayName,
35
+ priority: priority?.name,
36
+ lastUpdated: fields.updated ?? '',
37
+ };
38
+ }
39
+ return {
40
+ async getIssue(issueKey) {
41
+ const response = await fetch(`${apiBase}/rest/api/3/issue/${issueKey}?fields=summary,status,assignee,priority,updated`, { headers });
42
+ if (!response.ok) {
43
+ throw new Error(`Jira API error: ${response.status} ${response.statusText}`);
44
+ }
45
+ const data = (await response.json());
46
+ return parseIssue(data, apiBase);
47
+ },
48
+ async searchIssues(jql) {
49
+ const response = await fetch(`${apiBase}/rest/api/3/search`, {
50
+ method: 'POST',
51
+ headers,
52
+ body: JSON.stringify({
53
+ jql,
54
+ maxResults: 10,
55
+ fields: ['summary', 'status', 'assignee', 'priority', 'updated'],
56
+ }),
57
+ });
58
+ if (!response.ok) {
59
+ throw new Error(`Jira API error: ${response.status} ${response.statusText}`);
60
+ }
61
+ const data = (await response.json());
62
+ return data.issues.map((issue) => parseIssue(issue, apiBase));
63
+ },
64
+ };
65
+ }
66
+ function getAllEntities(dbManager) {
67
+ const rows = dbManager.db
68
+ .prepare('SELECT * FROM entities ORDER BY name ASC')
69
+ .all();
70
+ return rows.map((row) => {
71
+ const tags = dbManager.db
72
+ .prepare('SELECT tag FROM tags WHERE entity_id = ?')
73
+ .all(row.id).map((t) => t.tag);
74
+ const links = dbManager.db
75
+ .prepare('SELECT link_type, url, title FROM links WHERE entity_id = ?')
76
+ .all(row.id).map((l) => ({
77
+ type: l.link_type,
78
+ url: l.url,
79
+ title: l.title ?? undefined,
80
+ }));
81
+ return {
82
+ id: row.id,
83
+ filePath: row.file_path,
84
+ name: row.name,
85
+ entityType: row.entity_type,
86
+ description: row.description,
87
+ rawDocstring: row.raw_docstring,
88
+ signature: row.signature,
89
+ parent: row.parent,
90
+ language: row.language,
91
+ line: row.line,
92
+ column: row.column_num,
93
+ owner: row.owner,
94
+ status: row.status,
95
+ metadata: JSON.parse(row.metadata_json),
96
+ tags,
97
+ links,
98
+ fileHash: row.file_hash,
99
+ createdAt: row.created_at,
100
+ updatedAt: row.updated_at,
101
+ };
102
+ });
103
+ }
104
+ function filterEntities(entities, filter) {
105
+ if (!filter)
106
+ return entities;
107
+ return entities.filter((entity) => {
108
+ if (filter.owner && entity.owner !== filter.owner)
109
+ return false;
110
+ if (filter.tags && filter.tags.length > 0) {
111
+ const hasMatchingTag = filter.tags.some((t) => entity.tags.includes(t));
112
+ if (!hasMatchingTag)
113
+ return false;
114
+ }
115
+ return true;
116
+ });
117
+ }
118
+ export function createJiraConnector(deps = {}) {
119
+ const cache = deps.cache ?? createCache({ ttlMs: 5 * 60 * 1000 });
120
+ const rateLimiter = deps.rateLimiter ??
121
+ createRateLimiter({
122
+ maxTokens: 10,
123
+ refillRate: 10,
124
+ refillIntervalMs: 1000,
125
+ });
126
+ return {
127
+ name: 'jira',
128
+ supportedLinkTypes: ['jira'],
129
+ validate(config) {
130
+ const issues = [];
131
+ if (!config.base_url) {
132
+ issues.push({
133
+ field: 'base_url',
134
+ message: 'base_url is required (Jira instance URL)',
135
+ });
136
+ }
137
+ if (!config.api_key_env) {
138
+ issues.push({
139
+ field: 'api_key_env',
140
+ message: 'api_key_env is required (env variable name for Jira API key)',
141
+ });
142
+ }
143
+ else if (!process.env[config.api_key_env]) {
144
+ issues.push({
145
+ field: 'api_key_env',
146
+ message: `Environment variable "${config.api_key_env}" is not set`,
147
+ });
148
+ }
149
+ return { valid: issues.length === 0, issues };
150
+ },
151
+ async sync(options) {
152
+ const startTime = Date.now();
153
+ const { dbManager, config, entityFilter, dryRun } = options;
154
+ const errors = [];
155
+ const linksAdded = 0;
156
+ let linksUpdated = 0;
157
+ const apiKey = config.api_key_env
158
+ ? process.env[config.api_key_env]
159
+ : undefined;
160
+ if (!apiKey || !config.base_url) {
161
+ return {
162
+ connector: 'jira',
163
+ entitiesProcessed: 0,
164
+ linksAdded: 0,
165
+ linksUpdated: 0,
166
+ errors: [
167
+ {
168
+ entityId: '',
169
+ message: 'Jira API key or base URL not configured',
170
+ code: 'AUTH_MISSING',
171
+ },
172
+ ],
173
+ duration: Date.now() - startTime,
174
+ };
175
+ }
176
+ const apiClient = deps.apiClient ?? createJiraApiClient(config.base_url, apiKey);
177
+ const allEntities = getAllEntities(dbManager);
178
+ const entities = filterEntities(allEntities, entityFilter);
179
+ for (const entity of entities) {
180
+ const jiraLinks = entity.links.filter((l) => l.type === 'jira' || (l.url && isJiraUrl(l.url)));
181
+ for (const link of jiraLinks) {
182
+ const issueKey = extractJiraIssueKey(link.url);
183
+ if (!issueKey)
184
+ continue;
185
+ try {
186
+ const cached = cache.get(issueKey);
187
+ let issue;
188
+ if (cached) {
189
+ issue = cached;
190
+ }
191
+ else {
192
+ await rateLimiter.acquire();
193
+ issue = await apiClient.getIssue(issueKey);
194
+ cache.set(issueKey, issue);
195
+ }
196
+ const title = `[${issue.status}] ${issue.summary}`;
197
+ if (!dryRun) {
198
+ dbManager.db
199
+ .prepare('DELETE FROM links WHERE entity_id = ? AND url = ?')
200
+ .run(entity.id, link.url);
201
+ dbManager.insertLinks(entity.id, [
202
+ {
203
+ type: 'jira',
204
+ url: link.url,
205
+ title,
206
+ },
207
+ ]);
208
+ linksUpdated++;
209
+ }
210
+ else {
211
+ linksUpdated++;
212
+ }
213
+ }
214
+ catch (err) {
215
+ errors.push({
216
+ entityId: entity.id,
217
+ message: `Failed to fetch Jira issue ${issueKey}: ${err instanceof Error ? err.message : String(err)}`,
218
+ code: 'FETCH_ERROR',
219
+ });
220
+ }
221
+ }
222
+ }
223
+ return {
224
+ connector: 'jira',
225
+ entitiesProcessed: entities.length,
226
+ linksAdded,
227
+ linksUpdated,
228
+ errors,
229
+ duration: Date.now() - startTime,
230
+ };
231
+ },
232
+ };
233
+ }
234
+ //# sourceMappingURL=jira-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-connector.js","sourceRoot":"","sources":["../../src/connectors/jira-connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Connector } from './types.js';
2
+ import type { ConnectorCache } from './cache.js';
3
+ import type { RateLimiter } from './rate-limiter.js';
4
+ export interface NotionPage {
5
+ readonly id: string;
6
+ readonly url: string;
7
+ readonly title: string;
8
+ readonly lastEditedTime: string;
9
+ readonly status?: string;
10
+ }
11
+ export interface NotionApiClient {
12
+ getPage(pageId: string): Promise<NotionPage>;
13
+ searchPages(query: string): Promise<readonly NotionPage[]>;
14
+ }
15
+ export declare function isNotionUrl(url: string): boolean;
16
+ export declare function extractNotionPageId(url: string): string | undefined;
17
+ export declare function createNotionApiClient(apiKey: string): NotionApiClient;
18
+ export interface NotionConnectorDeps {
19
+ readonly apiClient?: NotionApiClient;
20
+ readonly cache?: ConnectorCache<NotionPage>;
21
+ readonly rateLimiter?: RateLimiter;
22
+ }
23
+ export declare function createNotionConnector(deps?: NotionConnectorDeps): Connector;
24
+ //# sourceMappingURL=notion-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-connector.d.ts","sourceRoot":"","sources":["../../src/connectors/notion-connector.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,SAAS,EAKV,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMrD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;CAC5D;AAOD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAInE;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAiFrE;AAID,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC;AAsFD,wBAAgB,qBAAqB,CACnC,IAAI,GAAE,mBAAwB,GAC7B,SAAS,CAsHX"}