longer-agent 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -43
- package/README.zh-CN.md +83 -42
- package/agent_templates/main/agent.yaml +1 -0
- package/dist/auth/openai-oauth.d.ts.map +1 -1
- package/dist/auth/openai-oauth.js +6 -10
- package/dist/auth/openai-oauth.js.map +1 -1
- package/dist/cli.d.ts +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +81 -60
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +6 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +115 -26
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +19 -26
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +80 -120
- package/dist/config.js.map +1 -1
- package/dist/dotenv.d.ts +18 -0
- package/dist/dotenv.d.ts.map +1 -0
- package/dist/dotenv.js +91 -0
- package/dist/dotenv.js.map +1 -0
- package/dist/home-path.d.ts +3 -0
- package/dist/home-path.d.ts.map +1 -0
- package/dist/home-path.js +7 -0
- package/dist/home-path.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/init-wizard.d.ts +2 -3
- package/dist/init-wizard.d.ts.map +1 -1
- package/dist/init-wizard.js +349 -145
- package/dist/init-wizard.js.map +1 -1
- package/dist/managed-provider-credentials.d.ts +23 -0
- package/dist/managed-provider-credentials.d.ts.map +1 -0
- package/dist/managed-provider-credentials.js +56 -0
- package/dist/managed-provider-credentials.js.map +1 -0
- package/dist/mcp-client.d.ts.map +1 -1
- package/dist/mcp-client.js +2 -1
- package/dist/mcp-client.js.map +1 -1
- package/dist/mcp-config.d.ts +13 -0
- package/dist/mcp-config.d.ts.map +1 -0
- package/dist/mcp-config.js +64 -0
- package/dist/mcp-config.js.map +1 -0
- package/dist/model-discovery.d.ts +20 -0
- package/dist/model-discovery.d.ts.map +1 -0
- package/dist/model-discovery.js +47 -0
- package/dist/model-discovery.js.map +1 -0
- package/dist/model-selection.d.ts +1 -1
- package/dist/model-selection.d.ts.map +1 -1
- package/dist/model-selection.js +20 -10
- package/dist/model-selection.js.map +1 -1
- package/dist/persistence.d.ts +12 -0
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +8 -6
- package/dist/persistence.js.map +1 -1
- package/dist/provider-credential-flow.d.ts +28 -0
- package/dist/provider-credential-flow.d.ts.map +1 -0
- package/dist/provider-credential-flow.js +112 -0
- package/dist/provider-credential-flow.js.map +1 -0
- package/dist/provider-presets.d.ts +4 -0
- package/dist/provider-presets.d.ts.map +1 -1
- package/dist/provider-presets.js +26 -9
- package/dist/provider-presets.js.map +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +3 -2
- package/dist/providers/registry.js.map +1 -1
- package/dist/session.d.ts +6 -15
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +34 -60
- package/dist/session.js.map +1 -1
- package/dist/settings.d.ts +8 -27
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +4 -108
- package/dist/settings.js.map +1 -1
- package/dist/tui/app.d.ts.map +1 -1
- package/dist/tui/app.js +116 -2
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/components/command-prompt-panel.d.ts +22 -0
- package/dist/tui/components/command-prompt-panel.d.ts.map +1 -0
- package/dist/tui/components/command-prompt-panel.js +26 -0
- package/dist/tui/components/command-prompt-panel.js.map +1 -0
- package/dist/tui/components/logo-panel.d.ts.map +1 -1
- package/dist/tui/components/logo-panel.js +2 -4
- package/dist/tui/components/logo-panel.js.map +1 -1
- package/dist/update-check.d.ts +19 -0
- package/dist/update-check.d.ts.map +1 -0
- package/dist/update-check.js +116 -0
- package/dist/update-check.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +7 -3
- package/configExample.yaml +0 -83
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-prompt-panel.js","sourceRoot":"","sources":["../../../src/tui/components/command-prompt-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo-panel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/logo-panel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"logo-panel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/logo-panel.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAqB1B,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAInE;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,CAC7B,GAAG,SAAgB,EACnB,OAAO,SAAU,GAChB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQzC;AAED,wBAAgB,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAuBrE"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
|
-
import { createRequire } from "node:module";
|
|
4
3
|
import { theme } from "../theme.js";
|
|
5
|
-
|
|
6
|
-
const pkg = require("../../../package.json");
|
|
4
|
+
import { VERSION } from "../../version.js";
|
|
7
5
|
const LOGO = `\
|
|
8
6
|
╦ ╔═╗╔╗╔╔═╗╔═╗╦═╗ ╔═╗╔═╗╔═╗╔╗╔╔╦╗
|
|
9
7
|
║ ║ ║║║║║ ╦║╣ ╠╦╝ ╠═╣║ ╦║╣ ║║║ ║
|
|
@@ -21,7 +19,7 @@ export function truncateLeft(text, maxChars) {
|
|
|
21
19
|
return ".".repeat(Math.max(0, maxChars));
|
|
22
20
|
return `...${text.slice(-(maxChars - 3))}`;
|
|
23
21
|
}
|
|
24
|
-
export function getLogoMetaRows(cwd = process.cwd(), version =
|
|
22
|
+
export function getLogoMetaRows(cwd = process.cwd(), version = VERSION) {
|
|
25
23
|
return [
|
|
26
24
|
{ label: META_LABELS.version, value: `v${version}` },
|
|
27
25
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo-panel.js","sourceRoot":"","sources":["../../../src/tui/components/logo-panel.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"logo-panel.js","sourceRoot":"","sources":["../../../src/tui/components/logo-panel.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,IAAI,GAAG;;;mCAGsB,CAAC;AAEpC,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,YAAY;CACf,CAAC;AAEX,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAC3D,CAAC;AAEF,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAgB;IACzD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC;AAMD,MAAM,UAAU,eAAe,CAC7B,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EACnB,OAAO,GAAG,OAAO;IAEjB,OAAO;QACL,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,EAAE;QACpD;YACE,KAAK,EAAE,WAAW,CAAC,SAAS;YAC5B,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,oBAAoB,CAAC;SAC/C;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,GAAG,EAAkB;IAC/C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvD,OAAO,CACL,MAAC,GAAG,IACF,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,KAAK,CAAC,MAAM,EACzB,QAAQ,EAAE,CAAC,EACX,aAAa,EAAC,QAAQ,EACtB,UAAU,EAAE,CAAC,EACb,SAAS,EAAC,YAAY,aAEtB,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,YAAG,IAAI,GAAQ,EACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACrB,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YACzD,KAAC,IAAI,IAAC,QAAQ,kBAAE,GAAG,CAAC,KAAK,GAAQ,GAC7B,EACN,KAAC,IAAI,IAAC,QAAQ,kBAAE,GAAG,CAAC,KAAK,GAAQ,KAJzB,GAAG,CAAC,KAAK,CAKb,CACP,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-blocking update checker.
|
|
3
|
+
*
|
|
4
|
+
* Checks the npm registry for a newer version at most once per 24 hours.
|
|
5
|
+
* Caches the result in ~/.longeragent/.update-check.json.
|
|
6
|
+
*
|
|
7
|
+
* The latest package.json may contain an `updateNotice` string field —
|
|
8
|
+
* if present, it is displayed alongside the version update message.
|
|
9
|
+
* This allows the maintainer to communicate breaking changes, migration
|
|
10
|
+
* instructions, or urgent notices to users on older versions.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Check for updates in the background.
|
|
14
|
+
* Returns a function that prints the notice only if it is already known at the
|
|
15
|
+
* time the caller invokes it. This avoids writing to stdout after the Ink UI
|
|
16
|
+
* has taken over the terminal.
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkForUpdates(currentVersion: string): () => void;
|
|
19
|
+
//# sourceMappingURL=update-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuDH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,IAAI,CA6BlE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Non-blocking update checker.
|
|
3
|
+
*
|
|
4
|
+
* Checks the npm registry for a newer version at most once per 24 hours.
|
|
5
|
+
* Caches the result in ~/.longeragent/.update-check.json.
|
|
6
|
+
*
|
|
7
|
+
* The latest package.json may contain an `updateNotice` string field —
|
|
8
|
+
* if present, it is displayed alongside the version update message.
|
|
9
|
+
* This allows the maintainer to communicate breaking changes, migration
|
|
10
|
+
* instructions, or urgent notices to users on older versions.
|
|
11
|
+
*/
|
|
12
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { getLongerAgentHomeDir } from "./home-path.js";
|
|
15
|
+
const CACHE_FILE = ".update-check.json";
|
|
16
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
17
|
+
const PACKAGE_NAME = "longer-agent";
|
|
18
|
+
function cachePath() {
|
|
19
|
+
return join(getLongerAgentHomeDir(), CACHE_FILE);
|
|
20
|
+
}
|
|
21
|
+
function readCache() {
|
|
22
|
+
try {
|
|
23
|
+
const raw = JSON.parse(readFileSync(cachePath(), "utf-8"));
|
|
24
|
+
if (typeof raw.lastCheck === "number" && typeof raw.latestVersion === "string") {
|
|
25
|
+
return raw;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch { /* ignore */ }
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function writeCache(cache) {
|
|
32
|
+
try {
|
|
33
|
+
const dir = getLongerAgentHomeDir();
|
|
34
|
+
mkdirSync(dir, { recursive: true });
|
|
35
|
+
writeFileSync(cachePath(), JSON.stringify(cache));
|
|
36
|
+
}
|
|
37
|
+
catch { /* ignore */ }
|
|
38
|
+
}
|
|
39
|
+
function compareVersions(current, latest) {
|
|
40
|
+
const parse = (v) => v.replace(/^v/, "").split(".").map(Number);
|
|
41
|
+
const c = parse(current);
|
|
42
|
+
const l = parse(latest);
|
|
43
|
+
for (let i = 0; i < 3; i++) {
|
|
44
|
+
if ((l[i] ?? 0) > (c[i] ?? 0))
|
|
45
|
+
return true;
|
|
46
|
+
if ((l[i] ?? 0) < (c[i] ?? 0))
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check for updates in the background.
|
|
53
|
+
* Returns a function that prints the notice only if it is already known at the
|
|
54
|
+
* time the caller invokes it. This avoids writing to stdout after the Ink UI
|
|
55
|
+
* has taken over the terminal.
|
|
56
|
+
*/
|
|
57
|
+
export function checkForUpdates(currentVersion) {
|
|
58
|
+
let updateMessage = null;
|
|
59
|
+
// Check cache first
|
|
60
|
+
const cache = readCache();
|
|
61
|
+
if (cache && Date.now() - cache.lastCheck < CHECK_INTERVAL_MS) {
|
|
62
|
+
if (compareVersions(currentVersion, cache.latestVersion)) {
|
|
63
|
+
updateMessage = formatMessage(currentVersion, cache.latestVersion, cache.notice);
|
|
64
|
+
}
|
|
65
|
+
return () => { if (updateMessage)
|
|
66
|
+
console.log(updateMessage); };
|
|
67
|
+
}
|
|
68
|
+
// Fire and forget — fetch in background
|
|
69
|
+
void fetchLatestVersion()
|
|
70
|
+
.then((result) => {
|
|
71
|
+
if (!result)
|
|
72
|
+
return;
|
|
73
|
+
writeCache({
|
|
74
|
+
lastCheck: Date.now(),
|
|
75
|
+
latestVersion: result.version,
|
|
76
|
+
notice: result.notice,
|
|
77
|
+
});
|
|
78
|
+
if (compareVersions(currentVersion, result.version)) {
|
|
79
|
+
updateMessage = formatMessage(currentVersion, result.version, result.notice);
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
.catch(() => { });
|
|
83
|
+
// Only print if the background fetch already finished before the caller asks.
|
|
84
|
+
return () => { if (updateMessage)
|
|
85
|
+
console.log(updateMessage); };
|
|
86
|
+
}
|
|
87
|
+
async function fetchLatestVersion() {
|
|
88
|
+
try {
|
|
89
|
+
const controller = new AbortController();
|
|
90
|
+
const timer = setTimeout(() => controller.abort(), 3000);
|
|
91
|
+
const resp = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {
|
|
92
|
+
signal: controller.signal,
|
|
93
|
+
});
|
|
94
|
+
clearTimeout(timer);
|
|
95
|
+
if (!resp.ok)
|
|
96
|
+
return null;
|
|
97
|
+
const data = (await resp.json());
|
|
98
|
+
if (!data.version)
|
|
99
|
+
return null;
|
|
100
|
+
return {
|
|
101
|
+
version: data.version,
|
|
102
|
+
notice: typeof data.updateNotice === "string" ? data.updateNotice : undefined,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function formatMessage(current, latest, notice) {
|
|
110
|
+
let msg = `\n Update available: ${current} → ${latest}\n Run: npm install -g ${PACKAGE_NAME}\n`;
|
|
111
|
+
if (notice) {
|
|
112
|
+
msg += `\n Note: ${notice}\n`;
|
|
113
|
+
}
|
|
114
|
+
return msg;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAET,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const pkg = require("../package.json");
|
|
4
|
+
export const VERSION = typeof pkg.version === "string" && pkg.version.trim() !== ""
|
|
5
|
+
? pkg.version
|
|
6
|
+
: "0.0.0";
|
|
7
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAyB,CAAC;AAE/D,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;IACjF,CAAC,CAAC,GAAG,CAAC,OAAO;IACb,CAAC,CAAC,OAAO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "longer-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"updateNotice": "",
|
|
4
5
|
"description": "A terminal AI coding agent built for long sessions — three-layer context management, persistent memory, and parallel sub-agents",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"license": "MIT",
|
|
@@ -23,7 +24,6 @@
|
|
|
23
24
|
"agent_templates/",
|
|
24
25
|
"prompts/",
|
|
25
26
|
"skills/",
|
|
26
|
-
"configExample.yaml",
|
|
27
27
|
"LICENSE",
|
|
28
28
|
"README.md"
|
|
29
29
|
],
|
|
@@ -39,7 +39,10 @@
|
|
|
39
39
|
"terminal"
|
|
40
40
|
],
|
|
41
41
|
"scripts": {
|
|
42
|
-
"
|
|
42
|
+
"docs:dev": "vitepress dev docs-site",
|
|
43
|
+
"docs:build": "vitepress build docs-site",
|
|
44
|
+
"docs:preview": "vitepress preview docs-site",
|
|
45
|
+
"build": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true});\" && tsc -p tsconfig.build.json && chmod +x dist/cli.js",
|
|
43
46
|
"dev": "tsx src/cli.ts",
|
|
44
47
|
"test": "vitest run",
|
|
45
48
|
"test:watch": "vitest",
|
|
@@ -68,6 +71,7 @@
|
|
|
68
71
|
"@types/react": "^19.2.14",
|
|
69
72
|
"tsx": "^4.19.0",
|
|
70
73
|
"typescript": "^5.7.0",
|
|
74
|
+
"vitepress": "^1.6.4",
|
|
71
75
|
"vitest": "^3.0.0"
|
|
72
76
|
},
|
|
73
77
|
"optionalDependencies": {
|
package/configExample.yaml
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# LongerAgent Configuration
|
|
2
|
-
#
|
|
3
|
-
# This file is auto-generated by `longeragent init`, but you can also
|
|
4
|
-
# create or edit it manually. Place it at: ~/.longeragent/config.yaml
|
|
5
|
-
#
|
|
6
|
-
# API keys can use ${ENV_VAR} syntax to read from environment variables,
|
|
7
|
-
# or be specified as literal strings (not recommended for security).
|
|
8
|
-
|
|
9
|
-
# Which model to use by default. Must match a name in the `models` section.
|
|
10
|
-
default_model: my-claude
|
|
11
|
-
|
|
12
|
-
models:
|
|
13
|
-
# ── Anthropic ──────────────────────────────────────────────────────
|
|
14
|
-
my-claude:
|
|
15
|
-
provider: anthropic
|
|
16
|
-
model: claude-sonnet-4-6 # or: claude-opus-4-6, claude-haiku-4-5
|
|
17
|
-
api_key: ${ANTHROPIC_API_KEY}
|
|
18
|
-
# temperature: 0.7 # default: 0.7
|
|
19
|
-
# max_tokens: 32000 # default: 32000
|
|
20
|
-
# thinking_budget: 10000 # thinking token budget (if model supports thinking)
|
|
21
|
-
|
|
22
|
-
# ── OpenAI ─────────────────────────────────────────────────────────
|
|
23
|
-
# my-openai:
|
|
24
|
-
# provider: openai # uses Responses API (web search, reasoning)
|
|
25
|
-
# model: gpt-5.2 # or: gpt-5.2-codex, gpt-5.3-codex, gpt-5.4
|
|
26
|
-
# api_key: ${OPENAI_API_KEY}
|
|
27
|
-
|
|
28
|
-
# my-openai-chat:
|
|
29
|
-
# provider: openai-chat # uses Chat Completions API
|
|
30
|
-
# model: gpt-5.2 # or: gpt-5.2-codex, gpt-5.3-codex, gpt-5.4
|
|
31
|
-
# api_key: ${OPENAI_API_KEY}
|
|
32
|
-
|
|
33
|
-
# ── Kimi (Moonshot) ────────────────────────────────────────────────
|
|
34
|
-
# my-kimi:
|
|
35
|
-
# provider: kimi-cn # or: kimi / kimi-ai (international)
|
|
36
|
-
# model: kimi-k2.5
|
|
37
|
-
# api_key: ${KIMI_CN_API_KEY} # international: ${KIMI_API_KEY}
|
|
38
|
-
|
|
39
|
-
# ── MiniMax ────────────────────────────────────────────────────────
|
|
40
|
-
# my-minimax:
|
|
41
|
-
# provider: minimax
|
|
42
|
-
# model: MiniMax-M2.5 # or: MiniMax-M2.1, MiniMax-M1-80k
|
|
43
|
-
# api_key: ${MINIMAX_API_KEY}
|
|
44
|
-
|
|
45
|
-
# ── GLM (Zhipu) ───────────────────────────────────────────────────
|
|
46
|
-
# my-glm:
|
|
47
|
-
# provider: glm
|
|
48
|
-
# model: glm-5 # or: glm-4.7
|
|
49
|
-
# api_key: ${GLM_API_KEY}
|
|
50
|
-
|
|
51
|
-
# ── OpenRouter ─────────────────────────────────────────────────────
|
|
52
|
-
# my-openrouter:
|
|
53
|
-
# provider: openrouter
|
|
54
|
-
# model: anthropic/claude-sonnet-4.6 # or: anthropic/claude-haiku-4.5, openai/gpt-5.2-codex, openai/gpt-5.3-codex, minimax/minimax-m2.1
|
|
55
|
-
# api_key: ${OPENROUTER_API_KEY}
|
|
56
|
-
# http_referer: https://myapp.example.com # optional
|
|
57
|
-
# x_title: MyApp # optional
|
|
58
|
-
|
|
59
|
-
# ── Sub-agent model override (optional) ──────────────────────────────
|
|
60
|
-
# When set, all sub-agents use this model instead of the primary agent's.
|
|
61
|
-
# Must reference a model name defined above.
|
|
62
|
-
# sub_agent_model: my-openai
|
|
63
|
-
|
|
64
|
-
# ── MCP Servers (optional) ───────────────────────────────────────────
|
|
65
|
-
# LongerAgent acts as an MCP client: connects to these servers and
|
|
66
|
-
# makes their tools available to agents.
|
|
67
|
-
#
|
|
68
|
-
# mcp_servers:
|
|
69
|
-
# filesystem:
|
|
70
|
-
# transport: stdio
|
|
71
|
-
# command: npx
|
|
72
|
-
# args: ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
|
|
73
|
-
#
|
|
74
|
-
# brave-search:
|
|
75
|
-
# transport: stdio
|
|
76
|
-
# command: python
|
|
77
|
-
# args: ["-m", "mcp_server_brave_search"]
|
|
78
|
-
# env:
|
|
79
|
-
# BRAVE_API_KEY: ${BRAVE_API_KEY}
|
|
80
|
-
#
|
|
81
|
-
# remote-tools:
|
|
82
|
-
# transport: sse
|
|
83
|
-
# url: http://localhost:8080/mcp
|