@fyuld/snitch 2.3.11 → 3.0.1
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.
- package/assets/json-schemas/policy.schema.json +8 -1
- package/assets/json-schemas/snitchconfig.schema.json +48 -3
- package/assets/json-schemas/third-party-tool.schema.json +14 -1
- package/dist/commands/firstRun.d.ts.map +1 -1
- package/dist/commands/firstRun.js +14 -0
- package/dist/commands/firstRun.js.map +1 -1
- package/dist/commands/prepare.d.ts.map +1 -1
- package/dist/commands/prepare.js +105 -2
- package/dist/commands/prepare.js.map +1 -1
- package/dist/datamodel/snitch-configuration.d.ts +5 -3
- package/dist/datamodel/snitch-configuration.d.ts.map +1 -1
- package/dist/datamodel/snitch-configuration.js +12 -1
- package/dist/datamodel/snitch-configuration.js.map +1 -1
- package/dist/utils/markdown-config-parser.d.ts +16 -0
- package/dist/utils/markdown-config-parser.d.ts.map +1 -0
- package/dist/utils/markdown-config-parser.js +65 -0
- package/dist/utils/markdown-config-parser.js.map +1 -0
- package/dist/utils/third-party-tools.d.ts.map +1 -1
- package/dist/utils/third-party-tools.js +95 -8
- package/dist/utils/third-party-tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,9 +14,16 @@
|
|
|
14
14
|
"items": {
|
|
15
15
|
"$ref": "#/definitions/ViolationRule"
|
|
16
16
|
}
|
|
17
|
+
},
|
|
18
|
+
"instructions": {
|
|
19
|
+
"type": "array",
|
|
20
|
+
"description": "List of instruction file URLs for AI agents",
|
|
21
|
+
"items": {
|
|
22
|
+
"type": "string"
|
|
23
|
+
}
|
|
17
24
|
}
|
|
18
25
|
},
|
|
19
|
-
"required": ["title", "violations"],
|
|
26
|
+
"required": ["title", "violations", "instructions"],
|
|
20
27
|
"additionalProperties": false,
|
|
21
28
|
"definitions": {
|
|
22
29
|
"ViolationRule": {
|
|
@@ -20,17 +20,62 @@
|
|
|
20
20
|
"type": "object",
|
|
21
21
|
"description": "Policy definitions with provider pipelines",
|
|
22
22
|
"additionalProperties": {
|
|
23
|
-
"
|
|
23
|
+
"oneOf": [
|
|
24
|
+
{
|
|
25
|
+
"$ref": "./policy.schema.json"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"type": "object",
|
|
29
|
+
"properties": {
|
|
30
|
+
"$ref": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "URL to external policy configuration"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"required": ["$ref"],
|
|
36
|
+
"additionalProperties": false
|
|
37
|
+
}
|
|
38
|
+
]
|
|
24
39
|
}
|
|
25
40
|
},
|
|
26
41
|
"thirdPartyTools": {
|
|
27
42
|
"type": "array",
|
|
28
43
|
"description": "Third party tools (formatters, test runners, etc.) to install and configure",
|
|
29
44
|
"items": {
|
|
30
|
-
"
|
|
45
|
+
"oneOf": [
|
|
46
|
+
{
|
|
47
|
+
"$ref": "./third-party-tool.schema.json"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "object",
|
|
51
|
+
"properties": {
|
|
52
|
+
"$ref": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "URL to external tool configuration"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"required": ["$ref"],
|
|
58
|
+
"additionalProperties": false
|
|
59
|
+
}
|
|
60
|
+
]
|
|
31
61
|
}
|
|
62
|
+
},
|
|
63
|
+
"instructions": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"description": "High-level instructions for AI agents",
|
|
66
|
+
"properties": {
|
|
67
|
+
"dontEdit": {
|
|
68
|
+
"type": "array",
|
|
69
|
+
"description": "List of paths that should not be edited by AI agents",
|
|
70
|
+
"items": {
|
|
71
|
+
"type": "string"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"required": ["dontEdit"],
|
|
76
|
+
"additionalProperties": false
|
|
32
77
|
}
|
|
33
78
|
},
|
|
34
|
-
"required": ["sourceDirectory", "testsDirectory", "policies"],
|
|
79
|
+
"required": ["sourceDirectory", "testsDirectory", "policies", "instructions"],
|
|
35
80
|
"additionalProperties": false
|
|
36
81
|
}
|
|
@@ -60,6 +60,19 @@
|
|
|
60
60
|
}
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
|
+
"instructions": {
|
|
64
|
+
"oneOf": [
|
|
65
|
+
{
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Instruction file URL for AI agents"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"type": "string",
|
|
71
|
+
"enum": ["Instructions Not Required"],
|
|
72
|
+
"description": "No instructions required for this tool"
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
},
|
|
63
76
|
"sideEffects": {
|
|
64
77
|
"type": "object",
|
|
65
78
|
"description": "Side effects to apply to project files",
|
|
@@ -72,6 +85,6 @@
|
|
|
72
85
|
"additionalProperties": false
|
|
73
86
|
}
|
|
74
87
|
},
|
|
75
|
-
"required": ["title", "
|
|
88
|
+
"required": ["title", "configFilename", "software", "configuration", "instructions"],
|
|
76
89
|
"additionalProperties": false
|
|
77
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firstRun.d.ts","sourceRoot":"","sources":["../../src/commands/firstRun.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAInD,wBAAsB,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"firstRun.d.ts","sourceRoot":"","sources":["../../src/commands/firstRun.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAInD,wBAAsB,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD7F"}
|
|
@@ -46,11 +46,13 @@ async function firstRunCommand(projectName, maybeUrl) {
|
|
|
46
46
|
console.log(`Created ${file.path}`);
|
|
47
47
|
}
|
|
48
48
|
const packageJsonPath = path.resolve('package.json');
|
|
49
|
+
let finalPackageJson;
|
|
49
50
|
for (const update of result.packageJsonUpdates) {
|
|
50
51
|
const currentPackageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
51
52
|
const mergedPackageJson = (0, json_merge_1.mergeJson)(currentPackageJson, update.updates);
|
|
52
53
|
fs.writeFileSync(packageJsonPath, JSON.stringify(mergedPackageJson, null, 2), 'utf-8');
|
|
53
54
|
console.log('Updated package.json with side effects');
|
|
55
|
+
finalPackageJson = mergedPackageJson;
|
|
54
56
|
}
|
|
55
57
|
const createdDirs = [];
|
|
56
58
|
for (const dir of result.directories) {
|
|
@@ -72,5 +74,17 @@ async function firstRunCommand(projectName, maybeUrl) {
|
|
|
72
74
|
(0, child_process_1.execSync)('npm install', { stdio: 'inherit' });
|
|
73
75
|
console.log('Installed all packages');
|
|
74
76
|
}
|
|
77
|
+
if (finalPackageJson && finalPackageJson.scripts) {
|
|
78
|
+
const scripts = Object.keys(finalPackageJson.scripts).filter((script) => script !== 'test');
|
|
79
|
+
for (const script of scripts) {
|
|
80
|
+
console.log(`Running npm run ${script}...`);
|
|
81
|
+
try {
|
|
82
|
+
(0, child_process_1.execSync)(`npm run ${script}`, { stdio: 'inherit' });
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.log(`Failed to run npm run ${script}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
75
89
|
}
|
|
76
90
|
//# sourceMappingURL=firstRun.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firstRun.js","sourceRoot":"","sources":["../../src/commands/firstRun.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,
|
|
1
|
+
{"version":3,"file":"firstRun.js","sourceRoot":"","sources":["../../src/commands/firstRun.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0B,aAAa,
|
|
1
|
+
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0B,aAAa,EAAmC,MAAM,4BAA4B,CAAA;AACnH,OAAO,EAGL,mBAAmB,EAEpB,MAAM,mCAAmC,CAAA;AAK1C,wBAAsB,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4DjF;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CpD"}
|
package/dist/commands/prepare.js
CHANGED
|
@@ -46,6 +46,7 @@ const child_process_1 = require("child_process");
|
|
|
46
46
|
const SnitchConfigManager_1 = require("../SnitchConfigManager");
|
|
47
47
|
const third_party_tools_1 = require("../utils/third-party-tools");
|
|
48
48
|
const json_merge_1 = require("../utils/json-merge");
|
|
49
|
+
const markdown_config_parser_1 = require("../utils/markdown-config-parser");
|
|
49
50
|
async function prepare(config) {
|
|
50
51
|
const resolvedTools = [];
|
|
51
52
|
if (config.thirdPartyTools && config.thirdPartyTools.length > 0) {
|
|
@@ -57,9 +58,39 @@ async function prepare(config) {
|
|
|
57
58
|
const toolsResult = resolvedTools.length > 0
|
|
58
59
|
? await (0, third_party_tools_1.prepareThirdPartyTools)(resolvedTools)
|
|
59
60
|
: { files: [], directories: [], packageJsonUpdates: [], npmInstallRequired: false };
|
|
60
|
-
const
|
|
61
|
+
const policyInstructionFiles = [];
|
|
62
|
+
for (const policyEntry of Object.values(config.policies)) {
|
|
63
|
+
const policy = await resolvePolicy(policyEntry);
|
|
64
|
+
for (const instructionUrl of policy.instructions) {
|
|
65
|
+
const { filename, content } = await downloadPolicyInstruction(instructionUrl);
|
|
66
|
+
policyInstructionFiles.push({
|
|
67
|
+
path: `.snitch/instructions/${filename}`,
|
|
68
|
+
content,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const allInstructionFiles = [
|
|
73
|
+
...toolsResult.files.filter((f) => f.path.startsWith('.snitch/instructions/')),
|
|
74
|
+
...policyInstructionFiles,
|
|
75
|
+
];
|
|
76
|
+
const language = detectLanguage(resolvedTools);
|
|
77
|
+
const dontEditPaths = ['.claude', '.snitch', 'configs', ...config.instructions.dontEdit];
|
|
78
|
+
const aggregatedInstructions = {
|
|
79
|
+
path: '.claude/INSTRUCTIONS.md',
|
|
80
|
+
content: aggregatePolicyInstructions(allInstructionFiles, language, dontEditPaths),
|
|
81
|
+
};
|
|
82
|
+
const allFiles = [
|
|
83
|
+
...toolsResult.files.filter((f) => !f.path.startsWith('.snitch/instructions/') && f.path !== '.claude/INSTRUCTIONS.md'),
|
|
84
|
+
...policyInstructionFiles,
|
|
85
|
+
aggregatedInstructions,
|
|
86
|
+
];
|
|
87
|
+
const directories = [
|
|
88
|
+
{ path: config.sourceDirectory },
|
|
89
|
+
{ path: config.testsDirectory },
|
|
90
|
+
...toolsResult.directories,
|
|
91
|
+
];
|
|
61
92
|
return {
|
|
62
|
-
files:
|
|
93
|
+
files: allFiles,
|
|
63
94
|
directories,
|
|
64
95
|
packageJsonUpdates: toolsResult.packageJsonUpdates,
|
|
65
96
|
npmInstallRequired: toolsResult.npmInstallRequired,
|
|
@@ -107,6 +138,9 @@ async function resolveThirdPartyTool(entry) {
|
|
|
107
138
|
const filename = url.substring(url.lastIndexOf('/') + 1);
|
|
108
139
|
console.log(`Fetching configuration: ${filename} from ${url}`);
|
|
109
140
|
const content = await fetchUrl(url);
|
|
141
|
+
if (filename.endsWith('.md')) {
|
|
142
|
+
return await parseMarkdownTool(content, url);
|
|
143
|
+
}
|
|
110
144
|
const parsed = JSON.parse(content);
|
|
111
145
|
validateThirdPartyTool(parsed, filename);
|
|
112
146
|
return parsed;
|
|
@@ -148,4 +182,73 @@ async function fetchUrl(url) {
|
|
|
148
182
|
});
|
|
149
183
|
});
|
|
150
184
|
}
|
|
185
|
+
async function resolvePolicy(entry) {
|
|
186
|
+
if ('$ref' in entry) {
|
|
187
|
+
const url = entry.$ref;
|
|
188
|
+
const content = await fetchUrl(url);
|
|
189
|
+
return JSON.parse(content);
|
|
190
|
+
}
|
|
191
|
+
if ('_extends' in entry) {
|
|
192
|
+
throw new Error('_extends is not yet supported for PolicyConfig');
|
|
193
|
+
}
|
|
194
|
+
return entry;
|
|
195
|
+
}
|
|
196
|
+
async function downloadPolicyInstruction(url) {
|
|
197
|
+
const filename = url.substring(url.lastIndexOf('/') + 1);
|
|
198
|
+
const content = await fetchUrl(url);
|
|
199
|
+
const header = `Version: 1.0.0
|
|
200
|
+
Source: ${url}
|
|
201
|
+
Last Updated: ${new Date().toISOString().split('T')[0]}
|
|
202
|
+
Check for Updates: ${url}
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
`;
|
|
207
|
+
return {
|
|
208
|
+
filename,
|
|
209
|
+
content: header + content,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function detectLanguage(tools) {
|
|
213
|
+
const hasTypeScript = tools.some((tool) => tool.software.name === 'typescript');
|
|
214
|
+
return hasTypeScript ? 'TypeScript' : null;
|
|
215
|
+
}
|
|
216
|
+
function aggregatePolicyInstructions(instructionFiles, language, dontEditPaths) {
|
|
217
|
+
let header = `# Project Instructions
|
|
218
|
+
|
|
219
|
+
This file is auto-generated from .snitch/instructions/
|
|
220
|
+
|
|
221
|
+
`;
|
|
222
|
+
if (language) {
|
|
223
|
+
header += `Language: ${language}\n\n`;
|
|
224
|
+
}
|
|
225
|
+
header += `### Do Not Edit
|
|
226
|
+
|
|
227
|
+
Following paths and files should never be edited. They are generated, and will cause unexpected problems, since snitch or other tools can be invoked by other agents, entities, or hooks, and will confuse everybody. If edits required – ask user explicitly.
|
|
228
|
+
|
|
229
|
+
Names of files:
|
|
230
|
+
${dontEditPaths.map((p) => `- ${p}`).join('\n')}
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
`;
|
|
235
|
+
const sections = instructionFiles.map((file) => file.content).join('\n\n---\n\n');
|
|
236
|
+
return header + sections;
|
|
237
|
+
}
|
|
238
|
+
async function parseMarkdownTool(markdownContent, url) {
|
|
239
|
+
const parsed = (0, markdown_config_parser_1.parseMarkdownConfig)(markdownContent);
|
|
240
|
+
const tool = {
|
|
241
|
+
title: parsed.title,
|
|
242
|
+
configFilename: parsed.configFilename,
|
|
243
|
+
software: {
|
|
244
|
+
pm: 'npm',
|
|
245
|
+
name: parsed.toolName,
|
|
246
|
+
version: parsed.toolVersion,
|
|
247
|
+
},
|
|
248
|
+
configuration: parsed.configContent,
|
|
249
|
+
instructions: url,
|
|
250
|
+
};
|
|
251
|
+
validateThirdPartyTool(tool, url);
|
|
252
|
+
return tool;
|
|
253
|
+
}
|
|
151
254
|
//# sourceMappingURL=prepare.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/commands/prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { Uri } from './uri';
|
|
|
5
5
|
export type PolicyConfig = {
|
|
6
6
|
title: string;
|
|
7
7
|
violations: ViolationRule[];
|
|
8
|
+
instructions: Uri[];
|
|
8
9
|
};
|
|
9
10
|
export type JsonConfigurationEntry<Type> = Type | {
|
|
10
11
|
$ref: string;
|
|
@@ -13,9 +14,6 @@ export type JsonConfigurationEntry<Type> = Type | {
|
|
|
13
14
|
} & Partial<Type>);
|
|
14
15
|
export type ThirdPartyTool = {
|
|
15
16
|
title: string;
|
|
16
|
-
description: string;
|
|
17
|
-
id: string;
|
|
18
|
-
purpose: string[];
|
|
19
17
|
configFilename: string;
|
|
20
18
|
software: {
|
|
21
19
|
pm: 'npm';
|
|
@@ -23,6 +21,7 @@ export type ThirdPartyTool = {
|
|
|
23
21
|
version?: string;
|
|
24
22
|
};
|
|
25
23
|
configuration: Uri | object;
|
|
24
|
+
instructions: Uri | 'Instructions Not Required';
|
|
26
25
|
sideEffects?: {
|
|
27
26
|
'package.json'?: object;
|
|
28
27
|
};
|
|
@@ -34,6 +33,9 @@ export type SnitchConfiguration = {
|
|
|
34
33
|
commands?: Record<string, PublicCommandConfig>;
|
|
35
34
|
policies: Record<string, JsonConfigurationEntry<PolicyConfig>>;
|
|
36
35
|
thirdPartyTools?: JsonConfigurationEntry<ThirdPartyTool>[];
|
|
36
|
+
instructions: {
|
|
37
|
+
dontEdit: string[];
|
|
38
|
+
};
|
|
37
39
|
};
|
|
38
40
|
export declare const snitchConfigurationSchema: JsonSchema<SnitchConfiguration>;
|
|
39
41
|
//# sourceMappingURL=snitch-configuration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snitch-configuration.d.ts","sourceRoot":"","sources":["../../src/datamodel/snitch-configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,aAAa,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"snitch-configuration.d.ts","sourceRoot":"","sources":["../../src/datamodel/snitch-configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,YAAY,EAAE,GAAG,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,IAAI,IAAI,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;AAE3G,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE;QACR,EAAE,EAAE,KAAK,CAAA;QACT,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,aAAa,EAAE,GAAG,GAAG,MAAM,CAAA;IAC3B,YAAY,EAAE,GAAG,GAAG,2BAA2B,CAAA;IAC/C,WAAW,CAAC,EAAE;QACZ,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC9C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAA;IAC9D,eAAe,CAAC,EAAE,sBAAsB,CAAC,cAAc,CAAC,EAAE,CAAA;IAC1D,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM,EAAE,CAAA;KACnB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,UAAU,CAAC,mBAAmB,CA2CrE,CAAA"}
|
|
@@ -30,8 +30,19 @@ exports.snitchConfigurationSchema = {
|
|
|
30
30
|
items: {},
|
|
31
31
|
nullable: true,
|
|
32
32
|
},
|
|
33
|
+
instructions: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
dontEdit: {
|
|
37
|
+
type: 'array',
|
|
38
|
+
items: { type: 'string' },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
required: ['dontEdit'],
|
|
42
|
+
additionalProperties: false,
|
|
43
|
+
},
|
|
33
44
|
},
|
|
34
|
-
required: ['sourceDirectory', 'testsDirectory', 'policies'],
|
|
45
|
+
required: ['sourceDirectory', 'testsDirectory', 'policies', 'instructions'],
|
|
35
46
|
additionalProperties: false,
|
|
36
47
|
};
|
|
37
48
|
//# sourceMappingURL=snitch-configuration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snitch-configuration.js","sourceRoot":"","sources":["../../src/datamodel/snitch-configuration.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"snitch-configuration.js","sourceRoot":"","sources":["../../src/datamodel/snitch-configuration.ts"],"names":[],"mappings":";;;AAwCa,QAAA,yBAAyB,GAAoC;IACxE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;SACf;QACD,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;SACf;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;SACf;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,IAAI;YAC1B,QAAQ,EAAE,IAAI;SACf;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,IAAI;SAC3B;QACD,eAAe,EAAE;YACf,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAS;YAChB,QAAQ,EAAE,IAAI;SACf;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC1B;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;YACtB,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,QAAQ,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,CAAC;IAC3E,oBAAoB,EAAE,KAAK;CAC5B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type ParsedMarkdownConfig = {
|
|
2
|
+
metadata: {
|
|
3
|
+
version: string;
|
|
4
|
+
source: string;
|
|
5
|
+
lastUpdated: string;
|
|
6
|
+
checkForUpdates: string;
|
|
7
|
+
};
|
|
8
|
+
title: string;
|
|
9
|
+
toolName: string;
|
|
10
|
+
toolVersion: string;
|
|
11
|
+
configFilename: string;
|
|
12
|
+
configContent: object;
|
|
13
|
+
instructions: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function parseMarkdownConfig(markdown: string): ParsedMarkdownConfig;
|
|
16
|
+
//# sourceMappingURL=markdown-config-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-config-parser.d.ts","sourceRoot":"","sources":["../../src/utils/markdown-config-parser.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,WAAW,EAAE,MAAM,CAAA;QACnB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAsE1E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMarkdownConfig = parseMarkdownConfig;
|
|
4
|
+
function parseMarkdownConfig(markdown) {
|
|
5
|
+
// Extract metadata
|
|
6
|
+
const metadataMatch = markdown.match(/^Version: (.+)\nSource: (.+)\nLast Updated: (.+)\nCheck for Updates: (.+)\n\n---/m);
|
|
7
|
+
if (!metadataMatch) {
|
|
8
|
+
throw new Error('Missing metadata header');
|
|
9
|
+
}
|
|
10
|
+
const metadata = {
|
|
11
|
+
version: metadataMatch[1],
|
|
12
|
+
source: metadataMatch[2],
|
|
13
|
+
lastUpdated: metadataMatch[3],
|
|
14
|
+
checkForUpdates: metadataMatch[4],
|
|
15
|
+
};
|
|
16
|
+
// Extract title
|
|
17
|
+
const titleMatch = markdown.match(/^# (.+)$/m);
|
|
18
|
+
if (!titleMatch) {
|
|
19
|
+
throw new Error('Missing title');
|
|
20
|
+
}
|
|
21
|
+
const title = titleMatch[1];
|
|
22
|
+
// Extract tool name
|
|
23
|
+
const toolNameMatch = markdown.match(/Tool Name: `([^`]+)`/);
|
|
24
|
+
if (!toolNameMatch) {
|
|
25
|
+
throw new Error('Missing tool name');
|
|
26
|
+
}
|
|
27
|
+
const toolName = toolNameMatch[1];
|
|
28
|
+
// Extract tool version
|
|
29
|
+
const toolVersionMatch = markdown.match(/Version: `([^`]+)`/);
|
|
30
|
+
if (!toolVersionMatch) {
|
|
31
|
+
throw new Error('Missing tool version');
|
|
32
|
+
}
|
|
33
|
+
const toolVersion = toolVersionMatch[1];
|
|
34
|
+
// Extract filename
|
|
35
|
+
const filenameMatch = markdown.match(/File: `([^`]+)`/);
|
|
36
|
+
if (!filenameMatch) {
|
|
37
|
+
throw new Error('Missing config filename');
|
|
38
|
+
}
|
|
39
|
+
const configFilename = filenameMatch[1];
|
|
40
|
+
// Extract JSON from first code block after ## Configuration
|
|
41
|
+
const configSectionMatch = markdown.match(/## Configuration\n\n[\s\S]*?```json\n([\s\S]*?)\n```/);
|
|
42
|
+
if (!configSectionMatch) {
|
|
43
|
+
throw new Error('Missing configuration JSON block');
|
|
44
|
+
}
|
|
45
|
+
let configContent;
|
|
46
|
+
try {
|
|
47
|
+
configContent = JSON.parse(configSectionMatch[1]);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new Error('Invalid JSON in configuration block');
|
|
51
|
+
}
|
|
52
|
+
// Extract instructions (everything after ## Configuration section)
|
|
53
|
+
const instructionsMatch = markdown.match(/## Configuration[\s\S]*?```\n\n([\s\S]*)$/);
|
|
54
|
+
const instructions = instructionsMatch ? instructionsMatch[1].trim() : '';
|
|
55
|
+
return {
|
|
56
|
+
metadata,
|
|
57
|
+
title,
|
|
58
|
+
toolName,
|
|
59
|
+
toolVersion,
|
|
60
|
+
configFilename,
|
|
61
|
+
configContent,
|
|
62
|
+
instructions,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=markdown-config-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-config-parser.js","sourceRoot":"","sources":["../../src/utils/markdown-config-parser.ts"],"names":[],"mappings":";;AAeA,kDAsEC;AAtED,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,mBAAmB;IACnB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAClC,mFAAmF,CACpF,CAAA;IACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QACxB,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;QAC7B,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;KAClC,CAAA;IAED,gBAAgB;IAChB,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IAClC,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IAE3B,oBAAoB;IACpB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IAEjC,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACzC,CAAC;IACD,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAEvC,mBAAmB;IACnB,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACvD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IACD,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IAEvC,4DAA4D;IAC5D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACjG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,aAAqB,CAAA;IACzB,IAAI,CAAC;QACH,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IAED,mEAAmE;IACnE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;IACrF,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEzE,OAAO;QACL,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,WAAW;QACX,cAAc;QACd,aAAa;QACb,YAAY;KACb,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"third-party-tools.d.ts","sourceRoot":"","sources":["../../src/utils/third-party-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAIlE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,kBAAkB,EAAE,OAAO,CAAA;CAC5B,CAAA;AAYD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"third-party-tools.d.ts","sourceRoot":"","sources":["../../src/utils/third-party-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAIlE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,kBAAkB,EAAE,OAAO,CAAA;CAC5B,CAAA;AAYD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CA6F5F"}
|
|
@@ -38,8 +38,9 @@ const https = __importStar(require("https"));
|
|
|
38
38
|
async function prepareThirdPartyTools(tools) {
|
|
39
39
|
const preparedTools = [];
|
|
40
40
|
const seenFilenames = new Set();
|
|
41
|
+
const instructionFiles = [];
|
|
41
42
|
for (const tool of tools) {
|
|
42
|
-
const { configFilename, configuration, sideEffects, title, software } = tool;
|
|
43
|
+
const { configFilename, configuration, sideEffects, title, software, instructions } = tool;
|
|
43
44
|
if (seenFilenames.has(configFilename)) {
|
|
44
45
|
throw new Error(`Duplicate config filename detected: ${configFilename}. Multiple tools are trying to create the same file.`);
|
|
45
46
|
}
|
|
@@ -52,11 +53,23 @@ async function prepareThirdPartyTools(tools) {
|
|
|
52
53
|
software,
|
|
53
54
|
sideEffects,
|
|
54
55
|
});
|
|
56
|
+
if (instructions !== 'Instructions Not Required') {
|
|
57
|
+
const { filename, content } = await downloadInstructionFile(instructions);
|
|
58
|
+
instructionFiles.push({
|
|
59
|
+
path: `.snitch/instructions/${filename}`,
|
|
60
|
+
content,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
55
63
|
}
|
|
56
|
-
const
|
|
57
|
-
path: prepared.configFilename
|
|
64
|
+
const configFiles = preparedTools.map((prepared) => ({
|
|
65
|
+
path: `configs/${prepared.configFilename}`,
|
|
58
66
|
content: prepared.configContent,
|
|
59
67
|
}));
|
|
68
|
+
const aggregatedInstructions = {
|
|
69
|
+
path: '.claude/INSTRUCTIONS.md',
|
|
70
|
+
content: aggregateInstructions(instructionFiles),
|
|
71
|
+
};
|
|
72
|
+
const files = [...configFiles, ...instructionFiles, aggregatedInstructions];
|
|
60
73
|
const packageJsonUpdates = preparedTools.flatMap((prepared) => {
|
|
61
74
|
const updates = [];
|
|
62
75
|
const packageName = prepared.software.name;
|
|
@@ -69,15 +82,30 @@ async function prepareThirdPartyTools(tools) {
|
|
|
69
82
|
},
|
|
70
83
|
});
|
|
71
84
|
if (prepared.sideEffects && prepared.sideEffects['package.json']) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
85
|
+
const sideEffects = prepared.sideEffects['package.json'];
|
|
86
|
+
if (sideEffects.scripts) {
|
|
87
|
+
const updatedScripts = {};
|
|
88
|
+
for (const [scriptName, scriptCommand] of Object.entries(sideEffects.scripts)) {
|
|
89
|
+
updatedScripts[scriptName] = updateScriptWithConfigPath(scriptCommand, `configs/${prepared.configFilename}`, packageName);
|
|
90
|
+
}
|
|
91
|
+
updates.push({
|
|
92
|
+
updates: {
|
|
93
|
+
...sideEffects,
|
|
94
|
+
scripts: updatedScripts,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
updates.push({
|
|
100
|
+
updates: sideEffects,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
75
103
|
}
|
|
76
104
|
return updates;
|
|
77
105
|
});
|
|
78
106
|
return {
|
|
79
107
|
files,
|
|
80
|
-
directories: [],
|
|
108
|
+
directories: [{ path: 'configs' }, { path: '.snitch/instructions' }, { path: '.claude' }],
|
|
81
109
|
packageJsonUpdates,
|
|
82
110
|
npmInstallRequired: true,
|
|
83
111
|
};
|
|
@@ -106,6 +134,40 @@ async function resolveConfiguration(source) {
|
|
|
106
134
|
});
|
|
107
135
|
});
|
|
108
136
|
}
|
|
137
|
+
async function downloadInstructionFile(url) {
|
|
138
|
+
const filename = url.substring(url.lastIndexOf('/') + 1);
|
|
139
|
+
const content = await new Promise((resolve, reject) => {
|
|
140
|
+
https
|
|
141
|
+
.get(url, (res) => {
|
|
142
|
+
if (res.statusCode !== 200) {
|
|
143
|
+
reject(new Error(`Failed to download instruction: HTTP ${res.statusCode}`));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
let data = '';
|
|
147
|
+
res.on('data', (chunk) => {
|
|
148
|
+
data += chunk;
|
|
149
|
+
});
|
|
150
|
+
res.on('end', () => {
|
|
151
|
+
resolve(data);
|
|
152
|
+
});
|
|
153
|
+
})
|
|
154
|
+
.on('error', (err) => {
|
|
155
|
+
reject(new Error(`Failed to download instruction: ${err.message}`));
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
const header = `Version: 1.0.0
|
|
159
|
+
Source: ${url}
|
|
160
|
+
Last Updated: ${new Date().toISOString().split('T')[0]}
|
|
161
|
+
Check for Updates: ${url}
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
`;
|
|
166
|
+
return {
|
|
167
|
+
filename,
|
|
168
|
+
content: header + content,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
109
171
|
function formatConfigContent(content, filename, toolTitle) {
|
|
110
172
|
const ext = filename.substring(filename.lastIndexOf('.'));
|
|
111
173
|
const basename = filename.substring(filename.lastIndexOf('/') + 1);
|
|
@@ -115,6 +177,31 @@ function formatConfigContent(content, filename, toolTitle) {
|
|
|
115
177
|
if (ext === '.json' || basename === '.prettierrc') {
|
|
116
178
|
return JSON.stringify(content, null, 2);
|
|
117
179
|
}
|
|
118
|
-
throw new Error(`Unsupported config file extension for tool "${toolTitle}": filename="${filename}", extension="${ext}".
|
|
180
|
+
throw new Error(`Unsupported config file extension for tool "${toolTitle}": filename="${filename}", extension="${ext}". See supported formats at TODO://link-to-supported-files`);
|
|
181
|
+
}
|
|
182
|
+
function updateScriptWithConfigPath(script, configPath, toolName) {
|
|
183
|
+
const configFlagMap = {
|
|
184
|
+
prettier: '--config',
|
|
185
|
+
biome: '--config-path',
|
|
186
|
+
typescript: '--project',
|
|
187
|
+
tsc: '--project',
|
|
188
|
+
jest: '--config',
|
|
189
|
+
};
|
|
190
|
+
const flag = configFlagMap[toolName];
|
|
191
|
+
if (flag) {
|
|
192
|
+
return `${script} ${flag} ${configPath}`;
|
|
193
|
+
}
|
|
194
|
+
return script;
|
|
195
|
+
}
|
|
196
|
+
function aggregateInstructions(instructionFiles) {
|
|
197
|
+
const header = `# Project Instructions
|
|
198
|
+
|
|
199
|
+
This file is auto-generated from .snitch/instructions/
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
`;
|
|
204
|
+
const sections = instructionFiles.map((file) => file.content).join('\n\n---\n\n');
|
|
205
|
+
return header + sections;
|
|
119
206
|
}
|
|
120
207
|
//# sourceMappingURL=third-party-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"third-party-tools.js","sourceRoot":"","sources":["../../src/utils/third-party-tools.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,
|
|
1
|
+
{"version":3,"file":"third-party-tools.js","sourceRoot":"","sources":["../../src/utils/third-party-tools.ts"],"names":[],"mappings":"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"}
|