ai-cmd 1.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/LICENSE +21 -0
- package/README.md +275 -0
- package/dist/cli/commands.d.ts +13 -0
- package/dist/cli/commands.js +221 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts.d.ts +2 -0
- package/dist/cli/prompts.js +32 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/repl.d.ts +9 -0
- package/dist/cli/repl.js +166 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/config/env.d.ts +2 -0
- package/dist/config/env.js +8 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/userConfig.d.ts +10 -0
- package/dist/config/userConfig.js +91 -0
- package/dist/config/userConfig.js.map +1 -0
- package/dist/core/explainCommand.d.ts +2 -0
- package/dist/core/explainCommand.js +4 -0
- package/dist/core/explainCommand.js.map +1 -0
- package/dist/core/generateCommand.d.ts +2 -0
- package/dist/core/generateCommand.js +29 -0
- package/dist/core/generateCommand.js.map +1 -0
- package/dist/core/output.d.ts +4 -0
- package/dist/core/output.js +67 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/prompts.d.ts +7 -0
- package/dist/core/prompts.js +71 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/response.d.ts +19 -0
- package/dist/core/response.js +44 -0
- package/dist/core/response.js.map +1 -0
- package/dist/core/session.d.ts +9 -0
- package/dist/core/session.js +23 -0
- package/dist/core/session.js.map +1 -0
- package/dist/exec/runCommand.d.ts +11 -0
- package/dist/exec/runCommand.js +57 -0
- package/dist/exec/runCommand.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/detectPlatform.d.ts +9 -0
- package/dist/platform/detectPlatform.js +49 -0
- package/dist/platform/detectPlatform.js.map +1 -0
- package/dist/platform/detectServiceManager.d.ts +3 -0
- package/dist/platform/detectServiceManager.js +38 -0
- package/dist/platform/detectServiceManager.js.map +1 -0
- package/dist/platform/detectShell.d.ts +3 -0
- package/dist/platform/detectShell.js +21 -0
- package/dist/platform/detectShell.js.map +1 -0
- package/dist/providers/factory.d.ts +2 -0
- package/dist/providers/factory.js +9 -0
- package/dist/providers/factory.js.map +1 -0
- package/dist/providers/openai.d.ts +8 -0
- package/dist/providers/openai.js +73 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/safety/classifyRisk.d.ts +7 -0
- package/dist/safety/classifyRisk.js +115 -0
- package/dist/safety/classifyRisk.js.map +1 -0
- package/dist/safety/dangerousPatterns.d.ts +8 -0
- package/dist/safety/dangerousPatterns.js +70 -0
- package/dist/safety/dangerousPatterns.js.map +1 -0
- package/dist/safety/executionPolicy.d.ts +9 -0
- package/dist/safety/executionPolicy.js +21 -0
- package/dist/safety/executionPolicy.js.map +1 -0
- package/dist/types/index.d.ts +79 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/branding.d.ts +6 -0
- package/dist/utils/branding.js +11 -0
- package/dist/utils/branding.js.map +1 -0
- package/dist/utils/errors.d.ts +26 -0
- package/dist/utils/errors.js +59 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.js +14 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/strings.d.ts +5 -0
- package/dist/utils/strings.js +30 -0
- package/dist/utils/strings.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export type RiskLevel = "low" | "medium" | "high";
|
|
2
|
+
export type OperatingSystem = "linux" | "macos" | "wsl" | "unix" | "unsupported";
|
|
3
|
+
export type ShellType = "bash" | "zsh" | "sh" | "unknown";
|
|
4
|
+
export type ServiceManager = "systemctl" | "service" | "rc-service" | "launchctl" | "unknown";
|
|
5
|
+
export type ProviderName = "openai";
|
|
6
|
+
export interface PlatformContext {
|
|
7
|
+
os: OperatingSystem;
|
|
8
|
+
shell: ShellType;
|
|
9
|
+
serviceManager: ServiceManager;
|
|
10
|
+
cwd: string;
|
|
11
|
+
cwdName: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ProviderCommandPayload {
|
|
14
|
+
command: string;
|
|
15
|
+
explanation: string;
|
|
16
|
+
platformNotes?: string[];
|
|
17
|
+
assumptions?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface ConversationTurn {
|
|
20
|
+
question: string;
|
|
21
|
+
command: string;
|
|
22
|
+
explanation: string;
|
|
23
|
+
}
|
|
24
|
+
export interface CommandSuggestion extends ProviderCommandPayload {
|
|
25
|
+
question: string;
|
|
26
|
+
risk: RiskLevel;
|
|
27
|
+
platform: PlatformContext;
|
|
28
|
+
}
|
|
29
|
+
export interface AppConfig {
|
|
30
|
+
provider: ProviderName;
|
|
31
|
+
model: string;
|
|
32
|
+
apiKey: string;
|
|
33
|
+
baseUrl: string;
|
|
34
|
+
timeoutMs: number;
|
|
35
|
+
}
|
|
36
|
+
export interface GenerateObjectRequest {
|
|
37
|
+
systemPrompt: string;
|
|
38
|
+
userPrompt: string;
|
|
39
|
+
schemaName: string;
|
|
40
|
+
schemaDescription: string;
|
|
41
|
+
jsonSchema: Record<string, unknown>;
|
|
42
|
+
temperature?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface ProviderTextResponse {
|
|
45
|
+
provider: string;
|
|
46
|
+
model: string;
|
|
47
|
+
rawText: string;
|
|
48
|
+
}
|
|
49
|
+
export interface AIProvider {
|
|
50
|
+
readonly name: ProviderName;
|
|
51
|
+
generateObject(input: GenerateObjectRequest): Promise<ProviderTextResponse>;
|
|
52
|
+
}
|
|
53
|
+
export interface GenerateCommandOptions {
|
|
54
|
+
question: string;
|
|
55
|
+
platform: PlatformContext;
|
|
56
|
+
provider: AIProvider;
|
|
57
|
+
explainRequested?: boolean;
|
|
58
|
+
history?: ConversationTurn[];
|
|
59
|
+
}
|
|
60
|
+
export interface OutputOptions {
|
|
61
|
+
color: boolean;
|
|
62
|
+
explain: boolean;
|
|
63
|
+
json: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface CliOptions {
|
|
66
|
+
exec: boolean;
|
|
67
|
+
yes: boolean;
|
|
68
|
+
explain: boolean;
|
|
69
|
+
json: boolean;
|
|
70
|
+
version: boolean;
|
|
71
|
+
shell?: Exclude<ShellType, "unknown">;
|
|
72
|
+
noColor: boolean;
|
|
73
|
+
debug: boolean;
|
|
74
|
+
copy: boolean;
|
|
75
|
+
}
|
|
76
|
+
export interface PromptAdapter {
|
|
77
|
+
confirm(message: string, initial?: boolean): Promise<boolean>;
|
|
78
|
+
text(message: string): Promise<string>;
|
|
79
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const APP_NAME = "AI-CMD";
|
|
2
|
+
export declare const APP_VERSION = "1.0.1";
|
|
3
|
+
export declare const BRAND_NAME = "Ottili ONE";
|
|
4
|
+
export declare const BRAND_URL = "ottili.one";
|
|
5
|
+
export declare function formatVersionBanner(): string;
|
|
6
|
+
export declare function formatReplBanner(): string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const APP_NAME = "AI-CMD";
|
|
2
|
+
export const APP_VERSION = "1.0.1";
|
|
3
|
+
export const BRAND_NAME = "Ottili ONE";
|
|
4
|
+
export const BRAND_URL = "ottili.one";
|
|
5
|
+
export function formatVersionBanner() {
|
|
6
|
+
return [APP_NAME, `v. ${APP_VERSION}`, `Powered by ${BRAND_NAME}`, BRAND_URL].join("\n");
|
|
7
|
+
}
|
|
8
|
+
export function formatReplBanner() {
|
|
9
|
+
return `${APP_NAME} | Powered by ${BRAND_NAME} | ${BRAND_URL}`;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=branding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branding.js","sourceRoot":"","sources":["../../src/utils/branding.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC;AAEtC,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,QAAQ,EAAE,MAAM,WAAW,EAAE,EAAE,cAAc,UAAU,EAAE,EAAE,SAAS,CAAC,CAAC,IAAI,CAChF,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,GAAG,QAAQ,iBAAiB,UAAU,MAAM,SAAS,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare class AiCmdError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
constructor(code: string, message: string, cause?: unknown);
|
|
4
|
+
}
|
|
5
|
+
export declare class ConfigurationError extends AiCmdError {
|
|
6
|
+
constructor(message: string, cause?: unknown);
|
|
7
|
+
}
|
|
8
|
+
export declare class ProviderError extends AiCmdError {
|
|
9
|
+
constructor(message: string, cause?: unknown);
|
|
10
|
+
}
|
|
11
|
+
export declare class ResponseValidationError extends AiCmdError {
|
|
12
|
+
constructor(message: string, cause?: unknown);
|
|
13
|
+
}
|
|
14
|
+
export declare class ExecutionPolicyError extends AiCmdError {
|
|
15
|
+
constructor(message: string, cause?: unknown);
|
|
16
|
+
}
|
|
17
|
+
export declare class ExecutionError extends AiCmdError {
|
|
18
|
+
constructor(message: string, cause?: unknown);
|
|
19
|
+
}
|
|
20
|
+
export declare class ClipboardError extends AiCmdError {
|
|
21
|
+
constructor(message: string, cause?: unknown);
|
|
22
|
+
}
|
|
23
|
+
export declare class UserCancelledError extends AiCmdError {
|
|
24
|
+
constructor(message?: string);
|
|
25
|
+
}
|
|
26
|
+
export declare function getErrorMessage(error: unknown, debug?: boolean): string;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export class AiCmdError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message, cause) {
|
|
4
|
+
super(message, cause ? { cause } : undefined);
|
|
5
|
+
this.name = this.constructor.name;
|
|
6
|
+
this.code = code;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class ConfigurationError extends AiCmdError {
|
|
10
|
+
constructor(message, cause) {
|
|
11
|
+
super("CONFIG_ERROR", message, cause);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class ProviderError extends AiCmdError {
|
|
15
|
+
constructor(message, cause) {
|
|
16
|
+
super("PROVIDER_ERROR", message, cause);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class ResponseValidationError extends AiCmdError {
|
|
20
|
+
constructor(message, cause) {
|
|
21
|
+
super("RESPONSE_VALIDATION_ERROR", message, cause);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export class ExecutionPolicyError extends AiCmdError {
|
|
25
|
+
constructor(message, cause) {
|
|
26
|
+
super("EXECUTION_POLICY_ERROR", message, cause);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class ExecutionError extends AiCmdError {
|
|
30
|
+
constructor(message, cause) {
|
|
31
|
+
super("EXECUTION_ERROR", message, cause);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class ClipboardError extends AiCmdError {
|
|
35
|
+
constructor(message, cause) {
|
|
36
|
+
super("CLIPBOARD_ERROR", message, cause);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class UserCancelledError extends AiCmdError {
|
|
40
|
+
constructor(message = "Operation cancelled by user.") {
|
|
41
|
+
super("USER_CANCELLED", message);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function getErrorMessage(error, debug = false) {
|
|
45
|
+
if (error instanceof AiCmdError) {
|
|
46
|
+
if (debug && error.cause) {
|
|
47
|
+
return `${error.message}\nCause: ${String(error.cause)}`;
|
|
48
|
+
}
|
|
49
|
+
return error.message;
|
|
50
|
+
}
|
|
51
|
+
if (error instanceof Error) {
|
|
52
|
+
if (debug && error.stack) {
|
|
53
|
+
return error.stack;
|
|
54
|
+
}
|
|
55
|
+
return error.message;
|
|
56
|
+
}
|
|
57
|
+
return String(error);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAS;IAEtB,YAAmB,IAAY,EAAE,OAAe,EAAE,KAAe;QAC/D,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,UAAU;IACrD,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,2BAA2B,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAClD,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,wBAAwB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAmB,OAAe,EAAE,KAAe;QACjD,KAAK,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAmB,OAAO,GAAG,8BAA8B;QACzD,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,KAAK,GAAG,KAAK;IAC3D,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,GAAG,KAAK,CAAC,OAAO,YAAY,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,CAAC;QAED,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class Logger {
|
|
2
|
+
enabled;
|
|
3
|
+
constructor(enabled) {
|
|
4
|
+
this.enabled = enabled;
|
|
5
|
+
}
|
|
6
|
+
debug(message, data) {
|
|
7
|
+
if (!this.enabled) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const payload = data === undefined ? "" : ` ${JSON.stringify(data, null, 2)}`;
|
|
11
|
+
process.stderr.write(`[debug] ${message}${payload}\n`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,MAAM;IACmB;IAApC,YAAoC,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAEjD,KAAK,CAAC,OAAe,EAAE,IAAc;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GACX,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function normalizeText(value: string): string;
|
|
2
|
+
export declare function normalizeOptionalList(values: string[] | undefined): string[] | undefined;
|
|
3
|
+
export declare function stripMarkdownCodeFence(input: string): string;
|
|
4
|
+
export declare function extractFirstJsonObject(input: string): string;
|
|
5
|
+
export declare function hasMultipleCommandLines(command: string): boolean;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function normalizeText(value) {
|
|
2
|
+
return value.replace(/\s+/g, " ").trim();
|
|
3
|
+
}
|
|
4
|
+
export function normalizeOptionalList(values) {
|
|
5
|
+
if (!values || values.length === 0) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const items = values
|
|
9
|
+
.map((value) => normalizeText(value))
|
|
10
|
+
.filter((value, index, array) => value.length > 0 && array.indexOf(value) === index);
|
|
11
|
+
return items.length > 0 ? items : undefined;
|
|
12
|
+
}
|
|
13
|
+
export function stripMarkdownCodeFence(input) {
|
|
14
|
+
return input
|
|
15
|
+
.replace(/^```(?:json)?\s*/i, "")
|
|
16
|
+
.replace(/\s*```$/i, "")
|
|
17
|
+
.trim();
|
|
18
|
+
}
|
|
19
|
+
export function extractFirstJsonObject(input) {
|
|
20
|
+
const start = input.indexOf("{");
|
|
21
|
+
const end = input.lastIndexOf("}");
|
|
22
|
+
if (start === -1 || end === -1 || end <= start) {
|
|
23
|
+
return input.trim();
|
|
24
|
+
}
|
|
25
|
+
return input.slice(start, end + 1).trim();
|
|
26
|
+
}
|
|
27
|
+
export function hasMultipleCommandLines(command) {
|
|
28
|
+
return command.split(/\r?\n/).filter((line) => line.trim().length > 0).length > 1;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAA4B;IAE5B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM;SACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IAEvF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,KAAK;SACT,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACpF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ai-cmd",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Natural-language shell command generation with safe execution for Unix-like terminals.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Ottili ONE",
|
|
8
|
+
"homepage": "https://github.com/Ottili-ONE/ai-cmd",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/Ottili-ONE/ai-cmd.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/Ottili-ONE/ai-cmd/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"cli",
|
|
18
|
+
"shell",
|
|
19
|
+
"terminal",
|
|
20
|
+
"ai",
|
|
21
|
+
"commands",
|
|
22
|
+
"developer-tools"
|
|
23
|
+
],
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=20"
|
|
26
|
+
},
|
|
27
|
+
"bin": {
|
|
28
|
+
"ai": "./dist/cli/index.js"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"README.md",
|
|
33
|
+
"LICENSE"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -p tsconfig.json",
|
|
37
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
38
|
+
"dev": "tsx src/cli/index.ts",
|
|
39
|
+
"lint": "eslint .",
|
|
40
|
+
"format": "prettier --check .",
|
|
41
|
+
"format:write": "prettier --write .",
|
|
42
|
+
"test": "node ./scripts/run-vitest.mjs",
|
|
43
|
+
"test:watch": "vitest",
|
|
44
|
+
"publish:variants": "node ./scripts/publish-variants.mjs"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"chalk": "^5.4.1",
|
|
48
|
+
"clipboardy": "^4.0.0",
|
|
49
|
+
"commander": "^13.1.0",
|
|
50
|
+
"execa": "^9.5.2",
|
|
51
|
+
"jsonrepair": "^3.13.0",
|
|
52
|
+
"prompts": "^2.4.2",
|
|
53
|
+
"shell-quote": "^1.8.3",
|
|
54
|
+
"zod": "^3.24.2"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@eslint/js": "^9.23.0",
|
|
58
|
+
"@types/node": "^22.13.13",
|
|
59
|
+
"@types/prompts": "^2.4.9",
|
|
60
|
+
"@types/shell-quote": "^1.7.5",
|
|
61
|
+
"eslint": "^9.23.0",
|
|
62
|
+
"globals": "^16.0.0",
|
|
63
|
+
"prettier": "^3.5.3",
|
|
64
|
+
"tsx": "^4.19.3",
|
|
65
|
+
"typescript": "^5.8.2",
|
|
66
|
+
"typescript-eslint": "^8.28.0",
|
|
67
|
+
"vitest": "^3.0.9"
|
|
68
|
+
}
|
|
69
|
+
}
|