@pickle-pee/genesis-cli 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/bootstrap.d.ts +18 -0
- package/dist/bootstrap.js +89 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/input-loop.d.ts +42 -0
- package/dist/input-loop.js +344 -0
- package/dist/input-loop.js.map +1 -0
- package/dist/main.d.ts +35 -0
- package/dist/main.js +321 -0
- package/dist/main.js.map +1 -0
- package/dist/mode-dispatch.d.ts +100 -0
- package/dist/mode-dispatch.js +1830 -0
- package/dist/mode-dispatch.js.map +1 -0
- package/dist/rpc-server.d.ts +16 -0
- package/dist/rpc-server.js +339 -0
- package/dist/rpc-server.js.map +1 -0
- package/dist/session-store.d.ts +12 -0
- package/dist/session-store.js +48 -0
- package/dist/session-store.js.map +1 -0
- package/dist/terminal-display-width.d.ts +1 -0
- package/dist/terminal-display-width.js +33 -0
- package/dist/terminal-display-width.js.map +1 -0
- package/dist/test/bootstrap.test.d.ts +1 -0
- package/dist/test/bootstrap.test.js +50 -0
- package/dist/test/bootstrap.test.js.map +1 -0
- package/dist/test/input-loop-raw.test.d.ts +1 -0
- package/dist/test/input-loop-raw.test.js +204 -0
- package/dist/test/input-loop-raw.test.js.map +1 -0
- package/dist/test/interactive-tty-workbench.test.d.ts +1 -0
- package/dist/test/interactive-tty-workbench.test.js +647 -0
- package/dist/test/interactive-tty-workbench.test.js.map +1 -0
- package/dist/test/main.test.d.ts +1 -0
- package/dist/test/main.test.js +42 -0
- package/dist/test/main.test.js.map +1 -0
- package/dist/test/mode-dispatch.test.d.ts +1 -0
- package/dist/test/mode-dispatch.test.js +315 -0
- package/dist/test/mode-dispatch.test.js.map +1 -0
- package/dist/test/permission-flow.test.d.ts +7 -0
- package/dist/test/permission-flow.test.js +191 -0
- package/dist/test/permission-flow.test.js.map +1 -0
- package/dist/test/rpc-server.test.d.ts +7 -0
- package/dist/test/rpc-server.test.js +285 -0
- package/dist/test/rpc-server.test.js.map +1 -0
- package/dist/test/session-store.test.d.ts +1 -0
- package/dist/test/session-store.test.js +57 -0
- package/dist/test/session-store.test.js.map +1 -0
- package/dist/test/terminal-display-width.test.d.ts +1 -0
- package/dist/test/terminal-display-width.test.js +25 -0
- package/dist/test/terminal-display-width.test.js.map +1 -0
- package/dist/test/tty-session.test.d.ts +1 -0
- package/dist/test/tty-session.test.js +114 -0
- package/dist/test/tty-session.test.js.map +1 -0
- package/dist/theme.d.ts +16 -0
- package/dist/theme.js +20 -0
- package/dist/theme.js.map +1 -0
- package/dist/tty-session.d.ts +26 -0
- package/dist/tty-session.js +116 -0
- package/dist/tty-session.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +26 -0
package/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# @pickle-pee/genesis-cli
|
|
2
|
+
|
|
3
|
+
## 安装
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install -g @pickle-pee/genesis-cli
|
|
7
|
+
genesis --version
|
|
8
|
+
genesis
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 发布目标
|
|
12
|
+
|
|
13
|
+
- npm 包名:`@pickle-pee/genesis-cli`
|
|
14
|
+
- 全局命令:`genesis`
|
|
15
|
+
|
|
16
|
+
## 职责
|
|
17
|
+
|
|
18
|
+
CLI 入口与模式分发。负责参数解析、确定运行模式(Interactive / Print / JSON / RPC),并将请求路由到对应的 runtime 和 UI 通道。
|
|
19
|
+
|
|
20
|
+
## 导出
|
|
21
|
+
|
|
22
|
+
- `main()` — CLI 启动入口
|
|
23
|
+
- `parseArgs()` — 命令行参数解析
|
|
24
|
+
- CLI 模式类型定义
|
|
25
|
+
|
|
26
|
+
## 依赖方向
|
|
27
|
+
|
|
28
|
+
- 依赖: `app-runtime`, `app-config`, `app-ui`
|
|
29
|
+
- 被依赖: 无(终端入口)
|
|
30
|
+
|
|
31
|
+
## 禁止事项
|
|
32
|
+
|
|
33
|
+
- 不实现具体工具逻辑
|
|
34
|
+
- 不管理复杂会话状态
|
|
35
|
+
- 不直接渲染 UI
|
|
36
|
+
|
|
37
|
+
## 验证
|
|
38
|
+
|
|
39
|
+
- `npx tsc --noEmit` 类型检查通过
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
2
|
+
export interface EnsureBootstrapOptions {
|
|
3
|
+
readonly agentDir: string;
|
|
4
|
+
readonly provider: string;
|
|
5
|
+
readonly modelId: string;
|
|
6
|
+
readonly displayName?: string;
|
|
7
|
+
readonly thinkingLevel?: ThinkingLevel;
|
|
8
|
+
readonly bootstrapBaseUrl?: string;
|
|
9
|
+
readonly bootstrapApi?: string;
|
|
10
|
+
readonly bootstrapApiKeyEnv?: string;
|
|
11
|
+
readonly bootstrapAuthHeader?: boolean;
|
|
12
|
+
readonly bootstrapReasoning?: boolean;
|
|
13
|
+
readonly supportsDeveloperRole?: boolean;
|
|
14
|
+
readonly supportsReasoningEffort?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveDefaultBootstrapBaseUrl(env?: NodeJS.ProcessEnv): string;
|
|
17
|
+
export declare function ensureAgentDirBootstrapped(options: EnsureBootstrapOptions): Promise<void>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDefaultBootstrapBaseUrl = resolveDefaultBootstrapBaseUrl;
|
|
4
|
+
exports.ensureAgentDirBootstrapped = ensureAgentDirBootstrapped;
|
|
5
|
+
const promises_1 = require("node:fs/promises");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
function resolveDefaultBootstrapBaseUrl(env = process.env) {
|
|
8
|
+
const pick = (value) => {
|
|
9
|
+
if (typeof value !== "string")
|
|
10
|
+
return undefined;
|
|
11
|
+
const trimmed = value.trim();
|
|
12
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
13
|
+
};
|
|
14
|
+
return (pick(env.GENESIS_BOOTSTRAP_BASE_URL) ??
|
|
15
|
+
pick(env.GENESIS_OPENAI_BASE_URL) ??
|
|
16
|
+
pick(env.GENESIS_LIVE_OPENAI_BASE_URL) ??
|
|
17
|
+
"https://open.bigmodel.cn/api/coding/paas/v4/");
|
|
18
|
+
}
|
|
19
|
+
async function ensureAgentDirBootstrapped(options) {
|
|
20
|
+
const explicitBaseUrl = typeof options.bootstrapBaseUrl === "string" && options.bootstrapBaseUrl.trim().length > 0
|
|
21
|
+
? options.bootstrapBaseUrl.trim()
|
|
22
|
+
: undefined;
|
|
23
|
+
const baseUrl = explicitBaseUrl ?? resolveDefaultBootstrapBaseUrl();
|
|
24
|
+
const api = options.bootstrapApi ?? "openai-completions";
|
|
25
|
+
const apiKeyEnv = options.bootstrapApiKeyEnv ?? "GENESIS_API_KEY";
|
|
26
|
+
const authHeader = options.bootstrapAuthHeader ?? api !== "anthropic-messages";
|
|
27
|
+
const reasoning = options.bootstrapReasoning ?? (options.thinkingLevel !== undefined ? options.thinkingLevel !== "off" : false);
|
|
28
|
+
await (0, promises_1.mkdir)(options.agentDir, { recursive: true });
|
|
29
|
+
const modelsPath = (0, node_path_1.resolve)(options.agentDir, "models.json");
|
|
30
|
+
const existing = await readJsonFile(modelsPath);
|
|
31
|
+
const providers = existing?.providers && typeof existing.providers === "object" ? existing.providers : {};
|
|
32
|
+
const providerKey = options.provider;
|
|
33
|
+
const existingProvider = providers[providerKey];
|
|
34
|
+
const providerRecord = existingProvider && typeof existingProvider === "object" ? existingProvider : {};
|
|
35
|
+
const existingModels = Array.isArray(providerRecord.models)
|
|
36
|
+
? providerRecord.models
|
|
37
|
+
: [];
|
|
38
|
+
const providerHasConfig = typeof providerRecord.baseUrl === "string" &&
|
|
39
|
+
providerRecord.baseUrl.length > 0 &&
|
|
40
|
+
typeof providerRecord.api === "string" &&
|
|
41
|
+
providerRecord.api.length > 0 &&
|
|
42
|
+
typeof providerRecord.apiKey === "string" &&
|
|
43
|
+
providerRecord.apiKey.length > 0 &&
|
|
44
|
+
typeof providerRecord.authHeader === "boolean";
|
|
45
|
+
const modelAlreadyConfigured = existingModels.some((model) => model.id === options.modelId);
|
|
46
|
+
if (providerHasConfig && modelAlreadyConfigured) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const compat = {};
|
|
50
|
+
if (options.supportsDeveloperRole !== undefined) {
|
|
51
|
+
compat.supportsDeveloperRole = options.supportsDeveloperRole;
|
|
52
|
+
}
|
|
53
|
+
if (options.supportsReasoningEffort !== undefined) {
|
|
54
|
+
compat.supportsReasoningEffort = options.supportsReasoningEffort;
|
|
55
|
+
}
|
|
56
|
+
const nextModel = {
|
|
57
|
+
id: options.modelId,
|
|
58
|
+
name: options.displayName ?? options.modelId,
|
|
59
|
+
reasoning,
|
|
60
|
+
input: ["text"],
|
|
61
|
+
contextWindow: 128000,
|
|
62
|
+
maxTokens: 16384,
|
|
63
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
64
|
+
...(Object.keys(compat).length > 0 ? { compat } : {}),
|
|
65
|
+
};
|
|
66
|
+
const nextModels = [...existingModels.filter((model) => model.id !== options.modelId), nextModel];
|
|
67
|
+
providers[providerKey] = {
|
|
68
|
+
...providerRecord,
|
|
69
|
+
baseUrl: typeof providerRecord.baseUrl === "string" && providerRecord.baseUrl.length > 0
|
|
70
|
+
? providerRecord.baseUrl
|
|
71
|
+
: baseUrl,
|
|
72
|
+
api: typeof providerRecord.api === "string" && providerRecord.api.length > 0 ? providerRecord.api : api,
|
|
73
|
+
apiKey: typeof providerRecord.apiKey === "string" && providerRecord.apiKey.length > 0
|
|
74
|
+
? providerRecord.apiKey
|
|
75
|
+
: apiKeyEnv,
|
|
76
|
+
authHeader: typeof providerRecord.authHeader === "boolean" ? providerRecord.authHeader : authHeader,
|
|
77
|
+
models: nextModels,
|
|
78
|
+
};
|
|
79
|
+
await (0, promises_1.writeFile)(modelsPath, `${JSON.stringify({ providers }, null, 2)}\n`, "utf8");
|
|
80
|
+
}
|
|
81
|
+
async function readJsonFile(filePath) {
|
|
82
|
+
try {
|
|
83
|
+
return JSON.parse(await (0, promises_1.readFile)(filePath, "utf8"));
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { InputLoop, InputLoopOptions } from "./input-loop.js";
|
|
2
|
+
export { createInputLoop } from "./input-loop.js";
|
|
3
|
+
export type { CliOptions, ParsedArgs } from "./main.js";
|
|
4
|
+
export { main, parseArgs } from "./main.js";
|
|
5
|
+
export type { ModeHandler } from "./mode-dispatch.js";
|
|
6
|
+
export { createModeHandler } from "./mode-dispatch.js";
|
|
7
|
+
export type { RpcServer, RpcServerOptions } from "./rpc-server.js";
|
|
8
|
+
export { createRpcServer } from "./rpc-server.js";
|
|
9
|
+
export type { CliMode } from "./types/index.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// CLI — entry point, mode dispatch, input loop, and RPC server.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createRpcServer = exports.createModeHandler = exports.parseArgs = exports.main = exports.createInputLoop = void 0;
|
|
5
|
+
var input_loop_js_1 = require("./input-loop.js");
|
|
6
|
+
Object.defineProperty(exports, "createInputLoop", { enumerable: true, get: function () { return input_loop_js_1.createInputLoop; } });
|
|
7
|
+
var main_js_1 = require("./main.js");
|
|
8
|
+
Object.defineProperty(exports, "main", { enumerable: true, get: function () { return main_js_1.main; } });
|
|
9
|
+
Object.defineProperty(exports, "parseArgs", { enumerable: true, get: function () { return main_js_1.parseArgs; } });
|
|
10
|
+
var mode_dispatch_js_1 = require("./mode-dispatch.js");
|
|
11
|
+
Object.defineProperty(exports, "createModeHandler", { enumerable: true, get: function () { return mode_dispatch_js_1.createModeHandler; } });
|
|
12
|
+
var rpc_server_js_1 = require("./rpc-server.js");
|
|
13
|
+
Object.defineProperty(exports, "createRpcServer", { enumerable: true, get: function () { return rpc_server_js_1.createRpcServer; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gEAAgE;;;AAGhE,iDAAkD;AAAzC,gHAAA,eAAe,OAAA;AAExB,qCAA4C;AAAnC,+FAAA,IAAI,OAAA;AAAE,oGAAA,SAAS,OAAA;AAExB,uDAAuD;AAA9C,qHAAA,iBAAiB,OAAA;AAE1B,iDAAkD;AAAzC,gHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input loop — async line reader wrapping Node.js readline.
|
|
3
|
+
*
|
|
4
|
+
* Provides a clean async interface for reading lines from a stream,
|
|
5
|
+
* used by all mode handlers that accept user input.
|
|
6
|
+
*/
|
|
7
|
+
export interface InputLoopOptions {
|
|
8
|
+
/** The prompt string displayed before each input. */
|
|
9
|
+
readonly prompt?: string;
|
|
10
|
+
/** Input stream. Defaults to process.stdin. */
|
|
11
|
+
readonly input?: NodeJS.ReadableStream;
|
|
12
|
+
/** Output stream for prompt display. Defaults to process.stdout. */
|
|
13
|
+
readonly output?: NodeJS.WritableStream;
|
|
14
|
+
/** Enable raw-mode line editing when TTY is available. Defaults to false. */
|
|
15
|
+
readonly rawMode?: boolean;
|
|
16
|
+
/** Called whenever the current input state changes (rawMode only). */
|
|
17
|
+
readonly onInputStateChange?: (state: {
|
|
18
|
+
buffer: string;
|
|
19
|
+
cursor: number;
|
|
20
|
+
}) => void;
|
|
21
|
+
/** Called for special keys (rawMode only). */
|
|
22
|
+
readonly onKey?: (key: "up" | "down" | "pageup" | "pagedown" | "wheelup" | "wheeldown" | "tab" | "shifttab" | "esc" | "ctrlc") => void;
|
|
23
|
+
/** Called when Tab is pressed in rawMode; may replace the current buffer. */
|
|
24
|
+
readonly onTabComplete?: (state: {
|
|
25
|
+
buffer: string;
|
|
26
|
+
cursor: number;
|
|
27
|
+
}) => {
|
|
28
|
+
buffer: string;
|
|
29
|
+
cursor: number;
|
|
30
|
+
} | null;
|
|
31
|
+
/** Called for terminal focus changes (rawMode only). */
|
|
32
|
+
readonly onTerminalEvent?: (event: "focusin" | "focusout") => void;
|
|
33
|
+
/** Whether pressing Enter should emit a terminal newline in raw mode. Defaults to true. */
|
|
34
|
+
readonly submitNewline?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface InputLoop {
|
|
37
|
+
/** Read the next line. Returns null on EOF or after close(). */
|
|
38
|
+
nextLine(): Promise<string | null>;
|
|
39
|
+
/** Close the readline interface and release resources. */
|
|
40
|
+
close(): void;
|
|
41
|
+
}
|
|
42
|
+
export declare function createInputLoop(options?: InputLoopOptions): InputLoop;
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Input loop — async line reader wrapping Node.js readline.
|
|
4
|
+
*
|
|
5
|
+
* Provides a clean async interface for reading lines from a stream,
|
|
6
|
+
* used by all mode handlers that accept user input.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.createInputLoop = createInputLoop;
|
|
43
|
+
const readline = __importStar(require("node:readline"));
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// Factory
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
function createInputLoop(options = {}) {
|
|
48
|
+
const { prompt = "> ", input = process.stdin, output = process.stdout, rawMode = false } = options;
|
|
49
|
+
if (rawMode && isTtyReadable(input) && isTtyWritable(output)) {
|
|
50
|
+
return createRawInputLoop({
|
|
51
|
+
prompt,
|
|
52
|
+
input,
|
|
53
|
+
output,
|
|
54
|
+
onInputStateChange: options.onInputStateChange,
|
|
55
|
+
onKey: options.onKey,
|
|
56
|
+
onTabComplete: options.onTabComplete,
|
|
57
|
+
onTerminalEvent: options.onTerminalEvent,
|
|
58
|
+
submitNewline: options.submitNewline,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
let closed = false;
|
|
62
|
+
const rl = readline.createInterface({
|
|
63
|
+
input: input,
|
|
64
|
+
output: output,
|
|
65
|
+
prompt,
|
|
66
|
+
terminal: true,
|
|
67
|
+
});
|
|
68
|
+
// Pending line resolvers — only one active at a time.
|
|
69
|
+
let pendingResolve = null;
|
|
70
|
+
rl.on("line", (line) => {
|
|
71
|
+
if (pendingResolve) {
|
|
72
|
+
const resolve = pendingResolve;
|
|
73
|
+
pendingResolve = null;
|
|
74
|
+
resolve(line);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
rl.on("close", () => {
|
|
78
|
+
if (pendingResolve) {
|
|
79
|
+
const resolve = pendingResolve;
|
|
80
|
+
pendingResolve = null;
|
|
81
|
+
resolve(null);
|
|
82
|
+
}
|
|
83
|
+
closed = true;
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
nextLine() {
|
|
87
|
+
if (closed)
|
|
88
|
+
return Promise.resolve(null);
|
|
89
|
+
if (pendingResolve) {
|
|
90
|
+
// Should not happen in normal usage; return null as safety.
|
|
91
|
+
return Promise.resolve(null);
|
|
92
|
+
}
|
|
93
|
+
return new Promise((resolve) => {
|
|
94
|
+
pendingResolve = resolve;
|
|
95
|
+
rl.prompt();
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
close() {
|
|
99
|
+
if (!closed) {
|
|
100
|
+
closed = true;
|
|
101
|
+
rl.close();
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function createRawInputLoop(options) {
|
|
107
|
+
const { prompt, input, output, onInputStateChange, onKey, onTabComplete, onTerminalEvent, submitNewline = true, } = options;
|
|
108
|
+
const sgrMousePattern = new RegExp(`^${String.fromCharCode(27)}\\[<(\\d+);(\\d+);(\\d+)([Mm])$`);
|
|
109
|
+
let closed = false;
|
|
110
|
+
let buffer = "";
|
|
111
|
+
let cursor = 0;
|
|
112
|
+
let pendingResolve = null;
|
|
113
|
+
let escapeBuffer = "";
|
|
114
|
+
let escapeTimeout = null;
|
|
115
|
+
const emitState = () => {
|
|
116
|
+
onInputStateChange?.({ buffer, cursor });
|
|
117
|
+
};
|
|
118
|
+
const setState = (next) => {
|
|
119
|
+
buffer = next.buffer;
|
|
120
|
+
cursor = Math.max(0, Math.min(next.cursor, buffer.length));
|
|
121
|
+
emitState();
|
|
122
|
+
};
|
|
123
|
+
const flushPrompt = () => {
|
|
124
|
+
output.write(prompt);
|
|
125
|
+
if (buffer.length > 0) {
|
|
126
|
+
output.write(buffer);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const insertText = (text) => {
|
|
130
|
+
const next = `${buffer.slice(0, cursor)}${text}${buffer.slice(cursor)}`;
|
|
131
|
+
setState({ buffer: next, cursor: cursor + text.length });
|
|
132
|
+
};
|
|
133
|
+
const backspace = () => {
|
|
134
|
+
if (cursor <= 0)
|
|
135
|
+
return;
|
|
136
|
+
const next = `${buffer.slice(0, cursor - 1)}${buffer.slice(cursor)}`;
|
|
137
|
+
setState({ buffer: next, cursor: cursor - 1 });
|
|
138
|
+
};
|
|
139
|
+
const moveCursor = (delta) => {
|
|
140
|
+
setState({ buffer, cursor: cursor + delta });
|
|
141
|
+
};
|
|
142
|
+
const setCursor = (next) => {
|
|
143
|
+
setState({ buffer, cursor: next });
|
|
144
|
+
};
|
|
145
|
+
const clearBuffer = () => {
|
|
146
|
+
setState({ buffer: "", cursor: 0 });
|
|
147
|
+
};
|
|
148
|
+
const handleEscapeSequence = (seq) => {
|
|
149
|
+
if (seq === "\u001b[A") {
|
|
150
|
+
onKey?.("up");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (seq === "\u001b[B") {
|
|
154
|
+
onKey?.("down");
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (seq === "\u001b[D") {
|
|
158
|
+
moveCursor(-1);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (seq === "\u001b[C") {
|
|
162
|
+
moveCursor(1);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (seq === "\u001b[H" || seq === "\u001b[1~") {
|
|
166
|
+
setCursor(0);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (seq === "\u001b[F" || seq === "\u001b[4~") {
|
|
170
|
+
setCursor(buffer.length);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (seq === "\u001b[5~") {
|
|
174
|
+
onKey?.("pageup");
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (seq === "\u001b[6~") {
|
|
178
|
+
onKey?.("pagedown");
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (seq === "\u001b[Z") {
|
|
182
|
+
onKey?.("shifttab");
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (seq === "\u001b[I") {
|
|
186
|
+
onTerminalEvent?.("focusin");
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (seq === "\u001b[O") {
|
|
190
|
+
onTerminalEvent?.("focusout");
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const sgrMouse = sgrMousePattern.exec(seq);
|
|
194
|
+
if (sgrMouse) {
|
|
195
|
+
const button = Number.parseInt(sgrMouse[1] ?? "", 10);
|
|
196
|
+
if ((button & 0x43) === 0x40) {
|
|
197
|
+
onKey?.("wheelup");
|
|
198
|
+
}
|
|
199
|
+
else if ((button & 0x43) === 0x41) {
|
|
200
|
+
onKey?.("wheeldown");
|
|
201
|
+
}
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (seq.length === 6 && seq.startsWith("\u001b[M")) {
|
|
205
|
+
const button = seq.charCodeAt(3) - 32;
|
|
206
|
+
if ((button & 0x43) === 0x40) {
|
|
207
|
+
onKey?.("wheelup");
|
|
208
|
+
}
|
|
209
|
+
else if ((button & 0x43) === 0x41) {
|
|
210
|
+
onKey?.("wheeldown");
|
|
211
|
+
}
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (seq === "\u001b[3~") {
|
|
215
|
+
if (cursor >= buffer.length)
|
|
216
|
+
return;
|
|
217
|
+
const next = `${buffer.slice(0, cursor)}${buffer.slice(cursor + 1)}`;
|
|
218
|
+
setState({ buffer: next, cursor });
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
const onData = (chunk) => {
|
|
223
|
+
if (closed)
|
|
224
|
+
return;
|
|
225
|
+
const str = chunk.toString("utf8");
|
|
226
|
+
for (const ch of str) {
|
|
227
|
+
if (escapeBuffer.length > 0) {
|
|
228
|
+
escapeBuffer += ch;
|
|
229
|
+
if (isEscapeSequenceComplete(escapeBuffer)) {
|
|
230
|
+
handleEscapeSequence(escapeBuffer);
|
|
231
|
+
escapeBuffer = "";
|
|
232
|
+
}
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const code = ch.charCodeAt(0);
|
|
236
|
+
if (code === 3) {
|
|
237
|
+
if (onKey) {
|
|
238
|
+
onKey("ctrlc");
|
|
239
|
+
clearBuffer();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
close();
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (code === 9) {
|
|
246
|
+
const nextState = onTabComplete?.({ buffer, cursor });
|
|
247
|
+
if (nextState) {
|
|
248
|
+
setState(nextState);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
onKey?.("tab");
|
|
252
|
+
}
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (code === 27) {
|
|
256
|
+
escapeBuffer = ch;
|
|
257
|
+
if (escapeTimeout) {
|
|
258
|
+
clearTimeout(escapeTimeout);
|
|
259
|
+
}
|
|
260
|
+
escapeTimeout = setTimeout(() => {
|
|
261
|
+
if (escapeBuffer === "\u001b") {
|
|
262
|
+
escapeBuffer = "";
|
|
263
|
+
onKey?.("esc");
|
|
264
|
+
clearBuffer();
|
|
265
|
+
}
|
|
266
|
+
}, 25);
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
if (ch === "\r" || ch === "\n") {
|
|
270
|
+
if (pendingResolve) {
|
|
271
|
+
const resolve = pendingResolve;
|
|
272
|
+
pendingResolve = null;
|
|
273
|
+
const line = buffer;
|
|
274
|
+
clearBuffer();
|
|
275
|
+
if (submitNewline) {
|
|
276
|
+
output.write("\n");
|
|
277
|
+
}
|
|
278
|
+
resolve(line);
|
|
279
|
+
}
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
if (code === 127) {
|
|
283
|
+
backspace();
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (code >= 32) {
|
|
287
|
+
insertText(ch);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
const close = () => {
|
|
292
|
+
if (closed)
|
|
293
|
+
return;
|
|
294
|
+
closed = true;
|
|
295
|
+
if (pendingResolve) {
|
|
296
|
+
const resolve = pendingResolve;
|
|
297
|
+
pendingResolve = null;
|
|
298
|
+
resolve(null);
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
input.setRawMode?.(false);
|
|
302
|
+
}
|
|
303
|
+
catch { }
|
|
304
|
+
try {
|
|
305
|
+
input.pause?.();
|
|
306
|
+
}
|
|
307
|
+
catch { }
|
|
308
|
+
if (escapeTimeout) {
|
|
309
|
+
clearTimeout(escapeTimeout);
|
|
310
|
+
escapeTimeout = null;
|
|
311
|
+
}
|
|
312
|
+
input.off("data", onData);
|
|
313
|
+
};
|
|
314
|
+
input.setRawMode?.(true);
|
|
315
|
+
input.resume();
|
|
316
|
+
input.on("data", onData);
|
|
317
|
+
return {
|
|
318
|
+
nextLine() {
|
|
319
|
+
if (closed)
|
|
320
|
+
return Promise.resolve(null);
|
|
321
|
+
if (pendingResolve)
|
|
322
|
+
return Promise.resolve(null);
|
|
323
|
+
return new Promise((resolve) => {
|
|
324
|
+
pendingResolve = resolve;
|
|
325
|
+
emitState();
|
|
326
|
+
flushPrompt();
|
|
327
|
+
});
|
|
328
|
+
},
|
|
329
|
+
close,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
function isTtyReadable(stream) {
|
|
333
|
+
return Boolean(stream.isTTY);
|
|
334
|
+
}
|
|
335
|
+
function isTtyWritable(stream) {
|
|
336
|
+
return Boolean(stream.isTTY);
|
|
337
|
+
}
|
|
338
|
+
function isEscapeSequenceComplete(sequence) {
|
|
339
|
+
if (sequence === "\u001b") {
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
return new RegExp(`${String.fromCharCode(27)}\\[[0-9;<?]*[ -/]*[@-~]$`).test(sequence);
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=input-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-loop.js","sourceRoot":"","sources":["../src/input-loop.ts"],"names":[],"mappings":"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"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { type CliMode, type ModelDescriptor } from "@pickle-pee/runtime";
|
|
3
|
+
type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
4
|
+
export interface CliOptions {
|
|
5
|
+
readonly mode: CliMode;
|
|
6
|
+
readonly workingDirectory: string;
|
|
7
|
+
readonly agentDir: string;
|
|
8
|
+
readonly model: ModelDescriptor;
|
|
9
|
+
readonly toolSet: readonly string[];
|
|
10
|
+
readonly thinkingLevel?: ThinkingLevel;
|
|
11
|
+
readonly bootstrapOverrides?: BootstrapOverrides;
|
|
12
|
+
readonly configSources: Readonly<Record<string, {
|
|
13
|
+
layer: string;
|
|
14
|
+
detail: string;
|
|
15
|
+
}>>;
|
|
16
|
+
}
|
|
17
|
+
interface BootstrapOverrides {
|
|
18
|
+
readonly baseUrl?: string;
|
|
19
|
+
readonly api?: string;
|
|
20
|
+
readonly apiKeyEnv?: string;
|
|
21
|
+
readonly authHeader?: boolean;
|
|
22
|
+
readonly reasoning?: boolean;
|
|
23
|
+
readonly compat?: {
|
|
24
|
+
readonly supportsDeveloperRole?: boolean;
|
|
25
|
+
readonly supportsReasoningEffort?: boolean;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface ParsedArgs {
|
|
29
|
+
readonly flags: Readonly<Record<string, string | boolean>>;
|
|
30
|
+
readonly positional: readonly string[];
|
|
31
|
+
}
|
|
32
|
+
export declare function parseArgs(argv: readonly string[]): ParsedArgs;
|
|
33
|
+
export declare function main(argv?: readonly string[]): Promise<void>;
|
|
34
|
+
export declare function readCliPackageVersion(packageJsonPath?: string): string;
|
|
35
|
+
export {};
|