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.
Files changed (96) hide show
  1. package/README.md +84 -43
  2. package/README.zh-CN.md +83 -42
  3. package/agent_templates/main/agent.yaml +1 -0
  4. package/dist/auth/openai-oauth.d.ts.map +1 -1
  5. package/dist/auth/openai-oauth.js +6 -10
  6. package/dist/auth/openai-oauth.js.map +1 -1
  7. package/dist/cli.d.ts +1 -2
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +81 -60
  10. package/dist/cli.js.map +1 -1
  11. package/dist/commands.d.ts +6 -1
  12. package/dist/commands.d.ts.map +1 -1
  13. package/dist/commands.js +115 -26
  14. package/dist/commands.js.map +1 -1
  15. package/dist/config.d.ts +19 -26
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +80 -120
  18. package/dist/config.js.map +1 -1
  19. package/dist/dotenv.d.ts +18 -0
  20. package/dist/dotenv.d.ts.map +1 -0
  21. package/dist/dotenv.js +91 -0
  22. package/dist/dotenv.js.map +1 -0
  23. package/dist/home-path.d.ts +3 -0
  24. package/dist/home-path.d.ts.map +1 -0
  25. package/dist/home-path.js +7 -0
  26. package/dist/home-path.js.map +1 -0
  27. package/dist/index.d.ts +6 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/init-wizard.d.ts +2 -3
  32. package/dist/init-wizard.d.ts.map +1 -1
  33. package/dist/init-wizard.js +349 -145
  34. package/dist/init-wizard.js.map +1 -1
  35. package/dist/managed-provider-credentials.d.ts +23 -0
  36. package/dist/managed-provider-credentials.d.ts.map +1 -0
  37. package/dist/managed-provider-credentials.js +56 -0
  38. package/dist/managed-provider-credentials.js.map +1 -0
  39. package/dist/mcp-client.d.ts.map +1 -1
  40. package/dist/mcp-client.js +2 -1
  41. package/dist/mcp-client.js.map +1 -1
  42. package/dist/mcp-config.d.ts +13 -0
  43. package/dist/mcp-config.d.ts.map +1 -0
  44. package/dist/mcp-config.js +64 -0
  45. package/dist/mcp-config.js.map +1 -0
  46. package/dist/model-discovery.d.ts +20 -0
  47. package/dist/model-discovery.d.ts.map +1 -0
  48. package/dist/model-discovery.js +47 -0
  49. package/dist/model-discovery.js.map +1 -0
  50. package/dist/model-selection.d.ts +1 -1
  51. package/dist/model-selection.d.ts.map +1 -1
  52. package/dist/model-selection.js +20 -10
  53. package/dist/model-selection.js.map +1 -1
  54. package/dist/persistence.d.ts +12 -0
  55. package/dist/persistence.d.ts.map +1 -1
  56. package/dist/persistence.js +8 -6
  57. package/dist/persistence.js.map +1 -1
  58. package/dist/provider-credential-flow.d.ts +28 -0
  59. package/dist/provider-credential-flow.d.ts.map +1 -0
  60. package/dist/provider-credential-flow.js +112 -0
  61. package/dist/provider-credential-flow.js.map +1 -0
  62. package/dist/provider-presets.d.ts +4 -0
  63. package/dist/provider-presets.d.ts.map +1 -1
  64. package/dist/provider-presets.js +26 -9
  65. package/dist/provider-presets.js.map +1 -1
  66. package/dist/providers/registry.d.ts.map +1 -1
  67. package/dist/providers/registry.js +3 -2
  68. package/dist/providers/registry.js.map +1 -1
  69. package/dist/session.d.ts +6 -15
  70. package/dist/session.d.ts.map +1 -1
  71. package/dist/session.js +34 -60
  72. package/dist/session.js.map +1 -1
  73. package/dist/settings.d.ts +8 -27
  74. package/dist/settings.d.ts.map +1 -1
  75. package/dist/settings.js +4 -108
  76. package/dist/settings.js.map +1 -1
  77. package/dist/tui/app.d.ts.map +1 -1
  78. package/dist/tui/app.js +116 -2
  79. package/dist/tui/app.js.map +1 -1
  80. package/dist/tui/components/command-prompt-panel.d.ts +22 -0
  81. package/dist/tui/components/command-prompt-panel.d.ts.map +1 -0
  82. package/dist/tui/components/command-prompt-panel.js +26 -0
  83. package/dist/tui/components/command-prompt-panel.js.map +1 -0
  84. package/dist/tui/components/logo-panel.d.ts.map +1 -1
  85. package/dist/tui/components/logo-panel.js +2 -4
  86. package/dist/tui/components/logo-panel.js.map +1 -1
  87. package/dist/update-check.d.ts +19 -0
  88. package/dist/update-check.d.ts.map +1 -0
  89. package/dist/update-check.js +116 -0
  90. package/dist/update-check.js.map +1 -0
  91. package/dist/version.d.ts +2 -0
  92. package/dist/version.d.ts.map +1 -0
  93. package/dist/version.js +7 -0
  94. package/dist/version.js.map +1 -0
  95. package/package.json +7 -3
  96. 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;AAwB1B,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,SAAc,GACpB,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
+ {"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
- const require = createRequire(import.meta.url);
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 = pkg.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,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAwB,CAAC;AAEpE,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,GAAG,CAAC,OAAO;IAErB,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"}
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,2 @@
1
+ export declare const VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,QAET,CAAC"}
@@ -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.0",
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
- "build": "node -e \"const fs=require('fs');fs.rmSync('dist',{recursive:true,force:true});\" && tsc -p tsconfig.build.json",
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": {
@@ -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