ysagc-agent 0.5.0 → 0.7.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/dist/config.js CHANGED
@@ -3,11 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ConfigError = void 0;
6
+ exports.DEFAULT_SERVER = exports.ConfigError = void 0;
7
+ exports.normalizeServerUrl = normalizeServerUrl;
8
+ exports.resolveConfigPath = resolveConfigPath;
9
+ exports.configFileExists = configFileExists;
10
+ exports.loadSavedConfig = loadSavedConfig;
11
+ exports.saveConfig = saveConfig;
7
12
  exports.loadConfig = loadConfig;
8
13
  exports.validateConfig = validateConfig;
9
14
  exports.loggerFromConfig = loggerFromConfig;
10
15
  exports.describeConfig = describeConfig;
16
+ const node_fs_1 = __importDefault(require("node:fs"));
11
17
  const node_path_1 = __importDefault(require("node:path"));
12
18
  const node_os_1 = __importDefault(require("node:os"));
13
19
  const logger_1 = require("./logger");
@@ -24,6 +30,8 @@ class ConfigError extends Error {
24
30
  }
25
31
  }
26
32
  exports.ConfigError = ConfigError;
33
+ /** Default platform endpoint for a customer-first install (no secrets). */
34
+ exports.DEFAULT_SERVER = 'ws://interface.ysagi.cn/api/workbench/agent';
27
35
  const DEFAULT_TIMEOUT_MS = 120000;
28
36
  const DEFAULT_MAX_BYTES = 64000;
29
37
  function readEnv(name) {
@@ -76,29 +84,119 @@ function resolveRoot(raw) {
76
84
  return node_path_1.default.join(node_os_1.default.homedir(), t.slice(2));
77
85
  return node_path_1.default.resolve(t);
78
86
  }
87
+ function resolveBool(override, envStr, saved) {
88
+ if (override !== undefined)
89
+ return override;
90
+ if (envStr !== undefined)
91
+ return truthy(envStr);
92
+ return saved ?? false;
93
+ }
94
+ function resolvePosInt(override, envStr, saved, fallback, name) {
95
+ const raw = override != null ? String(override) : envStr ?? (saved != null ? String(saved) : undefined);
96
+ return parsePosInt(raw, fallback, name);
97
+ }
98
+ /**
99
+ * Normalise a user/CLI web URL to a WebSocket URL. `http:` → `ws:`, `https:` →
100
+ * `wss:`. Already-ws(s) URLs pass through unchanged. An empty value returns ''.
101
+ */
102
+ function normalizeServerUrl(url) {
103
+ if (!url)
104
+ return '';
105
+ const u = url.trim();
106
+ if (/^https:\/\//i.test(u))
107
+ return `wss://${u.slice(8)}`;
108
+ if (/^http:\/\//i.test(u))
109
+ return `ws://${u.slice(7)}`;
110
+ return u;
111
+ }
112
+ /**
113
+ * Resolve the persisted config file path. `YSAGC_CONFIG` gives an explicit
114
+ * override; otherwise it is `~/.ysagc-agent/config.json`.
115
+ */
116
+ function resolveConfigPath() {
117
+ const env = readEnv('YSAGC_CONFIG');
118
+ if (env)
119
+ return node_path_1.default.resolve(env);
120
+ return node_path_1.default.join(node_os_1.default.homedir(), '.ysagc-agent', 'config.json');
121
+ }
122
+ /** Whether a saved config file already exists. */
123
+ function configFileExists() {
124
+ return node_fs_1.default.existsSync(resolveConfigPath());
125
+ }
126
+ /**
127
+ * Load a previously-saved config as a partial {@link AgentConfig}. Returns
128
+ * `undefined` when there is no file or when it is unreadable/corrupt (a corrupt
129
+ * file is treated as absent so the first-run onboarding can re-author it).
130
+ * The token is loaded in plaintext (it must be sent on connect) but is always
131
+ * kept out of logs by `describeConfig` / the Logger.
132
+ */
133
+ function loadSavedConfig() {
134
+ const p = resolveConfigPath();
135
+ if (!node_fs_1.default.existsSync(p))
136
+ return undefined;
137
+ try {
138
+ const raw = node_fs_1.default.readFileSync(p, 'utf8');
139
+ // Strip a UTF-8 BOM if present so editor-written configs still parse.
140
+ const clean = raw.charCodeAt(0) === 0xfeff ? raw.slice(1) : raw;
141
+ const parsed = JSON.parse(clean);
142
+ if (!parsed || typeof parsed !== 'object')
143
+ return undefined;
144
+ return parsed;
145
+ }
146
+ catch {
147
+ return undefined;
148
+ }
149
+ }
150
+ /** Persist a fully-resolved config to the config file (0600, dir created). */
151
+ function saveConfig(config) {
152
+ const p = resolveConfigPath();
153
+ node_fs_1.default.mkdirSync(node_path_1.default.dirname(p), { recursive: true });
154
+ const persisted = {
155
+ server: config.server,
156
+ token: config.token,
157
+ deviceId: config.deviceId,
158
+ root: config.root,
159
+ mode: config.mode,
160
+ permissionPreset: config.permissionPreset,
161
+ web: config.web,
162
+ timeoutMs: config.timeoutMs,
163
+ maxBytes: config.maxBytes,
164
+ logLevel: config.logLevel,
165
+ platform: config.platform,
166
+ };
167
+ node_fs_1.default.writeFileSync(p, `${JSON.stringify(persisted, null, 2)}\n`, { mode: 0o600, encoding: 'utf8' });
168
+ try {
169
+ node_fs_1.default.chmodSync(p, 0o600);
170
+ }
171
+ catch {
172
+ /* best-effort on filesystems without POSIX modes (e.g. Windows) */
173
+ }
174
+ }
79
175
  /**
80
- * Resolve an {@link AgentConfig} from defaults, environment variables and CLI
81
- * overrides (in that order of precedence). Environment variables are read from
82
- * WS_URL / YSAGC_TOKEN / DEVICE_ID / WORKSPACE_ROOT / PERMISSION_MODE /
83
- * YSAGC_PERMISSION_PRESET / YSAGC_WEB / YSAGC_TIMEOUT / YSAGC_MAX_BYTES /
84
- * YSAGC_LOG_LEVEL.
176
+ * Resolve an {@link AgentConfig} from defaults, environment variables, a saved
177
+ * config file snippet and CLI overrides (in that order of precedence). CLI wins
178
+ * over environment, which wins over the saved file, which wins over defaults.
179
+ *
180
+ * Environment variables are read from WS_URL / YSAGC_TOKEN / DEVICE_ID /
181
+ * WORKSPACE_ROOT / PERMISSION_MODE / YSAGC_PERMISSION_PRESET / YSAGC_WEB /
182
+ * YSAGC_TIMEOUT / YSAGC_MAX_BYTES / YSAGC_LOG_LEVEL.
85
183
  */
86
- function loadConfig(overrides = {}) {
87
- const mode = parseMode(overrides.mode ?? readEnv('PERMISSION_MODE'), 'smart');
88
- const preset = parsePreset(overrides.preset ?? readEnv('YSAGC_PERMISSION_PRESET'), 'workspace-write');
184
+ function loadConfig(overrides = {}, saved) {
185
+ const mode = parseMode(overrides.mode ?? readEnv('PERMISSION_MODE') ?? saved?.mode, 'smart');
186
+ const preset = parsePreset(overrides.preset ?? readEnv('YSAGC_PERMISSION_PRESET') ?? saved?.permissionPreset, 'workspace-write');
89
187
  return {
90
- server: overrides.server ?? readEnv('WS_URL') ?? '',
91
- token: overrides.token ?? readEnv('YSAGC_TOKEN') ?? '',
92
- deviceId: overrides.deviceId ??
93
- readEnv('DEVICE_ID') ??
94
- defaultDeviceId(),
95
- root: resolveRoot(overrides.root ?? readEnv('WORKSPACE_ROOT')),
188
+ // A missing server falls back to the customer platform, so a bare install
189
+ // connects by default. The token can never fall back to a baked-in secret.
190
+ server: normalizeServerUrl(overrides.server ?? readEnv('WS_URL') ?? saved?.server ?? exports.DEFAULT_SERVER),
191
+ token: overrides.token ?? readEnv('YSAGC_TOKEN') ?? saved?.token ?? '',
192
+ deviceId: overrides.deviceId ?? readEnv('DEVICE_ID') ?? saved?.deviceId ?? defaultDeviceId(),
193
+ root: resolveRoot(overrides.root ?? readEnv('WORKSPACE_ROOT') ?? saved?.root),
96
194
  mode,
97
195
  permissionPreset: preset,
98
- web: overrides.web ?? truthy(readEnv('YSAGC_WEB')),
99
- timeoutMs: parsePosInt(overrides.timeoutMs != null ? String(overrides.timeoutMs) : readEnv('YSAGC_TIMEOUT'), DEFAULT_TIMEOUT_MS, 'timeout'),
100
- maxBytes: parsePosInt(overrides.maxBytes != null ? String(overrides.maxBytes) : readEnv('YSAGC_MAX_BYTES'), DEFAULT_MAX_BYTES, 'max-bytes'),
101
- logLevel: parseLogLevel(overrides.logLevel ?? readEnv('YSAGC_LOG_LEVEL')),
196
+ web: resolveBool(overrides.web, readEnv('YSAGC_WEB'), saved?.web),
197
+ timeoutMs: resolvePosInt(overrides.timeoutMs, readEnv('YSAGC_TIMEOUT'), saved?.timeoutMs, DEFAULT_TIMEOUT_MS, 'timeout'),
198
+ maxBytes: resolvePosInt(overrides.maxBytes, readEnv('YSAGC_MAX_BYTES'), saved?.maxBytes, DEFAULT_MAX_BYTES, 'max-bytes'),
199
+ logLevel: parseLogLevel(overrides.logLevel ?? readEnv('YSAGC_LOG_LEVEL') ?? saved?.logLevel),
102
200
  platform: 'node',
103
201
  };
104
202
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,14 +6,18 @@ export { canonicalize, isWithinRoot, assertInsideRoot, safeResolve } from './pat
6
6
  export type { WithinRootOptions } from './path-utils';
7
7
  export { isDangerCommand, isSensitivePath, maskSecrets, MASK, } from './security';
8
8
  export type { DangerAssessment, DangerSeverity } from './security';
9
- export { createToolRegistry, preExecute, postExecute } from './tools';
10
- export type { ToolRegistry, ToolContext, ToolResult, ToolOutcome, PreCheckOutcome, PostCheckOutcome, } from './tools';
11
- export { loadConfig, validateConfig, describeConfig } from './config';
9
+ export { createToolRegistry, preExecute, postExecute, walkTree, globToRegex } from './tools';
10
+ export type { ToolRegistry, ToolContext, ToolResult, ToolOutcome, PreCheckOutcome, PostCheckOutcome, WalkEntry, } from './tools';
11
+ export { loadConfig, loadSavedConfig, saveConfig, resolveConfigPath, configFileExists, normalizeServerUrl, validateConfig, describeConfig, DEFAULT_SERVER, } from './config';
12
12
  export type { AgentConfig, ConfigOverrides, PermissionMode, PermissionPreset, } from './config';
13
+ export { runOnboarding, isInteractiveStdin, prompt, promptMasked } from './onboarding';
14
+ export type { OnboardingInputs } from './onboarding';
13
15
  export { encodeMessage, decodeMessage, computeIdempotencyKey, stableStringify } from './protocol';
14
16
  export type { ClientMessage, ServerMessage, PlatformMessage, ToolCallMessage, ToolResultMessage, UsageMessage, PingMessage, WelcomeMessage, CancelMessage, HelloMessage, ClientState, } from './protocol';
15
17
  export { countTextTokens, estimateTokens, computeUsage } from './tokens';
16
18
  export type { TokenUsage } from './tokens';
19
+ export { runCommand, sanitizeEnv, tokenize, shouldUseShell } from './executor';
20
+ export type { CommandResult, RunCommandOptions } from './executor';
17
21
  export { listSkills, loadSkill, loadSkillRecord } from './skills';
18
22
  export type { SkillRecord } from './skills';
19
23
  export { Logger } from './logger';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EACL,eAAe,EACf,eAAe,EACf,WAAW,EACX,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtE,YAAY,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtE,YAAY,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClG,YAAY,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACzE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EACL,eAAe,EACf,eAAe,EACf,WAAW,EACX,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7F,YAAY,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvF,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClG,YAAY,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACzE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,eAAe,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Public API for ysagc-agent.
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Logger = exports.loadSkillRecord = exports.loadSkill = exports.listSkills = exports.computeUsage = exports.estimateTokens = exports.countTextTokens = exports.stableStringify = exports.computeIdempotencyKey = exports.decodeMessage = exports.encodeMessage = exports.describeConfig = exports.validateConfig = exports.loadConfig = exports.postExecute = exports.preExecute = exports.createToolRegistry = exports.MASK = exports.maskSecrets = exports.isSensitivePath = exports.isDangerCommand = exports.safeResolve = exports.assertInsideRoot = exports.isWithinRoot = exports.canonicalize = exports.runSelfTest = exports.AGENT_VERSION = exports.startAgent = void 0;
4
+ exports.Logger = exports.loadSkillRecord = exports.loadSkill = exports.listSkills = exports.shouldUseShell = exports.tokenize = exports.sanitizeEnv = exports.runCommand = exports.computeUsage = exports.estimateTokens = exports.countTextTokens = exports.stableStringify = exports.computeIdempotencyKey = exports.decodeMessage = exports.encodeMessage = exports.promptMasked = exports.prompt = exports.isInteractiveStdin = exports.runOnboarding = exports.DEFAULT_SERVER = exports.describeConfig = exports.validateConfig = exports.normalizeServerUrl = exports.configFileExists = exports.resolveConfigPath = exports.saveConfig = exports.loadSavedConfig = exports.loadConfig = exports.globToRegex = exports.walkTree = exports.postExecute = exports.preExecute = exports.createToolRegistry = exports.MASK = exports.maskSecrets = exports.isSensitivePath = exports.isDangerCommand = exports.safeResolve = exports.assertInsideRoot = exports.isWithinRoot = exports.canonicalize = exports.runSelfTest = exports.AGENT_VERSION = exports.startAgent = void 0;
5
5
  var agent_1 = require("./agent");
6
6
  Object.defineProperty(exports, "startAgent", { enumerable: true, get: function () { return agent_1.startAgent; } });
7
7
  Object.defineProperty(exports, "AGENT_VERSION", { enumerable: true, get: function () { return agent_1.AGENT_VERSION; } });
@@ -21,10 +21,23 @@ var tools_1 = require("./tools");
21
21
  Object.defineProperty(exports, "createToolRegistry", { enumerable: true, get: function () { return tools_1.createToolRegistry; } });
22
22
  Object.defineProperty(exports, "preExecute", { enumerable: true, get: function () { return tools_1.preExecute; } });
23
23
  Object.defineProperty(exports, "postExecute", { enumerable: true, get: function () { return tools_1.postExecute; } });
24
+ Object.defineProperty(exports, "walkTree", { enumerable: true, get: function () { return tools_1.walkTree; } });
25
+ Object.defineProperty(exports, "globToRegex", { enumerable: true, get: function () { return tools_1.globToRegex; } });
24
26
  var config_1 = require("./config");
25
27
  Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
28
+ Object.defineProperty(exports, "loadSavedConfig", { enumerable: true, get: function () { return config_1.loadSavedConfig; } });
29
+ Object.defineProperty(exports, "saveConfig", { enumerable: true, get: function () { return config_1.saveConfig; } });
30
+ Object.defineProperty(exports, "resolveConfigPath", { enumerable: true, get: function () { return config_1.resolveConfigPath; } });
31
+ Object.defineProperty(exports, "configFileExists", { enumerable: true, get: function () { return config_1.configFileExists; } });
32
+ Object.defineProperty(exports, "normalizeServerUrl", { enumerable: true, get: function () { return config_1.normalizeServerUrl; } });
26
33
  Object.defineProperty(exports, "validateConfig", { enumerable: true, get: function () { return config_1.validateConfig; } });
27
34
  Object.defineProperty(exports, "describeConfig", { enumerable: true, get: function () { return config_1.describeConfig; } });
35
+ Object.defineProperty(exports, "DEFAULT_SERVER", { enumerable: true, get: function () { return config_1.DEFAULT_SERVER; } });
36
+ var onboarding_1 = require("./onboarding");
37
+ Object.defineProperty(exports, "runOnboarding", { enumerable: true, get: function () { return onboarding_1.runOnboarding; } });
38
+ Object.defineProperty(exports, "isInteractiveStdin", { enumerable: true, get: function () { return onboarding_1.isInteractiveStdin; } });
39
+ Object.defineProperty(exports, "prompt", { enumerable: true, get: function () { return onboarding_1.prompt; } });
40
+ Object.defineProperty(exports, "promptMasked", { enumerable: true, get: function () { return onboarding_1.promptMasked; } });
28
41
  var protocol_1 = require("./protocol");
29
42
  Object.defineProperty(exports, "encodeMessage", { enumerable: true, get: function () { return protocol_1.encodeMessage; } });
30
43
  Object.defineProperty(exports, "decodeMessage", { enumerable: true, get: function () { return protocol_1.decodeMessage; } });
@@ -34,6 +47,11 @@ var tokens_1 = require("./tokens");
34
47
  Object.defineProperty(exports, "countTextTokens", { enumerable: true, get: function () { return tokens_1.countTextTokens; } });
35
48
  Object.defineProperty(exports, "estimateTokens", { enumerable: true, get: function () { return tokens_1.estimateTokens; } });
36
49
  Object.defineProperty(exports, "computeUsage", { enumerable: true, get: function () { return tokens_1.computeUsage; } });
50
+ var executor_1 = require("./executor");
51
+ Object.defineProperty(exports, "runCommand", { enumerable: true, get: function () { return executor_1.runCommand; } });
52
+ Object.defineProperty(exports, "sanitizeEnv", { enumerable: true, get: function () { return executor_1.sanitizeEnv; } });
53
+ Object.defineProperty(exports, "tokenize", { enumerable: true, get: function () { return executor_1.tokenize; } });
54
+ Object.defineProperty(exports, "shouldUseShell", { enumerable: true, get: function () { return executor_1.shouldUseShell; } });
37
55
  var skills_1 = require("./skills");
38
56
  Object.defineProperty(exports, "listSkills", { enumerable: true, get: function () { return skills_1.listSkills; } });
39
57
  Object.defineProperty(exports, "loadSkill", { enumerable: true, get: function () { return skills_1.loadSkill; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,8BAA8B;;;AAE9B,iCAAoD;AAA3C,mGAAA,UAAU,OAAA;AAAE,sGAAA,aAAa,OAAA;AAGlC,6BAAoC;AAA3B,kGAAA,WAAW,OAAA;AAGpB,2CAAyF;AAAhF,0GAAA,YAAY,OAAA;AAAE,0GAAA,YAAY,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,yGAAA,WAAW,OAAA;AAGlE,uCAKoB;AAJlB,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,uGAAA,WAAW,OAAA;AACX,gGAAA,IAAI,OAAA;AAIN,iCAAsE;AAA7D,2GAAA,kBAAkB,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,oGAAA,WAAW,OAAA;AAUpD,mCAAsE;AAA7D,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,wGAAA,cAAc,OAAA;AAQnD,uCAAkG;AAAzF,yGAAA,aAAa,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAAE,2GAAA,eAAe,OAAA;AAe7E,mCAAyE;AAAhE,yGAAA,eAAe,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,sGAAA,YAAY,OAAA;AAGtD,mCAAkE;AAAzD,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,yGAAA,eAAe,OAAA;AAG/C,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AAGf,mCAAqC;AACrC,kBAAe,kBAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,8BAA8B;;;AAE9B,iCAAoD;AAA3C,mGAAA,UAAU,OAAA;AAAE,sGAAA,aAAa,OAAA;AAGlC,6BAAoC;AAA3B,kGAAA,WAAW,OAAA;AAGpB,2CAAyF;AAAhF,0GAAA,YAAY,OAAA;AAAE,0GAAA,YAAY,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,yGAAA,WAAW,OAAA;AAGlE,uCAKoB;AAJlB,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,uGAAA,WAAW,OAAA;AACX,gGAAA,IAAI,OAAA;AAIN,iCAA6F;AAApF,2GAAA,kBAAkB,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,oGAAA,WAAW,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,oGAAA,WAAW,OAAA;AAW3E,mCAUkB;AAThB,oGAAA,UAAU,OAAA;AACV,yGAAA,eAAe,OAAA;AACf,oGAAA,UAAU,OAAA;AACV,2GAAA,iBAAiB,OAAA;AACjB,0GAAA,gBAAgB,OAAA;AAChB,4GAAA,kBAAkB,OAAA;AAClB,wGAAA,cAAc,OAAA;AACd,wGAAA,cAAc,OAAA;AACd,wGAAA,cAAc,OAAA;AAShB,2CAAuF;AAA9E,2GAAA,aAAa,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,0GAAA,YAAY,OAAA;AAGhE,uCAAkG;AAAzF,yGAAA,aAAa,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAAE,2GAAA,eAAe,OAAA;AAe7E,mCAAyE;AAAhE,yGAAA,eAAe,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,sGAAA,YAAY,OAAA;AAGtD,uCAA+E;AAAtE,sGAAA,UAAU,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AAG1D,mCAAkE;AAAzD,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,yGAAA,eAAe,OAAA;AAG/C,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AAGf,mCAAqC;AACrC,kBAAe,kBAAU,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type AgentConfig } from './config';
2
+ /** Values that can be pre-seeded into onboarding (from CLI/env overrides). */
3
+ export interface OnboardingInputs {
4
+ server?: string;
5
+ token?: string;
6
+ deviceId?: string;
7
+ root?: string;
8
+ mode?: string;
9
+ preset?: string;
10
+ web?: boolean;
11
+ timeoutMs?: number;
12
+ maxBytes?: number;
13
+ logLevel?: string;
14
+ }
15
+ /** Whether stdin is an interactive terminal (used to avoid hanging in piped runs). */
16
+ export declare function isInteractiveStdin(): boolean;
17
+ /** A fresh, stable device identifier used for pairing with the platform. */
18
+ export declare function generateDeviceId(): string;
19
+ /** A fresh device token value sent in the hello frame. */
20
+ export declare function generateDeviceToken(): string;
21
+ /** Prompt with an echoed line for interactive terminals. */
22
+ export declare function prompt(question: string, opts?: {
23
+ default?: string;
24
+ }): Promise<string>;
25
+ /**
26
+ * Prompt for a secret WITHOUT echoing (masks each typed character as `*`).
27
+ * Uses raw-mode keypress handling — no external dependency.
28
+ */
29
+ export declare function promptMasked(question: string): Promise<string>;
30
+ /**
31
+ * Interactive first-run onboarding. Prompts for the platform address (server),
32
+ * the device token (masked) and the workspace root, then returns a fully
33
+ * resolved {@link AgentConfig}. Any value present in {@link inputs} (from CLI /
34
+ * env) is used as-is and its prompt is skipped; an empty device token falls back
35
+ * to a freshly-generated device id + token with a short pairing hint.
36
+ */
37
+ export declare function runOnboarding(inputs?: OnboardingInputs): Promise<AgentConfig>;
38
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"AAMA,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEzG,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,0DAA0D;AAC1D,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,4DAA4D;AAC5D,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuD9D;AAuBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkDvF"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.isInteractiveStdin = isInteractiveStdin;
40
+ exports.generateDeviceId = generateDeviceId;
41
+ exports.generateDeviceToken = generateDeviceToken;
42
+ exports.prompt = prompt;
43
+ exports.promptMasked = promptMasked;
44
+ exports.runOnboarding = runOnboarding;
45
+ const node_fs_1 = __importDefault(require("node:fs"));
46
+ const node_path_1 = __importDefault(require("node:path"));
47
+ const node_os_1 = __importDefault(require("node:os"));
48
+ const node_crypto_1 = __importDefault(require("node:crypto"));
49
+ const readline = __importStar(require("node:readline"));
50
+ const readlinePromises = __importStar(require("node:readline/promises"));
51
+ const config_1 = require("./config");
52
+ /** Whether stdin is an interactive terminal (used to avoid hanging in piped runs). */
53
+ function isInteractiveStdin() {
54
+ return process.stdin.isTTY === true;
55
+ }
56
+ /** A fresh, stable device identifier used for pairing with the platform. */
57
+ function generateDeviceId() {
58
+ return `device-${node_crypto_1.default.randomBytes(6).toString('hex')}`;
59
+ }
60
+ /** A fresh device token value sent in the hello frame. */
61
+ function generateDeviceToken() {
62
+ return node_crypto_1.default.randomBytes(18).toString('hex');
63
+ }
64
+ /** Prompt with an echoed line for interactive terminals. */
65
+ async function prompt(question, opts = {}) {
66
+ const rl = readlinePromises.createInterface({
67
+ input: process.stdin,
68
+ output: process.stdout,
69
+ });
70
+ try {
71
+ const label = opts.default !== undefined ? `${question} [${opts.default}]: ` : `${question}: `;
72
+ const answer = await rl.question(label);
73
+ return answer.trim();
74
+ }
75
+ finally {
76
+ rl.close();
77
+ }
78
+ }
79
+ /**
80
+ * Prompt for a secret WITHOUT echoing (masks each typed character as `*`).
81
+ * Uses raw-mode keypress handling — no external dependency.
82
+ */
83
+ function promptMasked(question) {
84
+ const input = process.stdin;
85
+ const output = process.stdout;
86
+ return new Promise((resolve) => {
87
+ if (input.isTTY !== true) {
88
+ // Not a TTY: never hang. Return empty so onboarding can derive a token.
89
+ output.write(`${question}\n`);
90
+ resolve('');
91
+ return;
92
+ }
93
+ readline.emitKeypressEvents(input);
94
+ const setRaw = input.setRawMode;
95
+ if (typeof setRaw === 'function')
96
+ setRaw.call(input, true);
97
+ input.resume();
98
+ let value = '';
99
+ let done = false;
100
+ const finish = () => {
101
+ if (done)
102
+ return;
103
+ done = true;
104
+ input.removeListener('keypress', onKeypress);
105
+ if (typeof setRaw === 'function')
106
+ setRaw.call(input, false);
107
+ output.write('\n');
108
+ resolve(value);
109
+ };
110
+ const onKeypress = (str, key) => {
111
+ if (key) {
112
+ if (key.name === 'return' || key.name === 'enter') {
113
+ finish();
114
+ return;
115
+ }
116
+ if (key.name === 'backspace') {
117
+ if (value.length > 0) {
118
+ value = value.slice(0, -1);
119
+ output.write('\b \b');
120
+ }
121
+ return;
122
+ }
123
+ if (key.ctrl && (key.name === 'c' || key.name === 'd')) {
124
+ finish();
125
+ return;
126
+ }
127
+ }
128
+ if (str && (!key || (!key.ctrl && !key.meta))) {
129
+ value += str;
130
+ output.write('*');
131
+ }
132
+ };
133
+ input.on('keypress', onKeypress);
134
+ output.write(question);
135
+ });
136
+ }
137
+ /** Resolve a root path, creating it if missing and rejecting non-directories. */
138
+ function resolveAndValidateRoot(raw) {
139
+ const t = (raw ?? '').trim();
140
+ let abs;
141
+ if (!t)
142
+ abs = process.cwd();
143
+ else if (t === '~')
144
+ abs = node_os_1.default.homedir();
145
+ else if (t.startsWith('~/') || t.startsWith('~\\'))
146
+ abs = node_path_1.default.join(node_os_1.default.homedir(), t.slice(2));
147
+ else
148
+ abs = node_path_1.default.resolve(t);
149
+ try {
150
+ if (!node_fs_1.default.existsSync(abs))
151
+ node_fs_1.default.mkdirSync(abs, { recursive: true });
152
+ }
153
+ catch (err) {
154
+ throw new config_1.ConfigError(`无法创建工作区目录 ${abs}${err instanceof Error ? ` (${err.message})` : ''}`);
155
+ }
156
+ if (!node_fs_1.default.statSync(abs).isDirectory()) {
157
+ throw new config_1.ConfigError(`工作区路径不是目录: ${abs}`);
158
+ }
159
+ return abs;
160
+ }
161
+ /**
162
+ * Interactive first-run onboarding. Prompts for the platform address (server),
163
+ * the device token (masked) and the workspace root, then returns a fully
164
+ * resolved {@link AgentConfig}. Any value present in {@link inputs} (from CLI /
165
+ * env) is used as-is and its prompt is skipped; an empty device token falls back
166
+ * to a freshly-generated device id + token with a short pairing hint.
167
+ */
168
+ async function runOnboarding(inputs = {}) {
169
+ const out = process.stdout;
170
+ // 1) Platform address (server URL) — http(s) normalised to ws(s).
171
+ let server;
172
+ if (inputs.server && inputs.server.trim() !== '') {
173
+ server = (0, config_1.normalizeServerUrl)(inputs.server);
174
+ out.write(`\n平台地址: ${server}\n`);
175
+ }
176
+ else {
177
+ const raw = await prompt('平台地址', { default: config_1.DEFAULT_SERVER });
178
+ server = (0, config_1.normalizeServerUrl)(raw || config_1.DEFAULT_SERVER);
179
+ }
180
+ // 2) Device token — masked. Empty => derive a fresh device id + token.
181
+ let token = (inputs.token ?? '').trim();
182
+ let deviceId = (inputs.deviceId ?? '').trim() || undefined;
183
+ if (!token) {
184
+ out.write('\n从工作台的『如何连接』复制你的设备 Token 粘贴到这里\n');
185
+ token = await promptMasked('设备 Token(留空则以本机设备 ID 配对): ');
186
+ if (!token) {
187
+ deviceId = deviceId ?? generateDeviceId();
188
+ token = generateDeviceToken();
189
+ out.write('\n未提供设备 Token。');
190
+ out.write(`已生成本机设备 ID: ${deviceId}\n`);
191
+ out.write('请到平台工作台的『设备』页绑定该设备 ID(并复制 Token 填入)后重试。\n');
192
+ }
193
+ }
194
+ if (!deviceId)
195
+ deviceId = generateDeviceId();
196
+ // 3) Workspace root — default cwd, validated (created if missing).
197
+ let root;
198
+ if (inputs.root && inputs.root.trim() !== '') {
199
+ root = resolveAndValidateRoot(inputs.root);
200
+ }
201
+ else {
202
+ const raw = await prompt('工作区目录', { default: process.cwd() });
203
+ root = resolveAndValidateRoot(raw || process.cwd());
204
+ }
205
+ return (0, config_1.loadConfig)({
206
+ server,
207
+ token,
208
+ deviceId,
209
+ root,
210
+ mode: inputs.mode,
211
+ preset: inputs.preset,
212
+ web: inputs.web,
213
+ timeoutMs: inputs.timeoutMs,
214
+ maxBytes: inputs.maxBytes,
215
+ logLevel: inputs.logLevel,
216
+ });
217
+ }
218
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -29,6 +29,30 @@ export interface ToolResult extends ToolOutcome {
29
29
  cached?: boolean;
30
30
  }
31
31
  export type ToolExecutor = (ctx: ToolContext, args: Record<string, unknown>, signal?: AbortSignal) => Promise<ToolOutcome>;
32
+ export interface WalkEntry {
33
+ /** Path relative to the base directory, using `/` separators. */
34
+ rel: string;
35
+ /** Absolute, canonical path on disk. */
36
+ abs: string;
37
+ type: 'file' | 'dir';
38
+ }
39
+ /**
40
+ * Walk a directory tree depth-first, returning every file and directory as a
41
+ * flat list. Never follows symbolic links (which defends against root escape
42
+ * and symlink cycles), skips the default heavy directories, and bounds the
43
+ * total number of entries returned. Directory entries are guaranteed to be
44
+ * returned before their children.
45
+ */
46
+ export declare function walkTree(base: string, opts?: {
47
+ maxEntries?: number;
48
+ exclude?: Set<string>;
49
+ includeHidden?: boolean;
50
+ }): WalkEntry[];
51
+ /** Convert a glob pattern (`*`, `?`, `**`, and literals — no char classes)
52
+ * into an anchored regular expression. `**` matches zero or more path
53
+ * segments; `*`/`?` match within a single segment. On Windows the match is
54
+ * case-insensitive to mirror the filesystem. */
55
+ export declare function globToRegex(glob: string): RegExp;
32
56
  export interface PreCheckOutcome {
33
57
  ok: boolean;
34
58
  error?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,0DAA0D;AAC1D,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,WAAW,CAAC,CAAC;AAqH1B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoDD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,eAAe,CA6DjB;AAgBD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,gBAAgB,CAWlB;AAmWD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAClG;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CA6DjE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}