@blink-authority-com/claude-code-plugin 1.0.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 (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/dist/bsec-client.d.ts +35 -0
  4. package/dist/bsec-client.d.ts.map +1 -0
  5. package/dist/bsec-client.js +122 -0
  6. package/dist/bsec-client.js.map +1 -0
  7. package/dist/docs/cache.d.ts +19 -0
  8. package/dist/docs/cache.d.ts.map +1 -0
  9. package/dist/docs/cache.js +92 -0
  10. package/dist/docs/cache.js.map +1 -0
  11. package/dist/docs/fetcher.d.ts +19 -0
  12. package/dist/docs/fetcher.d.ts.map +1 -0
  13. package/dist/docs/fetcher.js +81 -0
  14. package/dist/docs/fetcher.js.map +1 -0
  15. package/dist/docs/parser.d.ts +33 -0
  16. package/dist/docs/parser.d.ts.map +1 -0
  17. package/dist/docs/parser.js +145 -0
  18. package/dist/docs/parser.js.map +1 -0
  19. package/dist/docs/search.d.ts +38 -0
  20. package/dist/docs/search.d.ts.map +1 -0
  21. package/dist/docs/search.js +180 -0
  22. package/dist/docs/search.js.map +1 -0
  23. package/dist/docs/tools/api.d.ts +12 -0
  24. package/dist/docs/tools/api.d.ts.map +1 -0
  25. package/dist/docs/tools/api.js +58 -0
  26. package/dist/docs/tools/api.js.map +1 -0
  27. package/dist/docs/tools/cli.d.ts +12 -0
  28. package/dist/docs/tools/cli.d.ts.map +1 -0
  29. package/dist/docs/tools/cli.js +56 -0
  30. package/dist/docs/tools/cli.js.map +1 -0
  31. package/dist/docs/tools/concepts.d.ts +18 -0
  32. package/dist/docs/tools/concepts.d.ts.map +1 -0
  33. package/dist/docs/tools/concepts.js +136 -0
  34. package/dist/docs/tools/concepts.js.map +1 -0
  35. package/dist/docs/tools/sdk.d.ts +12 -0
  36. package/dist/docs/tools/sdk.d.ts.map +1 -0
  37. package/dist/docs/tools/sdk.js +72 -0
  38. package/dist/docs/tools/sdk.js.map +1 -0
  39. package/dist/docs/tools/search.d.ts +11 -0
  40. package/dist/docs/tools/search.d.ts.map +1 -0
  41. package/dist/docs/tools/search.js +36 -0
  42. package/dist/docs/tools/search.js.map +1 -0
  43. package/dist/docs/types.d.ts +70 -0
  44. package/dist/docs/types.d.ts.map +1 -0
  45. package/dist/docs/types.js +8 -0
  46. package/dist/docs/types.js.map +1 -0
  47. package/dist/index.d.ts +9 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +622 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/prompts/debug.d.ts +16 -0
  52. package/dist/prompts/debug.d.ts.map +1 -0
  53. package/dist/prompts/debug.js +34 -0
  54. package/dist/prompts/debug.js.map +1 -0
  55. package/dist/prompts/integrate.d.ts +16 -0
  56. package/dist/prompts/integrate.d.ts.map +1 -0
  57. package/dist/prompts/integrate.js +30 -0
  58. package/dist/prompts/integrate.js.map +1 -0
  59. package/dist/prompts/review.d.ts +16 -0
  60. package/dist/prompts/review.d.ts.map +1 -0
  61. package/dist/prompts/review.js +28 -0
  62. package/dist/prompts/review.js.map +1 -0
  63. package/dist/resources/changelog.d.ts +22 -0
  64. package/dist/resources/changelog.d.ts.map +1 -0
  65. package/dist/resources/changelog.js +55 -0
  66. package/dist/resources/changelog.js.map +1 -0
  67. package/dist/resources/errors.d.ts +16 -0
  68. package/dist/resources/errors.d.ts.map +1 -0
  69. package/dist/resources/errors.js +103 -0
  70. package/dist/resources/errors.js.map +1 -0
  71. package/dist/resources/patterns.d.ts +16 -0
  72. package/dist/resources/patterns.d.ts.map +1 -0
  73. package/dist/resources/patterns.js +151 -0
  74. package/dist/resources/patterns.js.map +1 -0
  75. package/dist/templates/approval-workflow.d.ts +6 -0
  76. package/dist/templates/approval-workflow.d.ts.map +1 -0
  77. package/dist/templates/approval-workflow.js +467 -0
  78. package/dist/templates/approval-workflow.js.map +1 -0
  79. package/dist/templates/audit-trail.d.ts +6 -0
  80. package/dist/templates/audit-trail.d.ts.map +1 -0
  81. package/dist/templates/audit-trail.js +396 -0
  82. package/dist/templates/audit-trail.js.map +1 -0
  83. package/dist/templates/cli-tool.d.ts +6 -0
  84. package/dist/templates/cli-tool.d.ts.map +1 -0
  85. package/dist/templates/cli-tool.js +346 -0
  86. package/dist/templates/cli-tool.js.map +1 -0
  87. package/dist/templates/express-api.d.ts +6 -0
  88. package/dist/templates/express-api.d.ts.map +1 -0
  89. package/dist/templates/express-api.js +314 -0
  90. package/dist/templates/express-api.js.map +1 -0
  91. package/dist/templates/notary.d.ts +6 -0
  92. package/dist/templates/notary.d.ts.map +1 -0
  93. package/dist/templates/notary.js +360 -0
  94. package/dist/templates/notary.js.map +1 -0
  95. package/dist/test.d.ts +8 -0
  96. package/dist/test.d.ts.map +1 -0
  97. package/dist/test.js +140 -0
  98. package/dist/test.js.map +1 -0
  99. package/dist/tools/add-signing.d.ts +19 -0
  100. package/dist/tools/add-signing.d.ts.map +1 -0
  101. package/dist/tools/add-signing.js +317 -0
  102. package/dist/tools/add-signing.js.map +1 -0
  103. package/dist/tools/decode.d.ts +13 -0
  104. package/dist/tools/decode.d.ts.map +1 -0
  105. package/dist/tools/decode.js +262 -0
  106. package/dist/tools/decode.js.map +1 -0
  107. package/dist/tools/hierarchy.d.ts +13 -0
  108. package/dist/tools/hierarchy.d.ts.map +1 -0
  109. package/dist/tools/hierarchy.js +319 -0
  110. package/dist/tools/hierarchy.js.map +1 -0
  111. package/dist/tools/lint.d.ts +13 -0
  112. package/dist/tools/lint.d.ts.map +1 -0
  113. package/dist/tools/lint.js +323 -0
  114. package/dist/tools/lint.js.map +1 -0
  115. package/dist/tools/scaffold.d.ts +11 -0
  116. package/dist/tools/scaffold.d.ts.map +1 -0
  117. package/dist/tools/scaffold.js +84 -0
  118. package/dist/tools/scaffold.js.map +1 -0
  119. package/dist/tools/sign-test.d.ts +17 -0
  120. package/dist/tools/sign-test.d.ts.map +1 -0
  121. package/dist/tools/sign-test.js +126 -0
  122. package/dist/tools/sign-test.js.map +1 -0
  123. package/dist/tools/test-vectors.d.ts +13 -0
  124. package/dist/tools/test-vectors.d.ts.map +1 -0
  125. package/dist/tools/test-vectors.js +169 -0
  126. package/dist/tools/test-vectors.js.map +1 -0
  127. package/dist/tools/verify-local.d.ts +17 -0
  128. package/dist/tools/verify-local.d.ts.map +1 -0
  129. package/dist/tools/verify-local.js +233 -0
  130. package/dist/tools/verify-local.js.map +1 -0
  131. package/dist/tools/verify-test.d.ts +17 -0
  132. package/dist/tools/verify-test.d.ts.map +1 -0
  133. package/dist/tools/verify-test.js +107 -0
  134. package/dist/tools/verify-test.js.map +1 -0
  135. package/package.json +54 -0
@@ -0,0 +1,136 @@
1
+ /**
2
+ * get_concept + list_available_docs tool handlers
3
+ */
4
+ import { fetchDoc } from '../fetcher.js';
5
+ import { parseDocument } from '../parser.js';
6
+ const VALID_CONCEPTS = [
7
+ 'vrf', 'ephemeral-keys', 'bsec', 'identity', 'hierarchy',
8
+ 'signing-flow', 'verification-flow', 'key-derivation',
9
+ ];
10
+ export async function handleGetConcept(cache, config, args) {
11
+ const concept = String(args.concept ?? '');
12
+ if (!VALID_CONCEPTS.includes(concept)) {
13
+ return {
14
+ content: [{
15
+ type: 'text',
16
+ text: JSON.stringify({
17
+ error: `Invalid concept. Valid options: ${VALID_CONCEPTS.join(', ')}`,
18
+ }),
19
+ }],
20
+ };
21
+ }
22
+ const cacheKey = `concepts/${concept}`;
23
+ let markdown = cache.get(cacheKey);
24
+ if (!markdown || cache.isStale(cacheKey, config.cacheTtlMs)) {
25
+ try {
26
+ const url = `${config.docsUrl}/ai-assist/concepts/${concept}.md`;
27
+ markdown = await fetchDoc(url);
28
+ cache.set(cacheKey, markdown);
29
+ }
30
+ catch (err) {
31
+ if (markdown) {
32
+ process.stderr.write(`[blink-mcp] Using stale cache for ${cacheKey}: ${err}\n`);
33
+ }
34
+ else {
35
+ return {
36
+ content: [{
37
+ type: 'text',
38
+ text: JSON.stringify({ error: `Failed to fetch concept doc for ${concept}: ${err}` }),
39
+ }],
40
+ };
41
+ }
42
+ }
43
+ }
44
+ const sections = parseDocument(markdown, cacheKey);
45
+ // Build explanation from first few sections
46
+ const explanation = sections
47
+ .slice(0, 3)
48
+ .map((s) => s.content)
49
+ .join('\n\n')
50
+ .slice(0, 1500);
51
+ // Infer related concepts by checking for mentions of other concepts
52
+ const relatedConcepts = VALID_CONCEPTS.filter((c) => c !== concept && explanation.toLowerCase().includes(c.replace(/-/g, ' ')));
53
+ const response = {
54
+ concept,
55
+ explanation,
56
+ related_concepts: relatedConcepts.length > 0 ? relatedConcepts : ['See list_available_docs for all topics'],
57
+ };
58
+ let text = JSON.stringify(response, null, 2);
59
+ if (text.length > 2000) {
60
+ text = text.slice(0, 1950) + '\n[truncated — use search_blink_docs for more specific queries]';
61
+ }
62
+ return { content: [{ type: 'text', text }] };
63
+ }
64
+ export async function handleListAvailableDocs(cache, config) {
65
+ const manifest = cache.getManifest();
66
+ // Try to fetch llms.txt for structured listing
67
+ let llmsTxt = null;
68
+ try {
69
+ llmsTxt = await fetchDoc(`${config.docsUrl}/llms.txt`);
70
+ }
71
+ catch {
72
+ // Fall back to manifest
73
+ }
74
+ const sections = [];
75
+ if (llmsTxt) {
76
+ // Parse llms.txt for structured listing
77
+ const lines = llmsTxt.split('\n');
78
+ let currentSection = null;
79
+ for (const line of lines) {
80
+ const h2 = line.match(/^##\s+(.+)/);
81
+ if (h2) {
82
+ if (currentSection)
83
+ sections.push(currentSection);
84
+ currentSection = {
85
+ title: h2[1],
86
+ path: h2[1].toLowerCase().replace(/\s+/g, '-'),
87
+ description: '',
88
+ subsections: [],
89
+ };
90
+ continue;
91
+ }
92
+ const link = line.match(/[-*]\s+\[([^\]]+)\]\(([^)]+)\)/);
93
+ if (link && currentSection) {
94
+ currentSection.subsections.push(link[1]);
95
+ }
96
+ else if (link) {
97
+ sections.push({
98
+ title: link[1],
99
+ path: link[2],
100
+ description: '',
101
+ subsections: [],
102
+ });
103
+ }
104
+ // Grab description text (non-heading, non-link lines after a heading)
105
+ if (currentSection && !h2 && !link && line.trim()) {
106
+ if (!currentSection.description) {
107
+ currentSection.description = line.trim();
108
+ }
109
+ }
110
+ }
111
+ if (currentSection)
112
+ sections.push(currentSection);
113
+ }
114
+ else {
115
+ // Fall back to manifest keys
116
+ for (const [key, entry] of Object.entries(manifest.documents)) {
117
+ sections.push({
118
+ title: key.replace(/\//g, ' > '),
119
+ path: entry.path,
120
+ description: '',
121
+ subsections: [],
122
+ });
123
+ }
124
+ }
125
+ const response = {
126
+ sections,
127
+ total_documents: sections.length || manifest.docCount,
128
+ last_updated: manifest.lastFetchedAt || new Date().toISOString(),
129
+ };
130
+ let text = JSON.stringify(response, null, 2);
131
+ if (text.length > 2000) {
132
+ text = text.slice(0, 1950) + '\n[truncated — use search_blink_docs for more specific queries]';
133
+ }
134
+ return { content: [{ type: 'text', text }] };
135
+ }
136
+ //# sourceMappingURL=concepts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concepts.js","sourceRoot":"","sources":["../../../src/docs/tools/concepts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * get_sdk_guide tool handler
3
+ */
4
+ import type { CacheManager } from '../cache.js';
5
+ import type { ServerConfig } from '../types.js';
6
+ export declare function handleGetSdkGuide(cache: CacheManager, config: ServerConfig, args: Record<string, unknown>): Promise<{
7
+ content: Array<{
8
+ type: string;
9
+ text: string;
10
+ }>;
11
+ }>;
12
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../src/docs/tools/sdk.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0E7D"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * get_sdk_guide tool handler
3
+ */
4
+ import { fetchDoc } from '../fetcher.js';
5
+ import { parseDocument } from '../parser.js';
6
+ const VALID_LANGUAGES = ['typescript', 'rust', 'go', 'python'];
7
+ export async function handleGetSdkGuide(cache, config, args) {
8
+ const language = String(args.language ?? '');
9
+ const topic = args.topic ? String(args.topic) : null;
10
+ if (!VALID_LANGUAGES.includes(language)) {
11
+ return {
12
+ content: [{
13
+ type: 'text',
14
+ text: JSON.stringify({
15
+ error: `Invalid language. Valid options: ${VALID_LANGUAGES.join(', ')}`,
16
+ }),
17
+ }],
18
+ };
19
+ }
20
+ const cacheKey = `sdk/${language}`;
21
+ let markdown = cache.get(cacheKey);
22
+ if (!markdown || cache.isStale(cacheKey, config.cacheTtlMs)) {
23
+ try {
24
+ const url = `${config.docsUrl}/ai-assist/sdk/${language}.md`;
25
+ markdown = await fetchDoc(url);
26
+ cache.set(cacheKey, markdown);
27
+ }
28
+ catch (err) {
29
+ if (markdown) {
30
+ process.stderr.write(`[blink-mcp] Using stale cache for ${cacheKey}: ${err}\n`);
31
+ }
32
+ else {
33
+ return {
34
+ content: [{
35
+ type: 'text',
36
+ text: JSON.stringify({ error: `Failed to fetch SDK guide for ${language}: ${err}` }),
37
+ }],
38
+ };
39
+ }
40
+ }
41
+ }
42
+ const sections = parseDocument(markdown, cacheKey);
43
+ // If a topic is specified, filter to relevant sections
44
+ let relevantSections = sections;
45
+ if (topic) {
46
+ const topicLower = topic.toLowerCase();
47
+ relevantSections = sections.filter((s) => s.title.toLowerCase().includes(topicLower) ||
48
+ s.content.toLowerCase().includes(topicLower));
49
+ if (relevantSections.length === 0) {
50
+ relevantSections = sections; // Fallback to all
51
+ }
52
+ }
53
+ // Collect code examples
54
+ const codeExamples = [];
55
+ let contentParts = [];
56
+ for (const section of relevantSections) {
57
+ contentParts.push(section.content.slice(0, 400));
58
+ codeExamples.push(...section.codeBlocks.slice(0, 2));
59
+ }
60
+ const response = {
61
+ language,
62
+ topic,
63
+ content: contentParts.join('\n\n').slice(0, 1200),
64
+ code_examples: codeExamples.slice(0, 3).map((e) => e.slice(0, 400)),
65
+ };
66
+ let text = JSON.stringify(response, null, 2);
67
+ if (text.length > 2000) {
68
+ text = text.slice(0, 1950) + '\n[truncated — use search_blink_docs for more specific queries]';
69
+ }
70
+ return { content: [{ type: 'text', text }] };
71
+ }
72
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/docs/tools/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * search_blink_docs tool handler
3
+ */
4
+ import type { SearchIndex } from '../search.js';
5
+ export declare function handleSearch(index: SearchIndex, args: Record<string, unknown>): {
6
+ content: Array<{
7
+ type: string;
8
+ text: string;
9
+ }>;
10
+ };
11
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/docs/tools/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAoCpD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * search_blink_docs tool handler
3
+ */
4
+ export function handleSearch(index, args) {
5
+ const query = String(args.query ?? '');
6
+ const limit = Math.min(Math.max(Number(args.limit) || 5, 1), 10);
7
+ if (!query.trim()) {
8
+ return {
9
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Query parameter is required' }) }],
10
+ };
11
+ }
12
+ const results = index.search(query, limit);
13
+ const response = {
14
+ results: results.map((r) => ({
15
+ title: r.title,
16
+ path: r.path,
17
+ snippet: r.snippet.slice(0, 400),
18
+ relevance_score: r.score,
19
+ })),
20
+ total_matches: results.length,
21
+ };
22
+ // Enforce 2000 char limit
23
+ let text = JSON.stringify(response, null, 2);
24
+ if (text.length > 2000) {
25
+ // Trim snippets to fit
26
+ for (const result of response.results) {
27
+ result.snippet = result.snippet.slice(0, 150) + '...';
28
+ }
29
+ text = JSON.stringify(response, null, 2);
30
+ if (text.length > 2000) {
31
+ text = text.slice(0, 1950) + '\n[truncated — use more specific queries]';
32
+ }
33
+ }
34
+ return { content: [{ type: 'text', text }] };
35
+ }
36
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/docs/tools/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,YAAY,CAC1B,KAAkB,EAClB,IAA6B;IAE7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEjE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC,EAAE,CAAC;SAC5F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAChC,eAAe,EAAE,CAAC,CAAC,KAAK;SACzB,CAAC,CAAC;QACH,aAAa,EAAE,OAAO,CAAC,MAAM;KAC9B,CAAC;IAEF,0BAA0B;IAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACvB,uBAAuB;QACvB,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;QACxD,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,2CAA2C,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * BLINK Authority MCP Server — Shared Types
3
+ */
4
+ export interface DocSection {
5
+ title: string;
6
+ path: string;
7
+ content: string;
8
+ codeBlocks: string[];
9
+ headingLevel: number;
10
+ }
11
+ export interface CacheManifest {
12
+ lastFetchedAt: string;
13
+ docCount: number;
14
+ documents: Record<string, CacheDocEntry>;
15
+ }
16
+ export interface CacheDocEntry {
17
+ sourceUrl: string;
18
+ fetchedAt: string;
19
+ path: string;
20
+ }
21
+ export interface SearchResult {
22
+ id: string;
23
+ title: string;
24
+ path: string;
25
+ snippet: string;
26
+ score: number;
27
+ }
28
+ export interface ApiEndpointInfo {
29
+ endpoint: string;
30
+ method: string;
31
+ path: string;
32
+ description: string;
33
+ requestFormat: string;
34
+ responseFormat: string;
35
+ codeExample: string;
36
+ }
37
+ export interface CliCommandInfo {
38
+ command: string;
39
+ description: string;
40
+ usage: string;
41
+ flags: Array<{
42
+ flag: string;
43
+ description: string;
44
+ required: boolean;
45
+ }>;
46
+ examples: string[];
47
+ }
48
+ export interface SdkGuideInfo {
49
+ language: string;
50
+ topic: string | null;
51
+ content: string;
52
+ codeExamples: string[];
53
+ }
54
+ export interface ConceptInfo {
55
+ concept: string;
56
+ explanation: string;
57
+ relatedConcepts: string[];
58
+ }
59
+ export interface DocListEntry {
60
+ title: string;
61
+ path: string;
62
+ description: string;
63
+ subsections: string[];
64
+ }
65
+ export interface ServerConfig {
66
+ cacheTtlMs: number;
67
+ docsUrl: string;
68
+ }
69
+ export declare const DEFAULT_CONFIG: ServerConfig;
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,EAAE,YAG5B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * BLINK Authority MCP Server — Shared Types
3
+ */
4
+ export const DEFAULT_CONFIG = {
5
+ cacheTtlMs: 3600 * 1000, // 1 hour
6
+ docsUrl: 'https://place.blinkgateway.com',
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyEH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,UAAU,EAAE,IAAI,GAAG,IAAI,EAAE,SAAS;IAClC,OAAO,EAAE,gCAAgC;CAC1C,CAAC"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * BLINK Authority Claude Code Plugin
4
+ * MCP server providing BLINK integration tools for Claude.
5
+ *
6
+ * @package @blink-authority-com/claude-code-plugin
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}