@aicqtools/core 1.0.0-alpha.2

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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cache/hash.d.ts +2 -0
  3. package/dist/cache/hash.d.ts.map +1 -0
  4. package/dist/cache/hash.js +0 -0
  5. package/dist/cache/hash.js.map +1 -0
  6. package/dist/cache/index.d.ts +4 -0
  7. package/dist/cache/index.d.ts.map +1 -0
  8. package/dist/cache/index.js +3 -0
  9. package/dist/cache/index.js.map +1 -0
  10. package/dist/cache/sqlite.d.ts +18 -0
  11. package/dist/cache/sqlite.d.ts.map +1 -0
  12. package/dist/cache/sqlite.js +53 -0
  13. package/dist/cache/sqlite.js.map +1 -0
  14. package/dist/config/index.d.ts +4 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/index.js +3 -0
  17. package/dist/config/index.js.map +1 -0
  18. package/dist/config/loader.d.ts +4 -0
  19. package/dist/config/loader.d.ts.map +1 -0
  20. package/dist/config/loader.js +26 -0
  21. package/dist/config/loader.js.map +1 -0
  22. package/dist/config/schema.d.ts +156 -0
  23. package/dist/config/schema.d.ts.map +1 -0
  24. package/dist/config/schema.js +38 -0
  25. package/dist/config/schema.js.map +1 -0
  26. package/dist/i18n/index.d.ts +4 -0
  27. package/dist/i18n/index.d.ts.map +1 -0
  28. package/dist/i18n/index.js +3 -0
  29. package/dist/i18n/index.js.map +1 -0
  30. package/dist/i18n/messages.d.ts +33 -0
  31. package/dist/i18n/messages.d.ts.map +1 -0
  32. package/dist/i18n/messages.js +31 -0
  33. package/dist/i18n/messages.js.map +1 -0
  34. package/dist/i18n/t.d.ts +15 -0
  35. package/dist/i18n/t.d.ts.map +1 -0
  36. package/dist/i18n/t.js +41 -0
  37. package/dist/i18n/t.js.map +1 -0
  38. package/dist/index.d.ts +10 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +6 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/parser/index.d.ts +3 -0
  43. package/dist/parser/index.d.ts.map +1 -0
  44. package/dist/parser/index.js +2 -0
  45. package/dist/parser/index.js.map +1 -0
  46. package/dist/parser/tree-sitter.d.ts +6 -0
  47. package/dist/parser/tree-sitter.d.ts.map +1 -0
  48. package/dist/parser/tree-sitter.js +48 -0
  49. package/dist/parser/tree-sitter.js.map +1 -0
  50. package/dist/reporter/index.d.ts +4 -0
  51. package/dist/reporter/index.d.ts.map +1 -0
  52. package/dist/reporter/index.js +4 -0
  53. package/dist/reporter/index.js.map +1 -0
  54. package/dist/reporter/json.d.ts +3 -0
  55. package/dist/reporter/json.d.ts.map +1 -0
  56. package/dist/reporter/json.js +4 -0
  57. package/dist/reporter/json.js.map +1 -0
  58. package/dist/reporter/sarif.d.ts +3 -0
  59. package/dist/reporter/sarif.d.ts.map +1 -0
  60. package/dist/reporter/sarif.js +56 -0
  61. package/dist/reporter/sarif.js.map +1 -0
  62. package/dist/reporter/text.d.ts +3 -0
  63. package/dist/reporter/text.d.ts.map +1 -0
  64. package/dist/reporter/text.js +22 -0
  65. package/dist/reporter/text.js.map +1 -0
  66. package/dist/types.d.ts +30 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +2 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +62 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Eom Sik (aicqtools)
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.
@@ -0,0 +1,2 @@
1
+ export declare function hashRulesetSignature(signature: readonly string[]): string;
2
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/cache/hash.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQzE"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/cache/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,oBAAoB,CAAC,SAA4B;IAC/D,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { FileCache } from './sqlite.js';
2
+ export type { CacheKey } from './sqlite.js';
3
+ export { hashRulesetSignature } from './hash.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { FileCache } from './sqlite.js';
2
+ export { hashRulesetSignature } from './hash.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Diagnostic } from '../types.js';
2
+ export interface CacheKey {
3
+ readonly filePath: string;
4
+ readonly mtime: number;
5
+ readonly size: number;
6
+ readonly rulesHash: string;
7
+ }
8
+ export declare class FileCache {
9
+ private readonly db;
10
+ private readonly getStmt;
11
+ private readonly setStmt;
12
+ constructor(dbPath: string);
13
+ get(key: CacheKey): readonly Diagnostic[] | null;
14
+ set(key: CacheKey, diagnostics: readonly Diagnostic[]): void;
15
+ clear(): void;
16
+ close(): void;
17
+ }
18
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/cache/sqlite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAW9C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;gBAEjC,MAAM,EAAE,MAAM;IA6B1B,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,UAAU,EAAE,GAAG,IAAI;IAYhD,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI;IAW5D,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,53 @@
1
+ import Database from 'better-sqlite3';
2
+ import { dirname } from 'node:path';
3
+ import { mkdirSync } from 'node:fs';
4
+ export class FileCache {
5
+ db;
6
+ getStmt;
7
+ setStmt;
8
+ constructor(dbPath) {
9
+ mkdirSync(dirname(dbPath), { recursive: true });
10
+ this.db = new Database(dbPath);
11
+ this.db.pragma('journal_mode = WAL');
12
+ this.db.exec(`
13
+ CREATE TABLE IF NOT EXISTS file_cache (
14
+ file_path TEXT PRIMARY KEY,
15
+ mtime INTEGER NOT NULL,
16
+ size INTEGER NOT NULL,
17
+ rules_hash TEXT NOT NULL,
18
+ diagnostics_json TEXT NOT NULL,
19
+ scanned_at INTEGER NOT NULL
20
+ );
21
+ `);
22
+ this.getStmt = this.db.prepare('SELECT * FROM file_cache WHERE file_path = ? AND mtime = ? AND size = ? AND rules_hash = ?');
23
+ this.setStmt = this.db.prepare(`INSERT INTO file_cache (file_path, mtime, size, rules_hash, diagnostics_json, scanned_at)
24
+ VALUES (?, ?, ?, ?, ?, ?)
25
+ ON CONFLICT(file_path) DO UPDATE SET
26
+ mtime = excluded.mtime,
27
+ size = excluded.size,
28
+ rules_hash = excluded.rules_hash,
29
+ diagnostics_json = excluded.diagnostics_json,
30
+ scanned_at = excluded.scanned_at`);
31
+ }
32
+ get(key) {
33
+ const row = this.getStmt.get(key.filePath, key.mtime, key.size, key.rulesHash);
34
+ if (!row)
35
+ return null;
36
+ try {
37
+ return JSON.parse(row.diagnostics_json);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ set(key, diagnostics) {
44
+ this.setStmt.run(key.filePath, key.mtime, key.size, key.rulesHash, JSON.stringify(diagnostics), Date.now());
45
+ }
46
+ clear() {
47
+ this.db.exec('DELETE FROM file_cache');
48
+ }
49
+ close() {
50
+ this.db.close();
51
+ }
52
+ }
53
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/cache/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAmBpC,MAAM,OAAO,SAAS;IACH,EAAE,CAAoB;IACtB,OAAO,CAAqB;IAC5B,OAAO,CAAqB;IAE7C,YAAY,MAAc;QACxB,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;KASZ,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B,4FAA4F,CAC7F,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B;;;;;;;0CAOoC,CACrC,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,GAAa;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAEhE,CAAC;QACd,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAiB,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAa,EAAE,WAAkC;QACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CACd,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,SAAS,EACb,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAC3B,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { loadConfig, findConfigPath } from './loader.js';
2
+ export { aicqConfigSchema } from './schema.js';
3
+ export type { AicqConfig } from './schema.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { loadConfig, findConfigPath } from './loader.js';
2
+ export { aicqConfigSchema } from './schema.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type AicqConfig } from './schema.js';
2
+ export declare function loadConfig(cwd: string): Promise<AicqConfig>;
3
+ export declare function findConfigPath(cwd: string): string | null;
4
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIhE,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAUjE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzD"}
@@ -0,0 +1,26 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { parse as parseYaml } from 'yaml';
5
+ import { aicqConfigSchema } from './schema.js';
6
+ const CONFIG_FILENAMES = ['aicq.config.yaml', 'aicq.config.yml'];
7
+ export async function loadConfig(cwd) {
8
+ for (const name of CONFIG_FILENAMES) {
9
+ const path = resolve(cwd, name);
10
+ if (existsSync(path)) {
11
+ const raw = await readFile(path, 'utf-8');
12
+ const parsed = parseYaml(raw) ?? {};
13
+ return aicqConfigSchema.parse(parsed);
14
+ }
15
+ }
16
+ return aicqConfigSchema.parse({});
17
+ }
18
+ export function findConfigPath(cwd) {
19
+ for (const name of CONFIG_FILENAMES) {
20
+ const path = resolve(cwd, name);
21
+ if (existsSync(path))
22
+ return path;
23
+ }
24
+ return null;
25
+ }
26
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAEhE,MAAM,gBAAgB,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,CAAU,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { z } from 'zod';
2
+ export declare const localeSchema: z.ZodDefault<z.ZodEnum<["ko", "en"]>>;
3
+ export declare const guardrailModuleSchema: z.ZodDefault<z.ZodObject<{
4
+ enabled: z.ZodDefault<z.ZodBoolean>;
5
+ rulesDir: z.ZodDefault<z.ZodString>;
6
+ extends: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
7
+ rules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodLiteral<"off">, z.ZodLiteral<"warn">, z.ZodLiteral<"error">]>>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ enabled: boolean;
10
+ rulesDir: string;
11
+ extends: string[];
12
+ rules: Record<string, "error" | "off" | "warn">;
13
+ }, {
14
+ enabled?: boolean | undefined;
15
+ rulesDir?: string | undefined;
16
+ extends?: string[] | undefined;
17
+ rules?: Record<string, "error" | "off" | "warn"> | undefined;
18
+ }>>;
19
+ export declare const provenanceModuleSchema: z.ZodDefault<z.ZodObject<{
20
+ enabled: z.ZodDefault<z.ZodBoolean>;
21
+ captureSession: z.ZodDefault<z.ZodBoolean>;
22
+ output: z.ZodDefault<z.ZodString>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ enabled: boolean;
25
+ captureSession: boolean;
26
+ output: string;
27
+ }, {
28
+ enabled?: boolean | undefined;
29
+ captureSession?: boolean | undefined;
30
+ output?: string | undefined;
31
+ }>>;
32
+ export declare const supplyChainModuleSchema: z.ZodDefault<z.ZodObject<{
33
+ enabled: z.ZodDefault<z.ZodBoolean>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ enabled: boolean;
36
+ }, {
37
+ enabled?: boolean | undefined;
38
+ }>>;
39
+ export declare const aicqConfigSchema: z.ZodObject<{
40
+ $schema: z.ZodOptional<z.ZodString>;
41
+ locale: z.ZodDefault<z.ZodEnum<["ko", "en"]>>;
42
+ include: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
43
+ exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
44
+ modules: z.ZodDefault<z.ZodObject<{
45
+ guardrail: z.ZodDefault<z.ZodObject<{
46
+ enabled: z.ZodDefault<z.ZodBoolean>;
47
+ rulesDir: z.ZodDefault<z.ZodString>;
48
+ extends: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
49
+ rules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodLiteral<"off">, z.ZodLiteral<"warn">, z.ZodLiteral<"error">]>>>;
50
+ }, "strip", z.ZodTypeAny, {
51
+ enabled: boolean;
52
+ rulesDir: string;
53
+ extends: string[];
54
+ rules: Record<string, "error" | "off" | "warn">;
55
+ }, {
56
+ enabled?: boolean | undefined;
57
+ rulesDir?: string | undefined;
58
+ extends?: string[] | undefined;
59
+ rules?: Record<string, "error" | "off" | "warn"> | undefined;
60
+ }>>;
61
+ provenance: z.ZodDefault<z.ZodObject<{
62
+ enabled: z.ZodDefault<z.ZodBoolean>;
63
+ captureSession: z.ZodDefault<z.ZodBoolean>;
64
+ output: z.ZodDefault<z.ZodString>;
65
+ }, "strip", z.ZodTypeAny, {
66
+ enabled: boolean;
67
+ captureSession: boolean;
68
+ output: string;
69
+ }, {
70
+ enabled?: boolean | undefined;
71
+ captureSession?: boolean | undefined;
72
+ output?: string | undefined;
73
+ }>>;
74
+ supplyChain: z.ZodDefault<z.ZodObject<{
75
+ enabled: z.ZodDefault<z.ZodBoolean>;
76
+ }, "strip", z.ZodTypeAny, {
77
+ enabled: boolean;
78
+ }, {
79
+ enabled?: boolean | undefined;
80
+ }>>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ guardrail: {
83
+ enabled: boolean;
84
+ rulesDir: string;
85
+ extends: string[];
86
+ rules: Record<string, "error" | "off" | "warn">;
87
+ };
88
+ provenance: {
89
+ enabled: boolean;
90
+ captureSession: boolean;
91
+ output: string;
92
+ };
93
+ supplyChain: {
94
+ enabled: boolean;
95
+ };
96
+ }, {
97
+ guardrail?: {
98
+ enabled?: boolean | undefined;
99
+ rulesDir?: string | undefined;
100
+ extends?: string[] | undefined;
101
+ rules?: Record<string, "error" | "off" | "warn"> | undefined;
102
+ } | undefined;
103
+ provenance?: {
104
+ enabled?: boolean | undefined;
105
+ captureSession?: boolean | undefined;
106
+ output?: string | undefined;
107
+ } | undefined;
108
+ supplyChain?: {
109
+ enabled?: boolean | undefined;
110
+ } | undefined;
111
+ }>>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ locale: "ko" | "en";
114
+ include: string[];
115
+ exclude: string[];
116
+ modules: {
117
+ guardrail: {
118
+ enabled: boolean;
119
+ rulesDir: string;
120
+ extends: string[];
121
+ rules: Record<string, "error" | "off" | "warn">;
122
+ };
123
+ provenance: {
124
+ enabled: boolean;
125
+ captureSession: boolean;
126
+ output: string;
127
+ };
128
+ supplyChain: {
129
+ enabled: boolean;
130
+ };
131
+ };
132
+ $schema?: string | undefined;
133
+ }, {
134
+ $schema?: string | undefined;
135
+ locale?: "ko" | "en" | undefined;
136
+ include?: string[] | undefined;
137
+ exclude?: string[] | undefined;
138
+ modules?: {
139
+ guardrail?: {
140
+ enabled?: boolean | undefined;
141
+ rulesDir?: string | undefined;
142
+ extends?: string[] | undefined;
143
+ rules?: Record<string, "error" | "off" | "warn"> | undefined;
144
+ } | undefined;
145
+ provenance?: {
146
+ enabled?: boolean | undefined;
147
+ captureSession?: boolean | undefined;
148
+ output?: string | undefined;
149
+ } | undefined;
150
+ supplyChain?: {
151
+ enabled?: boolean | undefined;
152
+ } | undefined;
153
+ } | undefined;
154
+ }>;
155
+ export type AicqConfig = z.infer<typeof aicqConfigSchema>;
156
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY,uCAAqC,CAAC;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;GAOpB,CAAC;AAEf,eAAO,MAAM,sBAAsB;;;;;;;;;;;;GAMrB,CAAC;AAEf,eAAO,MAAM,uBAAuB;;;;;;GAItB,CAAC;AAEf,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ export const localeSchema = z.enum(['ko', 'en']).default('en');
3
+ export const guardrailModuleSchema = z
4
+ .object({
5
+ enabled: z.boolean().default(true),
6
+ rulesDir: z.string().default('aicq/rules'),
7
+ extends: z.array(z.string()).default([]),
8
+ rules: z.record(z.union([z.literal('off'), z.literal('warn'), z.literal('error')])).default({}),
9
+ })
10
+ .default({});
11
+ export const provenanceModuleSchema = z
12
+ .object({
13
+ enabled: z.boolean().default(false),
14
+ captureSession: z.boolean().default(true),
15
+ output: z.string().default('aicq/provenance'),
16
+ })
17
+ .default({});
18
+ export const supplyChainModuleSchema = z
19
+ .object({
20
+ enabled: z.boolean().default(false),
21
+ })
22
+ .default({});
23
+ export const aicqConfigSchema = z.object({
24
+ $schema: z.string().optional(),
25
+ locale: localeSchema,
26
+ include: z.array(z.string()).default(['**/*.{ts,tsx,js,mjs,cjs,jsx,py}']),
27
+ exclude: z
28
+ .array(z.string())
29
+ .default(['**/node_modules/**', '**/dist/**', '**/.turbo/**', '**/build/**']),
30
+ modules: z
31
+ .object({
32
+ guardrail: guardrailModuleSchema,
33
+ provenance: provenanceModuleSchema,
34
+ supplyChain: supplyChainModuleSchema,
35
+ })
36
+ .default({}),
37
+ });
38
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChG,CAAC;KACD,OAAO,CAAC,EAAE,CAAC,CAAC;AAEf,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACpC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;CAC9C,CAAC;KACD,OAAO,CAAC,EAAE,CAAC,CAAC;AAEf,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACpC,CAAC;KACD,OAAO,CAAC,EAAE,CAAC,CAAC;AAEf,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,iCAAiC,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,OAAO,CAAC,CAAC,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IAC/E,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,SAAS,EAAE,qBAAqB;QAChC,UAAU,EAAE,sBAAsB;QAClC,WAAW,EAAE,uBAAuB;KACrC,CAAC;SACD,OAAO,CAAC,EAAE,CAAC;CACf,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { t, resolveLocale } from './t.js';
2
+ export { messages } from './messages.js';
3
+ export type { Locale, MessageKey } from './messages.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { t, resolveLocale } from './t.js';
2
+ export { messages } from './messages.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * i18n 메시지 사전. 계층 dot-notation 키 — `cli.check.violationsFound`.
3
+ *
4
+ * 새 키 추가 시 ko/en 양쪽 모두 정의해야 합니다 (한쪽 누락 시 fallback 발생).
5
+ * 파라미터는 `{name}` 플레이스홀더로 — 예: `'cli.check.scanned': '{count}개 검사'`.
6
+ */
7
+ export type Locale = 'ko' | 'en';
8
+ export declare const messages: {
9
+ readonly en: {
10
+ readonly 'cli.check.scanned': "{files} files scanned, {violations} violations, {ms}ms";
11
+ readonly 'cli.check.noViolations': "No violations.";
12
+ readonly 'cli.check.violationsFound': "{count} violations found.";
13
+ readonly 'cli.sync.updated': "updated: {path}";
14
+ readonly 'cli.provenance.captured': "provenance captured: {path}";
15
+ readonly 'cli.provenance.summary': " {attributions} attribution(s), {sessions} session(s)";
16
+ readonly 'cli.provenance.notImplemented': "provenance: not implemented yet (Phase 1a)";
17
+ readonly 'cli.docs.generated': "rule docs generated: {count} files in {dir}";
18
+ readonly 'cli.error.generic': "aicq error: {message}";
19
+ };
20
+ readonly ko: {
21
+ readonly 'cli.check.scanned': "파일 {files}개 검사, 위반 {violations}개, {ms}ms 소요";
22
+ readonly 'cli.check.noViolations': "위반 없음.";
23
+ readonly 'cli.check.violationsFound': "위반 {count}개 발견.";
24
+ readonly 'cli.sync.updated': "갱신됨: {path}";
25
+ readonly 'cli.provenance.captured': "출처 기록 캡처: {path}";
26
+ readonly 'cli.provenance.summary': " attribution {attributions}건, session {sessions}건";
27
+ readonly 'cli.provenance.notImplemented': "provenance: 아직 미구현 (Phase 1a)";
28
+ readonly 'cli.docs.generated': "룰 docs 생성됨: {dir}에 {count}개 파일";
29
+ readonly 'cli.error.generic': "aicq 오류: {message}";
30
+ };
31
+ };
32
+ export type MessageKey = keyof typeof messages.en;
33
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;CAuBX,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,QAAQ,CAAC,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * i18n 메시지 사전. 계층 dot-notation 키 — `cli.check.violationsFound`.
3
+ *
4
+ * 새 키 추가 시 ko/en 양쪽 모두 정의해야 합니다 (한쪽 누락 시 fallback 발생).
5
+ * 파라미터는 `{name}` 플레이스홀더로 — 예: `'cli.check.scanned': '{count}개 검사'`.
6
+ */
7
+ export const messages = {
8
+ en: {
9
+ 'cli.check.scanned': '{files} files scanned, {violations} violations, {ms}ms',
10
+ 'cli.check.noViolations': 'No violations.',
11
+ 'cli.check.violationsFound': '{count} violations found.',
12
+ 'cli.sync.updated': 'updated: {path}',
13
+ 'cli.provenance.captured': 'provenance captured: {path}',
14
+ 'cli.provenance.summary': ' {attributions} attribution(s), {sessions} session(s)',
15
+ 'cli.provenance.notImplemented': 'provenance: not implemented yet (Phase 1a)',
16
+ 'cli.docs.generated': 'rule docs generated: {count} files in {dir}',
17
+ 'cli.error.generic': 'aicq error: {message}',
18
+ },
19
+ ko: {
20
+ 'cli.check.scanned': '파일 {files}개 검사, 위반 {violations}개, {ms}ms 소요',
21
+ 'cli.check.noViolations': '위반 없음.',
22
+ 'cli.check.violationsFound': '위반 {count}개 발견.',
23
+ 'cli.sync.updated': '갱신됨: {path}',
24
+ 'cli.provenance.captured': '출처 기록 캡처: {path}',
25
+ 'cli.provenance.summary': ' attribution {attributions}건, session {sessions}건',
26
+ 'cli.provenance.notImplemented': 'provenance: 아직 미구현 (Phase 1a)',
27
+ 'cli.docs.generated': '룰 docs 생성됨: {dir}에 {count}개 파일',
28
+ 'cli.error.generic': 'aicq 오류: {message}',
29
+ },
30
+ };
31
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,EAAE;QACF,mBAAmB,EAAE,wDAAwD;QAC7E,wBAAwB,EAAE,gBAAgB;QAC1C,2BAA2B,EAAE,2BAA2B;QACxD,kBAAkB,EAAE,iBAAiB;QACrC,yBAAyB,EAAE,6BAA6B;QACxD,wBAAwB,EAAE,wDAAwD;QAClF,+BAA+B,EAAE,4CAA4C;QAC7E,oBAAoB,EAAE,6CAA6C;QACnE,mBAAmB,EAAE,uBAAuB;KAC7C;IACD,EAAE,EAAE;QACF,mBAAmB,EAAE,6CAA6C;QAClE,wBAAwB,EAAE,QAAQ;QAClC,2BAA2B,EAAE,iBAAiB;QAC9C,kBAAkB,EAAE,aAAa;QACjC,yBAAyB,EAAE,kBAAkB;QAC7C,wBAAwB,EAAE,oDAAoD;QAC9E,+BAA+B,EAAE,+BAA+B;QAChE,oBAAoB,EAAE,gCAAgC;QACtD,mBAAmB,EAAE,oBAAoB;KAC1C;CACO,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type Locale, type MessageKey } from './messages.js';
2
+ /**
3
+ * Resolve locale from (in priority order):
4
+ * 1. explicit `--locale` flag (passed in via override)
5
+ * 2. `LANG` / `LC_ALL` environment variables (e.g. "ko_KR.UTF-8")
6
+ * 3. `aicq.config.yaml`'s `locale` field
7
+ * 4. `'en'` fallback
8
+ */
9
+ export declare function resolveLocale(opts: {
10
+ override?: string;
11
+ configLocale?: string;
12
+ env?: NodeJS.ProcessEnv;
13
+ }): Locale;
14
+ export declare function t(locale: Locale, key: MessageKey, params?: Record<string, string | number>): string;
15
+ //# sourceMappingURL=t.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"t.d.ts","sourceRoot":"","sources":["../../src/i18n/t.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,GAAG,MAAM,CAgBT;AAYD,wBAAgB,CAAC,CACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACvC,MAAM,CAKR"}
package/dist/i18n/t.js ADDED
@@ -0,0 +1,41 @@
1
+ import { messages } from './messages.js';
2
+ /**
3
+ * Resolve locale from (in priority order):
4
+ * 1. explicit `--locale` flag (passed in via override)
5
+ * 2. `LANG` / `LC_ALL` environment variables (e.g. "ko_KR.UTF-8")
6
+ * 3. `aicq.config.yaml`'s `locale` field
7
+ * 4. `'en'` fallback
8
+ */
9
+ export function resolveLocale(opts) {
10
+ const tryParse = (value) => {
11
+ if (!value)
12
+ return null;
13
+ const lower = value.toLowerCase();
14
+ if (lower.startsWith('ko'))
15
+ return 'ko';
16
+ if (lower.startsWith('en'))
17
+ return 'en';
18
+ return null;
19
+ };
20
+ return (tryParse(opts.override) ??
21
+ tryParse(opts.env?.['LC_ALL']) ??
22
+ tryParse(opts.env?.['LANG']) ??
23
+ tryParse(opts.configLocale) ??
24
+ 'en');
25
+ }
26
+ const PLACEHOLDER = /\{(\w+)\}/g;
27
+ function format(template, params) {
28
+ if (!params)
29
+ return template;
30
+ return template.replace(PLACEHOLDER, (_, key) => {
31
+ const value = params[key];
32
+ return value === undefined ? `{${key}}` : String(value);
33
+ });
34
+ }
35
+ export function t(locale, key, params) {
36
+ const dict = messages[locale];
37
+ // Fallback: locale -> en -> raw key
38
+ const template = dict[key] ?? messages.en[key] ?? key;
39
+ return format(template, params);
40
+ }
41
+ //# sourceMappingURL=t.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"t.js","sourceRoot":"","sources":["../../src/i18n/t.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgC,MAAM,eAAe,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAI7B;IACC,MAAM,QAAQ,GAAG,CAAC,KAAyB,EAAiB,EAAE;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,CACL,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QAC3B,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,SAAS,MAAM,CAAC,QAAgB,EAAE,MAAwC;IACxE,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC7B,OAAO,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,CAAC,CACf,MAAc,EACd,GAAe,EACf,MAAwC;IAExC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,oCAAoC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type { Severity, Language, Position, Range, Fix, Diagnostic, CheckResult, } from './types.js';
2
+ export { getParser, parseSource, detectLanguage } from './parser/index.js';
3
+ export { loadConfig, findConfigPath, aicqConfigSchema } from './config/index.js';
4
+ export type { AicqConfig } from './config/index.js';
5
+ export { reportJson, reportText, reportSarif } from './reporter/index.js';
6
+ export { FileCache, hashRulesetSignature } from './cache/index.js';
7
+ export type { CacheKey } from './cache/index.js';
8
+ export { t, resolveLocale, messages } from './i18n/index.js';
9
+ export type { Locale, MessageKey } from './i18n/index.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,GAAG,EACH,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjF,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { getParser, parseSource, detectLanguage } from './parser/index.js';
2
+ export { loadConfig, findConfigPath, aicqConfigSchema } from './config/index.js';
3
+ export { reportJson, reportText, reportSarif } from './reporter/index.js';
4
+ export { FileCache, hashRulesetSignature } from './cache/index.js';
5
+ export { t, resolveLocale, messages } from './i18n/index.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getParser, parseSource, detectLanguage } from './tree-sitter.js';
2
+ export type { default as Parser } from 'tree-sitter';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { getParser, parseSource, detectLanguage } from './tree-sitter.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import Parser from 'tree-sitter';
2
+ import type { Language } from '../types.js';
3
+ export declare function getParser(lang: Language): Parser;
4
+ export declare function parseSource(lang: Language, source: string): Parser.Tree;
5
+ export declare function detectLanguage(filePath: string): Language | null;
6
+ //# sourceMappingURL=tree-sitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/parser/tree-sitter.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAiB5C,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAQhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAEvE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAkBhE"}
@@ -0,0 +1,48 @@
1
+ import Parser from 'tree-sitter';
2
+ import TypeScript from 'tree-sitter-typescript';
3
+ import Python from 'tree-sitter-python';
4
+ const parserCache = new Map();
5
+ function loadLanguage(lang) {
6
+ switch (lang) {
7
+ case 'typescript':
8
+ return TypeScript.typescript;
9
+ case 'tsx':
10
+ return TypeScript.tsx;
11
+ case 'javascript':
12
+ return TypeScript.typescript;
13
+ case 'python':
14
+ return Python;
15
+ }
16
+ }
17
+ export function getParser(lang) {
18
+ let parser = parserCache.get(lang);
19
+ if (!parser) {
20
+ parser = new Parser();
21
+ parser.setLanguage(loadLanguage(lang));
22
+ parserCache.set(lang, parser);
23
+ }
24
+ return parser;
25
+ }
26
+ export function parseSource(lang, source) {
27
+ return getParser(lang).parse(source);
28
+ }
29
+ export function detectLanguage(filePath) {
30
+ const ext = filePath.toLowerCase().match(/\.[^.]+$/)?.[0];
31
+ switch (ext) {
32
+ case '.ts':
33
+ return 'typescript';
34
+ case '.tsx':
35
+ return 'tsx';
36
+ case '.js':
37
+ case '.mjs':
38
+ case '.cjs':
39
+ case '.jsx':
40
+ return 'javascript';
41
+ case '.py':
42
+ case '.pyi':
43
+ return 'python';
44
+ default:
45
+ return null;
46
+ }
47
+ }
48
+ //# sourceMappingURL=tree-sitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter.js","sourceRoot":"","sources":["../../src/parser/tree-sitter.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAGxC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;AAEhD,SAAS,YAAY,CAAC,IAAc;IAClC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY;YACf,OAAO,UAAU,CAAC,UAAU,CAAC;QAC/B,KAAK,KAAK;YACR,OAAO,UAAU,CAAC,GAAG,CAAC;QACxB,KAAK,YAAY;YACf,OAAO,UAAU,CAAC,UAAU,CAAC;QAC/B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,IAAI,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,MAAc;IACxD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,YAAY,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { reportJson } from './json.js';
2
+ export { reportText } from './text.js';
3
+ export { reportSarif } from './sarif.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { reportJson } from './json.js';
2
+ export { reportText } from './text.js';
3
+ export { reportSarif } from './sarif.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckResult } from '../types.js';
2
+ export declare function reportJson(result: CheckResult): string;
3
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/reporter/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,4 @@
1
+ export function reportJson(result) {
2
+ return JSON.stringify(result, null, 2);
3
+ }
4
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/reporter/json.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckResult } from '../types.js';
2
+ export declare function reportSarif(result: CheckResult, toolVersion?: string): string;
3
+ //# sourceMappingURL=sarif.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../src/reporter/sarif.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AA2E3D,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,SAAU,GAAG,MAAM,CAuB9E"}
@@ -0,0 +1,56 @@
1
+ const sarifLevel = { error: 'error', warning: 'warning', info: 'note' };
2
+ function ruleFromDiagnostic(d) {
3
+ const rule = {
4
+ id: d.ruleId,
5
+ shortDescription: { text: d.message },
6
+ };
7
+ if (d.docs)
8
+ rule.helpUri = d.docs;
9
+ return rule;
10
+ }
11
+ function resultFromDiagnostic(d) {
12
+ return {
13
+ ruleId: d.ruleId,
14
+ level: sarifLevel[d.severity],
15
+ message: { text: d.message },
16
+ locations: [
17
+ {
18
+ physicalLocation: {
19
+ artifactLocation: { uri: d.file },
20
+ region: {
21
+ startLine: d.range.start.line,
22
+ startColumn: d.range.start.column,
23
+ endLine: d.range.end.line,
24
+ endColumn: d.range.end.column,
25
+ },
26
+ },
27
+ },
28
+ ],
29
+ };
30
+ }
31
+ export function reportSarif(result, toolVersion = '0.0.0') {
32
+ const ruleMap = new Map();
33
+ for (const d of result.diagnostics) {
34
+ if (!ruleMap.has(d.ruleId))
35
+ ruleMap.set(d.ruleId, ruleFromDiagnostic(d));
36
+ }
37
+ const log = {
38
+ $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json',
39
+ version: '2.1.0',
40
+ runs: [
41
+ {
42
+ tool: {
43
+ driver: {
44
+ name: 'aicq',
45
+ version: toolVersion,
46
+ informationUri: 'https://github.com/aicq/aicq',
47
+ rules: [...ruleMap.values()],
48
+ },
49
+ },
50
+ results: result.diagnostics.map(resultFromDiagnostic),
51
+ },
52
+ ],
53
+ };
54
+ return JSON.stringify(log, null, 2);
55
+ }
56
+ //# sourceMappingURL=sarif.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../src/reporter/sarif.ts"],"names":[],"mappings":"AA2CA,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAW,CAAC;AAEjF,SAAS,kBAAkB,CAAC,CAAa;IACvC,MAAM,IAAI,GAAc;QACtB,EAAE,EAAE,CAAC,CAAC,MAAM;QACZ,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;KACtC,CAAC;IACF,IAAI,CAAC,CAAC,IAAI;QAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAa;IACzC,OAAO;QACL,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;QAC5B,SAAS,EAAE;YACT;gBACE,gBAAgB,EAAE;oBAChB,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE;oBACjC,MAAM,EAAE;wBACN,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;wBAC7B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;wBACjC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI;wBACzB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM;qBAC9B;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAmB,EAAE,WAAW,GAAG,OAAO;IACpE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,GAAG,GAAa;QACpB,OAAO,EAAE,sGAAsG;QAC/G,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE;wBACN,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,WAAW;wBACpB,cAAc,EAAE,8BAA8B;wBAC9C,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;qBAC7B;iBACF;gBACD,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC;aACtD;SACF;KACF,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CheckResult } from '../types.js';
2
+ export declare function reportText(result: CheckResult, locale?: 'ko' | 'en'): string;
3
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/reporter/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,aAAa,CAAC;AAcrE,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,GAAE,IAAI,GAAG,IAAW,GAAG,MAAM,CAUlF"}
@@ -0,0 +1,22 @@
1
+ const severityLabel = {
2
+ error: 'error',
3
+ warning: 'warn ',
4
+ info: 'info ',
5
+ };
6
+ function formatDiagnostic(d, locale) {
7
+ const message = locale === 'ko' && d.messageKo ? d.messageKo : d.message;
8
+ const loc = `${d.file}:${d.range.start.line}:${d.range.start.column}`;
9
+ return ` ${severityLabel[d.severity]} ${loc} ${d.ruleId}\n ${message}`;
10
+ }
11
+ export function reportText(result, locale = 'en') {
12
+ const lines = [];
13
+ for (const d of result.diagnostics) {
14
+ lines.push(formatDiagnostic(d, locale));
15
+ }
16
+ const summary = locale === 'ko'
17
+ ? `\n파일 ${result.filesScanned}개 검사, 위반 ${result.diagnostics.length}개, ${result.durationMs}ms 소요`
18
+ : `\n${result.filesScanned} files scanned, ${result.diagnostics.length} violations, ${result.durationMs}ms`;
19
+ lines.push(summary);
20
+ return lines.join('\n');
21
+ }
22
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/reporter/text.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAA6B;IAC9C,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,SAAS,gBAAgB,CAAC,CAAa,EAAE,MAAmB;IAC1D,MAAM,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACtE,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,cAAc,OAAO,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB,EAAE,SAAsB,IAAI;IACxE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,IAAI;QAC7B,CAAC,CAAC,QAAQ,MAAM,CAAC,YAAY,YAAY,MAAM,CAAC,WAAW,CAAC,MAAM,MAAM,MAAM,CAAC,UAAU,OAAO;QAChG,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,mBAAmB,MAAM,CAAC,WAAW,CAAC,MAAM,gBAAgB,MAAM,CAAC,UAAU,IAAI,CAAC;IAC9G,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,30 @@
1
+ export type Severity = 'error' | 'warning' | 'info';
2
+ export type Language = 'typescript' | 'javascript' | 'tsx' | 'python';
3
+ export interface Position {
4
+ readonly line: number;
5
+ readonly column: number;
6
+ }
7
+ export interface Range {
8
+ readonly start: Position;
9
+ readonly end: Position;
10
+ }
11
+ export interface Fix {
12
+ readonly range: Range;
13
+ readonly text: string;
14
+ }
15
+ export interface Diagnostic {
16
+ readonly ruleId: string;
17
+ readonly severity: Severity;
18
+ readonly message: string;
19
+ readonly messageKo?: string;
20
+ readonly file: string;
21
+ readonly range: Range;
22
+ readonly fix?: Fix;
23
+ readonly docs?: string;
24
+ }
25
+ export interface CheckResult {
26
+ readonly diagnostics: readonly Diagnostic[];
27
+ readonly filesScanned: number;
28
+ readonly durationMs: number;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@aicqtools/core",
3
+ "version": "1.0.0-alpha.2",
4
+ "type": "module",
5
+ "description": "Shared core for aicqtools — tree-sitter parser, sqlite incremental cache, SARIF/JSON/text reporters, config loader, i18n.",
6
+ "keywords": [
7
+ "aicq",
8
+ "aicqtools",
9
+ "ai",
10
+ "code-quality",
11
+ "guardrail",
12
+ "tree-sitter",
13
+ "sarif",
14
+ "linter"
15
+ ],
16
+ "homepage": "https://github.com/aicqtools/aicqtools/tree/main/packages/core",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/aicqtools/aicqtools.git",
20
+ "directory": "packages/core"
21
+ },
22
+ "bugs": "https://github.com/aicqtools/aicqtools/issues",
23
+ "author": "Eom Sik <neuralflux3@gmail.com>",
24
+ "license": "MIT",
25
+ "main": "./dist/index.js",
26
+ "types": "./dist/index.d.ts",
27
+ "exports": {
28
+ ".": "./dist/index.js",
29
+ "./parser": "./dist/parser/index.js",
30
+ "./config": "./dist/config/index.js",
31
+ "./reporter": "./dist/reporter/index.js",
32
+ "./cache": "./dist/cache/index.js",
33
+ "./i18n": "./dist/i18n/index.js"
34
+ },
35
+ "files": [
36
+ "dist/",
37
+ "README.md"
38
+ ],
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "dependencies": {
43
+ "better-sqlite3": "^11.7.0",
44
+ "tree-sitter": "~0.21.1",
45
+ "tree-sitter-python": "~0.21.0",
46
+ "tree-sitter-typescript": "~0.23.2",
47
+ "yaml": "^2.6.1",
48
+ "zod": "^3.23.8"
49
+ },
50
+ "devDependencies": {
51
+ "@types/better-sqlite3": "^7.6.12",
52
+ "@types/node": "^22.10.0",
53
+ "typescript": "^5.7.2",
54
+ "vitest": "^2.1.8"
55
+ },
56
+ "scripts": {
57
+ "build": "tsc",
58
+ "test": "vitest run --passWithNoTests",
59
+ "typecheck": "tsc --noEmit",
60
+ "clean": "rm -rf dist .turbo"
61
+ }
62
+ }