geomind 0.1.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 ADDED
@@ -0,0 +1,206 @@
1
+ # GeoMind
2
+
3
+ 具备自主数据认知与持续记忆能力的地理空间分析智能体。
4
+
5
+ GeoMind 基于 [Pi Agent](https://github.com/earendil-works/pi) 构建,能够通过 `psql` 自主探索 PostGIS 数据库,无需人工编写模式文档。它会记住你的纠错和偏好,越用越好。
6
+
7
+ ---
8
+
9
+ ## 安装
10
+
11
+ ### 前置要求
12
+
13
+ - [Node.js](https://nodejs.org/) >= 18
14
+ - [PostgreSQL](https://www.postgresql.org/)(本地或远程均可)
15
+ - 大模型 API Key(支持 Anthropic Claude、OpenAI、DeepSeek 等)
16
+ - [QGIS](https://qgis.org/)(可选,用于空间分析处理)
17
+
18
+ ### 从 npm 安装(推荐)
19
+
20
+ ```bash
21
+ npm install -g geomind
22
+ ```
23
+
24
+ ### 从源码安装(开发者)
25
+
26
+ ```bash
27
+ git clone https://github.com/zhanlutuzi/GeoMind.git
28
+ cd GeoMind
29
+ pnpm install
30
+ pnpm build
31
+ pnpm link --global
32
+ ```
33
+
34
+ > **Windows 用户**:如果全局安装报权限错误,请用管理员身份运行命令行。
35
+
36
+ ### 卸载
37
+
38
+ ```bash
39
+ # npm 安装的
40
+ npm uninstall -g geomind
41
+
42
+ # 源码安装的
43
+ pnpm uninstall --global geomind
44
+ ```
45
+
46
+ ---
47
+
48
+ ## 快速开始
49
+
50
+ ### 1. 设置大模型
51
+
52
+ GeoMind 需要一个大模型 API Key。设置环境变量后启动:
53
+
54
+ ```bash
55
+ export ANTHROPIC_API_KEY=sk-ant-...
56
+ geomind
57
+ ```
58
+
59
+ 或者启动后使用 `/login` 命令交互式登录。
60
+
61
+ ### 2. 配置数据库
62
+
63
+ 首次启动后,在对话中使用 `/setup` 命令配置数据库连接:
64
+
65
+ ```
66
+ /setup
67
+ ```
68
+
69
+ 按提示输入数据库信息(host、port、用户名、数据库名)。支持本地和远程数据库。
70
+
71
+ 你也可以手动编辑配置文件:
72
+
73
+ ```json
74
+ // .geomind/config.json(工程级)或 ~/.geomind/config.json(全局)
75
+ {
76
+ "psql": {
77
+ "command": "psql",
78
+ "database": "my_database",
79
+ "host": "localhost",
80
+ "port": 5432,
81
+ "user": "readonly_user"
82
+ },
83
+ "qgis_process": {
84
+ "path": "/path/to/qgis_process",
85
+ "available": true
86
+ }
87
+ }
88
+ ```
89
+
90
+ ### 3. 开始使用
91
+
92
+ ```bash
93
+ geomind
94
+ ```
95
+
96
+ 然后直接用自然语言和它对话:
97
+
98
+ ```
99
+ > 帮我看看数据库里有什么表
100
+
101
+ > 查一下东京都内有多少个铁路站点
102
+
103
+ > 找出涩谷区地价最高的5个地点,导出为 GeoJSON
104
+
105
+ > 分析哪些铁路站点位于洪水风险区域内
106
+ ```
107
+
108
+ GeoMind 会自主探索数据库、生成 SQL、执行查询,遇到不确定的会主动问你。
109
+
110
+ ---
111
+
112
+ ## 功能特性
113
+
114
+ ### 🔍 自主数据库探索
115
+
116
+ 无需人工编写模式文档。GeoMind 通过 psql 自主发现表结构、空间列、参考系等信息。不确定的语义会主动询问用户。
117
+
118
+ ### 🧠 持续记忆
119
+
120
+ GeoMind 会记住:
121
+ - **数据库知识**:表结构、列含义、查询模式(工程级)
122
+ - **用户偏好**:常关注区域、分析习惯、展示偏好(全局)
123
+ - **用户纠错**:你曾经纠正过的错误理解(全局)
124
+
125
+ 每 5 轮对话自动反思一次,将新知识合并到记忆中。
126
+
127
+ ### 🌍 空间分析
128
+
129
+ - 通过 PostGIS 执行空间 SQL(ST_Contains、ST_Buffer、ST_Intersects 等)
130
+ - 支持 QGIS Processing(`qgis_process`)进行高级空间分析(可选)
131
+ - 可导出 GeoJSON、生成交互式 HTML 地图报告
132
+
133
+ ### ⚙️ 配置分层
134
+
135
+ | 类型 | 位置 | 适用场景 |
136
+ |------|------|---------|
137
+ | 全局 | `~/.geomind/` | API Key、用户身份、偏好、QGIS 路径 |
138
+ | 工程级 | `./.geomind/` | 数据库连接、数据库知识记忆 |
139
+
140
+ 工程级配置覆盖全局配置。
141
+
142
+ ---
143
+
144
+ ## 常用命令
145
+
146
+ | 命令 | 说明 |
147
+ |------|------|
148
+ | `/setup` | 交互式配置数据库连接和 QGIS |
149
+ | `/login` | 设置大模型 API Key |
150
+ | `/model` | 切换大模型 |
151
+ | `/new` | 新建会话 |
152
+ | `/compact` | 压缩上下文 |
153
+
154
+ ---
155
+
156
+ ## 开发
157
+
158
+ ### 环境准备
159
+
160
+ - [pnpm](https://pnpm.io/)(安装:`npm install -g pnpm`)
161
+
162
+ ```bash
163
+ git clone https://github.com/zhanlutuzi/GeoMind.git
164
+ cd GeoMind
165
+ pnpm install
166
+ pnpm dev # 开发模式(tsx 直接运行,无需编译)
167
+ pnpm build # 编译
168
+ pnpm start # 运行编译后的版本
169
+ ```
170
+
171
+ ### 项目结构
172
+
173
+ ```
174
+ ├── src/
175
+ │ ├── index.ts # 入口文件
176
+ │ ├── config.ts # 配置管理(全局/工程分层)
177
+ │ ├── setup.ts # 环境检测与初始化
178
+ │ └── prompts/
179
+ │ └── system.ts # System Prompt 动态生成
180
+ ├── .geomind/
181
+ │ └── extensions/
182
+ │ ├── memory.ts # 记忆系统 Extension
183
+ │ └── setup.ts # /setup 命令 Extension
184
+ ├── scripts/
185
+ │ ├── patch-branding.js # 品牌定制脚本(仅开发时用)
186
+ │ └── ensure-shebang.js # 编译后添加 shebang
187
+ └── devplan/ # 开发计划文档
188
+ ```
189
+
190
+ ---
191
+
192
+ ## 平台支持
193
+
194
+ - ✅ macOS
195
+ - ✅ Linux
196
+ - ✅ Windows
197
+
198
+ ---
199
+
200
+ ## 致谢
201
+
202
+ GeoMind 基于 [Pi Agent](https://github.com/earendil-works/pi) 开源框架构建。感谢 Earendil Works 团队提供的优秀 Agent 基础设施,包括工具调用、会话管理、终端 UI 等核心能力,使我们能够专注于地理空间领域的智能体研究。
203
+
204
+ ## License
205
+
206
+ MIT
@@ -0,0 +1,38 @@
1
+ export interface GeoMindConfig {
2
+ psql?: {
3
+ command: string;
4
+ database: string;
5
+ user?: string;
6
+ host?: string;
7
+ port?: number;
8
+ };
9
+ qgis_process?: {
10
+ path: string;
11
+ available: boolean;
12
+ };
13
+ }
14
+ export type ConfigScope = "global" | "project";
15
+ export declare const EMPTY_CONFIG: GeoMindConfig;
16
+ export declare function getGlobalDir(): string;
17
+ export declare function getGlobalAgentDir(): string;
18
+ export declare function getGlobalConfigPath(): string;
19
+ export declare function getProjectDir(cwd?: string): string;
20
+ export declare function getProjectConfigPath(cwd?: string): string;
21
+ export declare function getConfigPath(cwd?: string): string;
22
+ export declare function configExists(cwd?: string): boolean;
23
+ export declare function projectConfigExists(cwd?: string): boolean;
24
+ export declare function globalConfigExists(): boolean;
25
+ export declare function ensureGlobalLayout(): void;
26
+ export declare function ensureProjectLayout(cwd?: string): void;
27
+ export declare function ensureConfigDir(cwd?: string): void;
28
+ export declare function normalizeConfig(value: unknown): GeoMindConfig;
29
+ export declare function mergeConfig(globalConfig: GeoMindConfig, projectConfig: GeoMindConfig): GeoMindConfig;
30
+ export declare function loadGlobalConfig(): GeoMindConfig;
31
+ export declare function loadProjectConfig(cwd?: string): GeoMindConfig;
32
+ export declare function loadConfig(cwd?: string): GeoMindConfig;
33
+ export declare function writeConfig(config: GeoMindConfig, cwd?: string, scope?: ConfigScope): void;
34
+ export declare function writeGlobalConfig(config: GeoMindConfig): void;
35
+ export declare function writeProjectConfig(config: GeoMindConfig, cwd?: string): void;
36
+ export declare function buildPsqlCommand(config: GeoMindConfig): string | undefined;
37
+ export declare function migrateLegacyPiAuth(): boolean;
38
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C,eAAO,MAAM,YAAY,EAAE,aAAkB,CAAC;AAE9C,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,aAAa,CAAC,GAAG,SAAgB,GAAG,MAAM,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAEhE;AAED,wBAAgB,aAAa,CAAC,GAAG,SAAgB,GAAG,MAAM,CAEzD;AAED,wBAAgB,YAAY,CAAC,GAAG,SAAgB,GAAG,OAAO,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAEhE;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,kBAAkB,SAGjC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,SAAgB,QAGtD;AAED,wBAAgB,eAAe,CAAC,GAAG,SAAgB,QAElD;AA2CD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAU7D;AAYD,wBAAgB,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,GAAG,aAAa,CAWpG;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,aAAa,CAEpE;AAED,wBAAgB,UAAU,CAAC,GAAG,SAAgB,GAAG,aAAa,CAE7D;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,GAAG,SAAgB,EACnB,KAAK,GAAE,WAAuB,QAK/B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAEtD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAgB,QAE5E;AAOD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAmB1E;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAS7C"}
package/dist/config.js ADDED
@@ -0,0 +1,163 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ export const EMPTY_CONFIG = {};
5
+ export function getGlobalDir() {
6
+ return path.join(os.homedir(), ".geomind");
7
+ }
8
+ export function getGlobalAgentDir() {
9
+ return path.join(getGlobalDir(), "agent");
10
+ }
11
+ export function getGlobalConfigPath() {
12
+ return path.join(getGlobalDir(), "config.json");
13
+ }
14
+ export function getProjectDir(cwd = process.cwd()) {
15
+ return path.join(cwd, ".geomind");
16
+ }
17
+ export function getProjectConfigPath(cwd = process.cwd()) {
18
+ return path.join(getProjectDir(cwd), "config.json");
19
+ }
20
+ export function getConfigPath(cwd = process.cwd()) {
21
+ return getProjectConfigPath(cwd);
22
+ }
23
+ export function configExists(cwd = process.cwd()) {
24
+ return fs.existsSync(getProjectConfigPath(cwd)) || fs.existsSync(getGlobalConfigPath());
25
+ }
26
+ export function projectConfigExists(cwd = process.cwd()) {
27
+ return fs.existsSync(getProjectConfigPath(cwd));
28
+ }
29
+ export function globalConfigExists() {
30
+ return fs.existsSync(getGlobalConfigPath());
31
+ }
32
+ export function ensureGlobalLayout() {
33
+ fs.mkdirSync(getGlobalAgentDir(), { recursive: true });
34
+ fs.mkdirSync(path.join(getGlobalDir(), "memory", "user"), { recursive: true });
35
+ }
36
+ export function ensureProjectLayout(cwd = process.cwd()) {
37
+ fs.mkdirSync(path.join(getProjectDir(cwd), "memory", "database"), { recursive: true });
38
+ fs.mkdirSync(path.join(getProjectDir(cwd), "sessions"), { recursive: true });
39
+ }
40
+ export function ensureConfigDir(cwd = process.cwd()) {
41
+ fs.mkdirSync(path.dirname(getProjectConfigPath(cwd)), { recursive: true });
42
+ }
43
+ function isRecord(value) {
44
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
45
+ }
46
+ function optionalString(value) {
47
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
48
+ }
49
+ function optionalPort(value) {
50
+ if (typeof value !== "number" || !Number.isInteger(value))
51
+ return undefined;
52
+ return value > 0 ? value : undefined;
53
+ }
54
+ function normalizePsql(value) {
55
+ if (!isRecord(value))
56
+ return undefined;
57
+ const command = optionalString(value.command);
58
+ const database = optionalString(value.database);
59
+ if (!command || !database)
60
+ return undefined;
61
+ return {
62
+ command,
63
+ database,
64
+ user: optionalString(value.user),
65
+ host: optionalString(value.host),
66
+ port: optionalPort(value.port),
67
+ };
68
+ }
69
+ function normalizeQgis(value) {
70
+ if (!isRecord(value))
71
+ return undefined;
72
+ const available = typeof value.available === "boolean" ? value.available : false;
73
+ const qgisPath = optionalString(value.path) ?? "";
74
+ return {
75
+ path: qgisPath,
76
+ available,
77
+ };
78
+ }
79
+ export function normalizeConfig(value) {
80
+ if (!isRecord(value))
81
+ return EMPTY_CONFIG;
82
+ const config = {};
83
+ const psql = normalizePsql(value.psql);
84
+ const qgisProcess = normalizeQgis(value.qgis_process);
85
+ if (psql)
86
+ config.psql = psql;
87
+ if (qgisProcess)
88
+ config.qgis_process = qgisProcess;
89
+ return config;
90
+ }
91
+ function readConfigFile(filePath) {
92
+ if (!fs.existsSync(filePath))
93
+ return EMPTY_CONFIG;
94
+ try {
95
+ return normalizeConfig(JSON.parse(fs.readFileSync(filePath, "utf-8")));
96
+ }
97
+ catch {
98
+ return EMPTY_CONFIG;
99
+ }
100
+ }
101
+ export function mergeConfig(globalConfig, projectConfig) {
102
+ const config = {};
103
+ if (projectConfig.psql ?? globalConfig.psql) {
104
+ config.psql = projectConfig.psql ?? globalConfig.psql;
105
+ }
106
+ if (projectConfig.qgis_process ?? globalConfig.qgis_process) {
107
+ config.qgis_process = projectConfig.qgis_process ?? globalConfig.qgis_process;
108
+ }
109
+ return config;
110
+ }
111
+ export function loadGlobalConfig() {
112
+ return readConfigFile(getGlobalConfigPath());
113
+ }
114
+ export function loadProjectConfig(cwd = process.cwd()) {
115
+ return readConfigFile(getProjectConfigPath(cwd));
116
+ }
117
+ export function loadConfig(cwd = process.cwd()) {
118
+ return mergeConfig(loadGlobalConfig(), loadProjectConfig(cwd));
119
+ }
120
+ export function writeConfig(config, cwd = process.cwd(), scope = "project") {
121
+ const filePath = scope === "global" ? getGlobalConfigPath() : getProjectConfigPath(cwd);
122
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
123
+ fs.writeFileSync(filePath, `${JSON.stringify(config, null, 2)}\n`, "utf-8");
124
+ }
125
+ export function writeGlobalConfig(config) {
126
+ writeConfig(config, process.cwd(), "global");
127
+ }
128
+ export function writeProjectConfig(config, cwd = process.cwd()) {
129
+ writeConfig(config, cwd, "project");
130
+ }
131
+ function shellQuote(value) {
132
+ if (/^[A-Za-z0-9_./:=@+-]+$/.test(value))
133
+ return value;
134
+ return `'${value.replace(/'/g, "'\\''")}'`;
135
+ }
136
+ export function buildPsqlCommand(config) {
137
+ if (!config.psql)
138
+ return undefined;
139
+ const parts = [shellQuote(config.psql.command)];
140
+ if (config.psql.host) {
141
+ parts.push("-h", shellQuote(config.psql.host));
142
+ }
143
+ if (config.psql.port) {
144
+ parts.push("-p", String(config.psql.port));
145
+ }
146
+ if (config.psql.user) {
147
+ parts.push("-U", shellQuote(config.psql.user));
148
+ }
149
+ if (config.psql.database) {
150
+ parts.push("-d", shellQuote(config.psql.database));
151
+ }
152
+ return parts.join(" ");
153
+ }
154
+ export function migrateLegacyPiAuth() {
155
+ const geomindAuthPath = path.join(getGlobalAgentDir(), "auth.json");
156
+ const piAuthPath = path.join(os.homedir(), ".pi", "agent", "auth.json");
157
+ if (fs.existsSync(geomindAuthPath) || !fs.existsSync(piAuthPath))
158
+ return false;
159
+ fs.mkdirSync(path.dirname(geomindAuthPath), { recursive: true });
160
+ fs.copyFileSync(piAuthPath, geomindAuthPath);
161
+ return true;
162
+ }
163
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, InteractiveMode, SessionManager, } from "@earendil-works/pi-coding-agent";
6
+ import { getGlobalAgentDir, getProjectDir, loadConfig } from "./config.js";
7
+ import { getSystemPrompt } from "./prompts/system.js";
8
+ import { ensureRuntimeEnvironment } from "./setup.js";
9
+ const GEOMIND_CWD = process.cwd();
10
+ const GEOMIND_AGENT_DIR = getGlobalAgentDir();
11
+ const EXTENSION_FILES = ["memory.ts", "setup.ts"];
12
+ /**
13
+ * Patch Pi Agent branding to GeoMind at runtime.
14
+ * This replaces the postinstall script to avoid npm install failures
15
+ * on systems where `sh` is not available or scripts are skipped.
16
+ */
17
+ function ensureBranding() {
18
+ const packageRoot = getPackageRoot();
19
+ const candidates = [];
20
+ // npm layout: node_modules/@earendil-works/pi-coding-agent/package.json
21
+ const directPath = path.join(packageRoot, "node_modules", "@earendil-works", "pi-coding-agent", "package.json");
22
+ if (fs.existsSync(directPath))
23
+ candidates.push(directPath);
24
+ // pnpm layout: node_modules/.pnpm/@earendil-works+pi-coding-agent@*/...
25
+ const pnpmDir = path.join(packageRoot, "node_modules", ".pnpm");
26
+ if (fs.existsSync(pnpmDir)) {
27
+ try {
28
+ for (const dir of fs.readdirSync(pnpmDir)) {
29
+ if (dir.startsWith("@earendil-works+pi-coding-agent@")) {
30
+ candidates.push(path.join(pnpmDir, dir, "node_modules", "@earendil-works", "pi-coding-agent", "package.json"));
31
+ }
32
+ }
33
+ }
34
+ catch { /* ignore read errors */ }
35
+ }
36
+ for (const pkgPath of candidates) {
37
+ if (!fs.existsSync(pkgPath))
38
+ continue;
39
+ try {
40
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
41
+ if (pkg.piConfig?.name === "GeoMind")
42
+ continue; // already patched
43
+ if (!pkg.piConfig)
44
+ pkg.piConfig = {};
45
+ pkg.piConfig.name = "GeoMind";
46
+ pkg.piConfig.configDir = ".geomind";
47
+ fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
48
+ }
49
+ catch { /* ignore write errors */ }
50
+ }
51
+ }
52
+ function getPackageRoot() {
53
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
54
+ return path.basename(currentDir) === "dist" || path.basename(currentDir) === "src"
55
+ ? path.dirname(currentDir)
56
+ : currentDir;
57
+ }
58
+ function ensureExtensions(cwd) {
59
+ const packageExtensionDir = path.join(getPackageRoot(), ".geomind", "extensions");
60
+ const projectExtensionDir = path.join(getProjectDir(cwd), "extensions");
61
+ fs.mkdirSync(projectExtensionDir, { recursive: true });
62
+ for (const fileName of EXTENSION_FILES) {
63
+ const sourcePath = path.join(packageExtensionDir, fileName);
64
+ const targetPath = path.join(projectExtensionDir, fileName);
65
+ if (fs.existsSync(targetPath))
66
+ continue;
67
+ if (!fs.existsSync(sourcePath)) {
68
+ throw new Error(`Bundled GeoMind extension not found: ${sourcePath}`);
69
+ }
70
+ fs.copyFileSync(sourcePath, targetPath);
71
+ }
72
+ }
73
+ async function main() {
74
+ ensureBranding();
75
+ const authMigrated = ensureRuntimeEnvironment(GEOMIND_CWD);
76
+ ensureExtensions(GEOMIND_CWD);
77
+ if (authMigrated) {
78
+ console.log("Copied existing Pi auth to ~/.geomind/agent/auth.json");
79
+ }
80
+ const createRuntime = async ({ cwd, sessionManager, sessionStartEvent, }) => {
81
+ const services = await createAgentSessionServices({
82
+ cwd,
83
+ agentDir: GEOMIND_AGENT_DIR,
84
+ resourceLoaderOptions: {
85
+ systemPromptOverride: () => getSystemPrompt(loadConfig(cwd)),
86
+ },
87
+ });
88
+ return {
89
+ ...(await createAgentSessionFromServices({
90
+ services,
91
+ sessionManager,
92
+ sessionStartEvent,
93
+ })),
94
+ services,
95
+ diagnostics: services.diagnostics,
96
+ };
97
+ };
98
+ const runtime = await createAgentSessionRuntime(createRuntime, {
99
+ cwd: GEOMIND_CWD,
100
+ agentDir: GEOMIND_AGENT_DIR,
101
+ sessionManager: SessionManager.create(GEOMIND_CWD, path.join(getProjectDir(GEOMIND_CWD), "sessions")),
102
+ });
103
+ const mode = new InteractiveMode(runtime, {
104
+ migratedProviders: [],
105
+ modelFallbackMessage: undefined,
106
+ initialMessage: undefined,
107
+ initialImages: [],
108
+ initialMessages: [],
109
+ });
110
+ await mode.run();
111
+ }
112
+ main().catch((err) => {
113
+ console.error("GeoMind failed to start:", err);
114
+ process.exit(1);
115
+ });
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type GeoMindConfig } from "../config.js";
2
+ export declare function getSystemPrompt(config?: GeoMindConfig): string;
3
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/prompts/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AA0FtB,wBAAgB,eAAe,CAAC,MAAM,GAAE,aAA4B,GAAG,MAAM,CAsD5E"}