@aicqtools/cli 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.
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.
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { buildProgram } from './index.js';
3
+ buildProgram().parseAsync(process.argv).catch((err) => {
4
+ process.stderr.write(`aicq: ${err instanceof Error ? err.message : String(err)}\n`);
5
+ process.exit(2);
6
+ });
7
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,YAAY,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface CheckOptions {
2
+ readonly cwd: string;
3
+ readonly format: 'text' | 'json' | 'sarif';
4
+ readonly output?: string;
5
+ readonly locale?: 'ko' | 'en';
6
+ readonly cache?: boolean;
7
+ }
8
+ export declare function runCheck(opts: CheckOptions): Promise<number>;
9
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDlE"}
@@ -0,0 +1,63 @@
1
+ import { resolve } from 'node:path';
2
+ import { writeFile } from 'node:fs/promises';
3
+ import pc from 'picocolors';
4
+ import { FileCache, loadConfig, reportJson, reportSarif, reportText, resolveLocale, t } from '@aicqtools/core';
5
+ import { loadAllBuiltinRules, loadFunctionRulesFromDir, runProject } from '@aicqtools/guardrail';
6
+ export async function runCheck(opts) {
7
+ const cwd = resolve(opts.cwd);
8
+ const config = await loadConfig(cwd);
9
+ const rules = [...(await loadAllBuiltinRules())];
10
+ if (config.modules.guardrail.rulesDir) {
11
+ try {
12
+ const userRules = await loadFunctionRulesFromDir(resolve(cwd, config.modules.guardrail.rulesDir));
13
+ rules.push(...userRules);
14
+ }
15
+ catch {
16
+ // user rules dir is optional
17
+ }
18
+ }
19
+ const cache = opts.cache !== false ? new FileCache(resolve(cwd, '.aicq/cache.sqlite')) : undefined;
20
+ let result;
21
+ try {
22
+ result = await runProject({
23
+ cwd,
24
+ include: config.include,
25
+ exclude: config.exclude,
26
+ rules,
27
+ ...(cache ? { cache } : {}),
28
+ });
29
+ }
30
+ finally {
31
+ cache?.close();
32
+ }
33
+ const locale = resolveLocale({
34
+ ...(opts.locale ? { override: opts.locale } : {}),
35
+ configLocale: config.locale,
36
+ env: process.env,
37
+ });
38
+ let serialized;
39
+ if (opts.format === 'json')
40
+ serialized = reportJson(result);
41
+ else if (opts.format === 'sarif')
42
+ serialized = reportSarif(result);
43
+ else
44
+ serialized = reportText(result, locale);
45
+ if (opts.output) {
46
+ await writeFile(resolve(cwd, opts.output), serialized, 'utf-8');
47
+ }
48
+ else if (opts.format === 'text') {
49
+ process.stdout.write(serialized + '\n');
50
+ if (result.diagnostics.length > 0) {
51
+ process.stdout.write(pc.red('\n' + t(locale, 'cli.check.violationsFound', { count: result.diagnostics.length }) + '\n'));
52
+ }
53
+ else {
54
+ process.stdout.write(pc.green('\n' + t(locale, 'cli.check.noViolations') + '\n'));
55
+ }
56
+ }
57
+ else {
58
+ process.stdout.write(serialized + '\n');
59
+ }
60
+ const hasErrors = result.diagnostics.some((d) => d.severity === 'error');
61
+ return hasErrors ? 1 : 0;
62
+ }
63
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAWjG,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAkB;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,KAAK,GAAW,CAAC,GAAG,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClG,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAC;YACxB,GAAG;YACH,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK;YACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;SACvD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;QAAE,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;;QAC9D,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,2BAA2B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CACnG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACzE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface DocsBuildOptions {
2
+ readonly cwd: string;
3
+ readonly out: string;
4
+ readonly locale?: 'ko' | 'en';
5
+ }
6
+ export declare function runDocsBuild(opts: DocsBuildOptions): Promise<number>;
7
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B1E"}
@@ -0,0 +1,30 @@
1
+ import { resolve } from 'node:path';
2
+ import { loadConfig, resolveLocale, t } from '@aicqtools/core';
3
+ import { buildRuleDocs, loadAllBuiltinRules, loadFunctionRulesFromDir } from '@aicqtools/guardrail';
4
+ export async function runDocsBuild(opts) {
5
+ const cwd = resolve(opts.cwd);
6
+ const config = await loadConfig(cwd);
7
+ const locale = resolveLocale({
8
+ ...(opts.locale ? { override: opts.locale } : {}),
9
+ configLocale: config.locale,
10
+ env: process.env,
11
+ });
12
+ const rules = [...(await loadAllBuiltinRules())];
13
+ if (config.modules.guardrail.rulesDir) {
14
+ try {
15
+ const userRules = await loadFunctionRulesFromDir(resolve(cwd, config.modules.guardrail.rulesDir));
16
+ rules.push(...userRules);
17
+ }
18
+ catch {
19
+ // optional
20
+ }
21
+ }
22
+ const { outDir, files } = await buildRuleDocs({
23
+ cwd,
24
+ outDir: opts.out,
25
+ rules,
26
+ });
27
+ process.stdout.write(t(locale, 'cli.docs.generated', { count: files, dir: outDir }) + '\n');
28
+ return 0;
29
+ }
30
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AASpG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAsB;IACvD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAW,CAAC,GAAG,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAC9C,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAChD,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC;QAC5C,GAAG;QACH,MAAM,EAAE,IAAI,CAAC,GAAG;QAChB,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5F,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runMcpStdio(): Promise<never>;
2
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAEA,wBAAsB,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,CAKlD"}
@@ -0,0 +1,8 @@
1
+ import { startStdio } from '@aicqtools/guardrail';
2
+ export async function runMcpStdio() {
3
+ await startStdio();
4
+ return new Promise(() => {
5
+ // Block forever; transport reads stdin until EOF.
6
+ });
7
+ }
8
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,EAAE,CAAC;IACnB,OAAO,IAAI,OAAO,CAAQ,GAAG,EAAE;QAC7B,kDAAkD;IACpD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ReaderName } from '@aicqtools/provenance';
2
+ export interface ProvenanceCaptureOptions {
3
+ readonly cwd: string;
4
+ readonly output?: string;
5
+ readonly locale?: 'ko' | 'en';
6
+ readonly reader?: ReaderName;
7
+ }
8
+ export declare function runProvenanceCapture(opts: ProvenanceCaptureOptions): Promise<number>;
9
+ export interface ProvenanceReportOptions {
10
+ readonly cwd: string;
11
+ readonly format: 'article-50' | 'article-50-html' | 'article-50-pdf' | 'ai-bom';
12
+ readonly recordPath: string;
13
+ readonly locale?: 'ko' | 'en';
14
+ readonly output?: string;
15
+ }
16
+ export declare function runProvenanceReport(opts: ProvenanceReportOptions): Promise<number>;
17
+ //# sourceMappingURL=provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/commands/provenance.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB1F;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,QAAQ,CAAC;IAChF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCxF"}
@@ -0,0 +1,64 @@
1
+ import { writeFile } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+ import { loadConfig, resolveLocale, t } from '@aicqtools/core';
4
+ import { buildRecord, capture, createReader, emitAiBom, buildArticle50Report, renderArticle50Html, renderArticle50Pdf, writeProvenanceRecord, } from '@aicqtools/provenance';
5
+ export async function runProvenanceCapture(opts) {
6
+ const cwd = resolve(opts.cwd);
7
+ const config = await loadConfig(cwd);
8
+ const locale = resolveLocale({
9
+ ...(opts.locale ? { override: opts.locale } : {}),
10
+ configLocale: config.locale,
11
+ env: process.env,
12
+ });
13
+ const reader = createReader(opts.reader ?? 'manual');
14
+ const result = await capture({ cwd, commitTimestamp: new Date().toISOString(), reader });
15
+ const record = buildRecord(result);
16
+ const outPath = resolve(cwd, opts.output ?? `aicq/provenance/${Date.now()}.json`);
17
+ await writeProvenanceRecord(outPath, record);
18
+ process.stdout.write(t(locale, 'cli.provenance.captured', { path: outPath }) + '\n');
19
+ process.stdout.write(t(locale, 'cli.provenance.summary', {
20
+ attributions: record.attributions.length,
21
+ sessions: record.sessions.length,
22
+ }) + '\n');
23
+ return 0;
24
+ }
25
+ export async function runProvenanceReport(opts) {
26
+ const { readFile } = await import('node:fs/promises');
27
+ const cwd = resolve(opts.cwd);
28
+ const path = resolve(cwd, opts.recordPath);
29
+ const record = JSON.parse(await readFile(path, 'utf-8'));
30
+ if (opts.format === 'ai-bom') {
31
+ process.stdout.write(JSON.stringify(emitAiBom(record), null, 2) + '\n');
32
+ return 0;
33
+ }
34
+ if (opts.format === 'article-50-html') {
35
+ const config = await loadConfig(cwd);
36
+ const locale = resolveLocale({
37
+ ...(opts.locale ? { override: opts.locale } : {}),
38
+ configLocale: config.locale,
39
+ env: process.env,
40
+ });
41
+ process.stdout.write(renderArticle50Html(buildArticle50Report(record), { locale }));
42
+ return 0;
43
+ }
44
+ if (opts.format === 'article-50-pdf') {
45
+ if (!opts.output) {
46
+ process.stderr.write('--output <path> is required for article-50-pdf format\n');
47
+ return 1;
48
+ }
49
+ const config = await loadConfig(cwd);
50
+ const locale = resolveLocale({
51
+ ...(opts.locale ? { override: opts.locale } : {}),
52
+ configLocale: config.locale,
53
+ env: process.env,
54
+ });
55
+ const pdf = await renderArticle50Pdf(buildArticle50Report(record), { locale });
56
+ const outPath = resolve(cwd, opts.output);
57
+ await writeFile(outPath, pdf);
58
+ process.stdout.write(`PDF written: ${outPath}\n`);
59
+ return 0;
60
+ }
61
+ process.stdout.write(JSON.stringify(buildArticle50Report(record), null, 2) + '\n');
62
+ return 0;
63
+ }
64
+ //# sourceMappingURL=provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/commands/provenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface SyncAiRulesOptions {
2
+ readonly cwd: string;
3
+ readonly locale?: 'ko' | 'en';
4
+ }
5
+ export declare function runSyncAiRules(opts: SyncAiRulesOptions): Promise<number>;
6
+ //# sourceMappingURL=sync-ai-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-ai-rules.d.ts","sourceRoot":"","sources":["../../src/commands/sync-ai-rules.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B9E"}
@@ -0,0 +1,31 @@
1
+ import { resolve } from 'node:path';
2
+ import { loadConfig, resolveLocale, t } from '@aicqtools/core';
3
+ import { loadAllBuiltinRules, loadFunctionRulesFromDir, syncAiRules } from '@aicqtools/guardrail';
4
+ export async function runSyncAiRules(opts) {
5
+ const cwd = resolve(opts.cwd);
6
+ const config = await loadConfig(cwd);
7
+ const rules = [...(await loadAllBuiltinRules())];
8
+ if (config.modules.guardrail.rulesDir) {
9
+ try {
10
+ const userRules = await loadFunctionRulesFromDir(resolve(cwd, config.modules.guardrail.rulesDir));
11
+ rules.push(...userRules);
12
+ }
13
+ catch {
14
+ // optional
15
+ }
16
+ }
17
+ const locale = resolveLocale({
18
+ ...(opts.locale ? { override: opts.locale } : {}),
19
+ configLocale: config.locale,
20
+ env: process.env,
21
+ });
22
+ const written = await syncAiRules(rules, {
23
+ cwd,
24
+ locale,
25
+ });
26
+ for (const path of written) {
27
+ process.stdout.write(t(locale, 'cli.sync.updated', { path }) + '\n');
28
+ }
29
+ return 0;
30
+ }
31
+ //# sourceMappingURL=sync-ai-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-ai-rules.js","sourceRoot":"","sources":["../../src/commands/sync-ai-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQlG,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAwB;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,MAAM,KAAK,GAAW,CAAC,GAAG,CAAC,MAAM,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAC9C,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAChD,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE;QACvC,GAAG;QACH,MAAM;KACP,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function buildProgram(): Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,YAAY,IAAI,OAAO,CAkJtC"}
package/dist/index.js ADDED
@@ -0,0 +1,122 @@
1
+ import { Command } from 'commander';
2
+ import { runCheck } from './commands/check.js';
3
+ export function buildProgram() {
4
+ const program = new Command();
5
+ program
6
+ .name('aicq')
7
+ .description('AI Code Quality Platform — guardrail engine and provenance tracker')
8
+ .version('0.0.0');
9
+ program
10
+ .command('check')
11
+ .description('Run guardrail rules against the project')
12
+ .option('-C, --cwd <path>', 'project root', process.cwd())
13
+ .option('-f, --format <format>', 'output format (text|json|sarif)', 'text')
14
+ .option('-o, --output <path>', 'write report to file instead of stdout')
15
+ .option('--locale <locale>', 'message locale (ko|en)')
16
+ .option('--no-cache', 'disable incremental sqlite cache')
17
+ .action(async (opts) => {
18
+ const format = ['text', 'json', 'sarif'].find((f) => f === opts.format) ?? 'text';
19
+ const locale = opts.locale === 'ko' || opts.locale === 'en' ? opts.locale : undefined;
20
+ const code = await runCheck({
21
+ cwd: opts.cwd,
22
+ format,
23
+ ...(opts.output !== undefined ? { output: opts.output } : {}),
24
+ ...(locale !== undefined ? { locale } : {}),
25
+ cache: opts.cache,
26
+ });
27
+ process.exit(code);
28
+ });
29
+ const provenance = program
30
+ .command('provenance')
31
+ .description('AI code provenance commands (capture, report)');
32
+ provenance
33
+ .command('capture')
34
+ .description('Capture provenance from staged git changes + active AI session')
35
+ .option('-C, --cwd <path>', 'project root', process.cwd())
36
+ .option('-o, --output <path>', 'output JSON path (default: aicq/provenance/<ts>.json)')
37
+ .option('--locale <locale>', 'message locale (ko|en)')
38
+ .option('--reader <name>', 'session reader (manual|claude-code|cursor|all)', 'manual')
39
+ .action(async (opts) => {
40
+ const { runProvenanceCapture } = await import('./commands/provenance.js');
41
+ const locale = opts.locale === 'ko' || opts.locale === 'en' ? opts.locale : undefined;
42
+ const reader = opts.reader === 'claude-code' || opts.reader === 'cursor' || opts.reader === 'all'
43
+ ? opts.reader
44
+ : 'manual';
45
+ const code = await runProvenanceCapture({
46
+ cwd: opts.cwd,
47
+ ...(opts.output !== undefined ? { output: opts.output } : {}),
48
+ ...(locale !== undefined ? { locale } : {}),
49
+ reader,
50
+ });
51
+ process.exit(code);
52
+ });
53
+ provenance
54
+ .command('report')
55
+ .description('Render a compliance report from a captured provenance record')
56
+ .argument('<record>', 'path to a captured provenance JSON file')
57
+ .option('-C, --cwd <path>', 'project root', process.cwd())
58
+ .option('-f, --format <format>', 'report format (article-50|article-50-html|article-50-pdf|ai-bom)', 'article-50')
59
+ .option('--locale <locale>', 'message locale for HTML/PDF output (ko|en)')
60
+ .option('-o, --output <path>', 'output file (required for article-50-pdf)')
61
+ .action(async (record, opts) => {
62
+ const { runProvenanceReport } = await import('./commands/provenance.js');
63
+ const format = opts.format === 'ai-bom'
64
+ ? 'ai-bom'
65
+ : opts.format === 'article-50-html'
66
+ ? 'article-50-html'
67
+ : opts.format === 'article-50-pdf'
68
+ ? 'article-50-pdf'
69
+ : 'article-50';
70
+ const locale = opts.locale === 'ko' || opts.locale === 'en' ? opts.locale : undefined;
71
+ const code = await runProvenanceReport({
72
+ cwd: opts.cwd,
73
+ format,
74
+ recordPath: record,
75
+ ...(locale !== undefined ? { locale } : {}),
76
+ ...(opts.output !== undefined ? { output: opts.output } : {}),
77
+ });
78
+ process.exit(code);
79
+ });
80
+ program
81
+ .command('mcp')
82
+ .description('Start MCP server over stdio for Claude Code / Cursor integration')
83
+ .action(async () => {
84
+ const { runMcpStdio } = await import('./commands/mcp.js');
85
+ await runMcpStdio();
86
+ });
87
+ program
88
+ .command('sync-ai-rules')
89
+ .description('Generate / refresh .cursorrules and CLAUDE.md from loaded rules')
90
+ .option('-C, --cwd <path>', 'project root', process.cwd())
91
+ .option('--locale <locale>', 'message locale (ko|en)')
92
+ .action(async (opts) => {
93
+ const { runSyncAiRules } = await import('./commands/sync-ai-rules.js');
94
+ const locale = opts.locale === 'ko' || opts.locale === 'en' ? opts.locale : undefined;
95
+ const code = await runSyncAiRules({
96
+ cwd: opts.cwd,
97
+ ...(locale !== undefined ? { locale } : {}),
98
+ });
99
+ process.exit(code);
100
+ });
101
+ const docs = program
102
+ .command('docs')
103
+ .description('Documentation tooling (rule pages, etc.)');
104
+ docs
105
+ .command('build')
106
+ .description('Generate per-rule markdown docs (ko + en)')
107
+ .option('-C, --cwd <path>', 'project root', process.cwd())
108
+ .option('-o, --out <path>', 'output directory', 'aicq-docs')
109
+ .option('--locale <locale>', 'message locale (ko|en) — affects status message only')
110
+ .action(async (opts) => {
111
+ const { runDocsBuild } = await import('./commands/docs.js');
112
+ const locale = opts.locale === 'ko' || opts.locale === 'en' ? opts.locale : undefined;
113
+ const code = await runDocsBuild({
114
+ cwd: opts.cwd,
115
+ out: opts.out,
116
+ ...(locale !== undefined ? { locale } : {}),
117
+ });
118
+ process.exit(code);
119
+ });
120
+ return program;
121
+ }
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,oEAAoE,CAAC;SACjF,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CAAC,uBAAuB,EAAE,iCAAiC,EAAE,MAAM,CAAC;SAC1E,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;SACrD,MAAM,CAAC,YAAY,EAAE,kCAAkC,CAAC;SACxD,MAAM,CACL,KAAK,EAAE,IAAuF,EAAE,EAAE;QAChG,MAAM,MAAM,GAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;QAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC;YAC1B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM;YACN,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CACF,CAAC;IAEJ,MAAM,UAAU,GAAG,OAAO;SACvB,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,+CAA+C,CAAC,CAAC;IAEhE,UAAU;SACP,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,uDAAuD,CAAC;SACtF,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;SACrD,MAAM,CACL,iBAAiB,EACjB,gDAAgD,EAChD,QAAQ,CACT;SACA,MAAM,CACL,KAAK,EAAE,IAAuE,EAAE,EAAE;QAChF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;YAChF,CAAC,CAAC,IAAI,CAAC,MAAM;YACb,CAAC,CAAC,QAAQ,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,MAAM;SACP,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CACF,CAAC;IAEJ,UAAU;SACP,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8DAA8D,CAAC;SAC3E,QAAQ,CAAC,UAAU,EAAE,yCAAyC,CAAC;SAC/D,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CACL,uBAAuB,EACvB,kEAAkE,EAClE,YAAY,CACb;SACA,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,CAAC;SACzE,MAAM,CAAC,qBAAqB,EAAE,2CAA2C,CAAC;SAC1E,MAAM,CACL,KAAK,EACH,MAAc,EACd,IAAuE,EACvE,EAAE;QACF,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACzE,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,QAAQ;YACtB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,iBAAiB;gBACjC,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,gBAAgB;oBAChC,CAAC,CAAC,gBAAgB;oBAClB,CAAC,CAAC,YAAY,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC;YACrC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM;YACN,UAAU,EAAE,MAAM;YAClB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CACF,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,kEAAkE,CAAC;SAC/E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC1D,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;QACvD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC;YAChC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAE3D,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SACzD,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,IAAmD,EAAE,EAAE;QACpE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC;YAC9B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@aicqtools/cli",
3
+ "version": "1.0.0-alpha.2",
4
+ "type": "module",
5
+ "description": "aicq command-line interface — `aicq check`, `aicq mcp`, `aicq sync-ai-rules`, `aicq provenance`, `aicq docs build`.",
6
+ "keywords": [
7
+ "aicq",
8
+ "aicqtools",
9
+ "cli",
10
+ "ai",
11
+ "code-quality",
12
+ "guardrail",
13
+ "linter",
14
+ "mcp"
15
+ ],
16
+ "homepage": "https://github.com/aicqtools/aicqtools/tree/main/packages/cli",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/aicqtools/aicqtools.git",
20
+ "directory": "packages/cli"
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
+ "bin": {
28
+ "aicq": "./dist/bin.js"
29
+ },
30
+ "exports": {
31
+ ".": "./dist/index.js"
32
+ },
33
+ "files": [
34
+ "dist/",
35
+ "README.md"
36
+ ],
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "dependencies": {
41
+ "commander": "^12.1.0",
42
+ "picocolors": "^1.1.1",
43
+ "@aicqtools/core": "1.0.0-alpha.2",
44
+ "@aicqtools/rule-sdk": "1.0.0-alpha.2",
45
+ "@aicqtools/guardrail": "1.0.0-alpha.2",
46
+ "@aicqtools/provenance": "1.0.0-alpha.2"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^22.10.0",
50
+ "typescript": "^5.7.2",
51
+ "vitest": "^2.1.8"
52
+ },
53
+ "scripts": {
54
+ "build": "tsc",
55
+ "test": "vitest run --passWithNoTests",
56
+ "typecheck": "tsc --noEmit",
57
+ "clean": "rm -rf dist .turbo"
58
+ }
59
+ }