chivgent 1.1.2 → 1.1.3

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 (109) hide show
  1. package/README.md +18 -5
  2. package/README.zh-CN.md +18 -5
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +15 -1
  5. package/dist/agent.js.map +1 -1
  6. package/dist/cli-options.d.ts +6 -0
  7. package/dist/cli-options.d.ts.map +1 -1
  8. package/dist/cli-options.js +22 -0
  9. package/dist/cli-options.js.map +1 -1
  10. package/dist/cli-runtime.d.ts.map +1 -1
  11. package/dist/cli-runtime.js +30 -8
  12. package/dist/cli-runtime.js.map +1 -1
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +10 -2
  15. package/dist/cli.js.map +1 -1
  16. package/dist/context/compaction.d.ts +10 -0
  17. package/dist/context/compaction.d.ts.map +1 -1
  18. package/dist/context/compaction.js +50 -10
  19. package/dist/context/compaction.js.map +1 -1
  20. package/dist/context/context-manager.d.ts +2 -5
  21. package/dist/context/context-manager.d.ts.map +1 -1
  22. package/dist/context/context-manager.js +47 -19
  23. package/dist/context/context-manager.js.map +1 -1
  24. package/dist/context/errors.d.ts +12 -0
  25. package/dist/context/errors.d.ts.map +1 -0
  26. package/dist/context/errors.js +19 -0
  27. package/dist/context/errors.js.map +1 -0
  28. package/dist/evals/report.d.ts.map +1 -1
  29. package/dist/evals/report.js +3 -0
  30. package/dist/evals/report.js.map +1 -1
  31. package/dist/evals/runner.d.ts +2 -0
  32. package/dist/evals/runner.d.ts.map +1 -1
  33. package/dist/evals/runner.js +13 -1
  34. package/dist/evals/runner.js.map +1 -1
  35. package/dist/evals/task.d.ts +2 -0
  36. package/dist/evals/task.d.ts.map +1 -1
  37. package/dist/evals/task.js +7 -0
  38. package/dist/evals/task.js.map +1 -1
  39. package/dist/events.d.ts +2 -0
  40. package/dist/events.d.ts.map +1 -1
  41. package/dist/events.js.map +1 -1
  42. package/dist/llm.d.ts +2 -0
  43. package/dist/llm.d.ts.map +1 -1
  44. package/dist/llm.js.map +1 -1
  45. package/dist/permissions.d.ts +6 -1
  46. package/dist/permissions.d.ts.map +1 -1
  47. package/dist/permissions.js +21 -4
  48. package/dist/permissions.js.map +1 -1
  49. package/dist/prompts.d.ts +4 -9
  50. package/dist/prompts.d.ts.map +1 -1
  51. package/dist/prompts.js +37 -9
  52. package/dist/prompts.js.map +1 -1
  53. package/dist/providers/definitions.js +1 -1
  54. package/dist/providers/definitions.js.map +1 -1
  55. package/dist/providers/openai-compatible-chat.d.ts.map +1 -1
  56. package/dist/providers/openai-compatible-chat.js +11 -4
  57. package/dist/providers/openai-compatible-chat.js.map +1 -1
  58. package/dist/providers/openai.js +2 -0
  59. package/dist/providers/openai.js.map +1 -1
  60. package/dist/repl.d.ts +12 -1
  61. package/dist/repl.d.ts.map +1 -1
  62. package/dist/repl.js +143 -60
  63. package/dist/repl.js.map +1 -1
  64. package/dist/session-store.d.ts +3 -0
  65. package/dist/session-store.d.ts.map +1 -1
  66. package/dist/session-store.js +5 -0
  67. package/dist/session-store.js.map +1 -1
  68. package/dist/session.d.ts +1 -0
  69. package/dist/session.d.ts.map +1 -1
  70. package/dist/session.js +33 -3
  71. package/dist/session.js.map +1 -1
  72. package/dist/shell/docker.d.ts.map +1 -1
  73. package/dist/shell/docker.js +1 -0
  74. package/dist/shell/docker.js.map +1 -1
  75. package/dist/shell/native.d.ts.map +1 -1
  76. package/dist/shell/native.js +1 -0
  77. package/dist/shell/native.js.map +1 -1
  78. package/dist/shell/types.d.ts +2 -0
  79. package/dist/shell/types.d.ts.map +1 -1
  80. package/dist/tools/bash.d.ts +16 -24
  81. package/dist/tools/bash.d.ts.map +1 -1
  82. package/dist/tools/bash.js +94 -30
  83. package/dist/tools/bash.js.map +1 -1
  84. package/dist/tools/target.d.ts.map +1 -1
  85. package/dist/tools/target.js +3 -1
  86. package/dist/tools/target.js.map +1 -1
  87. package/dist/tools/web-search.d.ts +42 -0
  88. package/dist/tools/web-search.d.ts.map +1 -0
  89. package/dist/tools/web-search.js +154 -0
  90. package/dist/tools/web-search.js.map +1 -0
  91. package/dist/tui/activity.d.ts +3 -1
  92. package/dist/tui/activity.d.ts.map +1 -1
  93. package/dist/tui/activity.js +46 -6
  94. package/dist/tui/activity.js.map +1 -1
  95. package/dist/tui/editor.d.ts.map +1 -1
  96. package/dist/tui/editor.js +2 -1
  97. package/dist/tui/editor.js.map +1 -1
  98. package/dist/tui/live.d.ts.map +1 -1
  99. package/dist/tui/live.js +55 -4
  100. package/dist/tui/live.js.map +1 -1
  101. package/dist/tui/markdown.d.ts +13 -0
  102. package/dist/tui/markdown.d.ts.map +1 -1
  103. package/dist/tui/markdown.js +35 -26
  104. package/dist/tui/markdown.js.map +1 -1
  105. package/dist/websearch/backend.d.ts +83 -0
  106. package/dist/websearch/backend.d.ts.map +1 -0
  107. package/dist/websearch/backend.js +238 -0
  108. package/dist/websearch/backend.js.map +1 -0
  109. package/package.json +1 -1
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Provider-independent web search contract.
3
+ *
4
+ * A backend is the only component that holds search credentials. The Agent and
5
+ * the tool never see a key; the tool passes one approved query and receives
6
+ * normalized, bounded results.
7
+ */
8
+ export interface WebSearchRequest {
9
+ readonly query: string;
10
+ readonly maxResults: number;
11
+ readonly signal?: AbortSignal;
12
+ }
13
+ export interface WebSearchResult {
14
+ readonly title: string;
15
+ readonly url: string;
16
+ readonly snippet: string;
17
+ /** ISO-ish date reported by the search provider, when it reports one. */
18
+ readonly publishedDate?: string;
19
+ }
20
+ export interface WebSearchResponse {
21
+ /** Adapter and endpoint identity. It must never contain a credential. */
22
+ readonly provider: string;
23
+ readonly results: readonly WebSearchResult[];
24
+ }
25
+ export interface WebSearchBackend {
26
+ readonly name: string;
27
+ search(request: WebSearchRequest): Promise<WebSearchResponse>;
28
+ }
29
+ /** Bounds shared by the adapter and the tool. The tool re-applies them. */
30
+ export declare const WEB_SEARCH_LIMITS: {
31
+ readonly defaultResults: 5;
32
+ readonly maxResults: 10;
33
+ readonly queryCharacters: 256;
34
+ readonly titleCharacters: 200;
35
+ readonly snippetCharacters: 400;
36
+ readonly urlCharacters: 2048;
37
+ readonly publishedDateCharacters: 64;
38
+ readonly providerCharacters: 100;
39
+ readonly responseBytes: number;
40
+ };
41
+ export type WebSearchFailure = "aborted" | "timeout" | "rate_limited" | "http" | "invalid_response" | "network";
42
+ /**
43
+ * A safe, user-facing failure. Messages never include the endpoint, request
44
+ * query, response body, or credentials.
45
+ */
46
+ export declare class WebSearchBackendError extends Error {
47
+ readonly kind: WebSearchFailure;
48
+ constructor(kind: WebSearchFailure, message: string);
49
+ }
50
+ export interface SearxngBackendOptions {
51
+ /** Base URL of the SearXNG instance, for example https://search.example.com. */
52
+ readonly baseURL: string;
53
+ /** Optional bearer token; supplied through the environment, never argv. */
54
+ readonly token?: string;
55
+ /** Injectable transport for tests. Defaults to the global fetch. */
56
+ readonly fetch?: typeof fetch;
57
+ readonly timeoutMs?: number;
58
+ }
59
+ /**
60
+ * SearXNG's JSON search API (the instance must allow `format=json`).
61
+ *
62
+ * The adapter is deliberately small: one GET request, no retries, no cookies,
63
+ * no redirects, and a bounded response body. Adding another backend means
64
+ * implementing WebSearchBackend, not changing the Agent or the tool.
65
+ */
66
+ export declare class SearxngBackend implements WebSearchBackend {
67
+ readonly name: string;
68
+ private readonly searchURL;
69
+ private readonly token?;
70
+ private readonly fetcher;
71
+ private readonly timeoutMs;
72
+ constructor(options: SearxngBackendOptions);
73
+ search(request: WebSearchRequest): Promise<WebSearchResponse>;
74
+ }
75
+ /** Human-readable adapter identity without credentials or URL path. */
76
+ export declare function webSearchProviderName(baseURL: string): string;
77
+ /** Validates and normalizes a user-supplied backend URL. */
78
+ export declare function parseBackendURL(value: string): URL;
79
+ /** Applies the output bounds to results supplied by any backend. */
80
+ export declare function boundWebSearchResults(results: readonly unknown[], maxResults: number): readonly WebSearchResult[];
81
+ /** Collapses whitespace and control characters, then bounds by characters. */
82
+ export declare function boundText(value: unknown, maxCharacters: number): string;
83
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/websearch/backend.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB;aAC5B,cAAc,EAAE,CAAC;aACjB,UAAU,EAAE,EAAE;aACd,eAAe,EAAE,GAAG;aACpB,eAAe,EAAE,GAAG;aACpB,iBAAiB,EAAE,GAAG;aACtB,aAAa,EAAE,IAAK;aACpB,uBAAuB,EAAE,EAAE;aAC3B,kBAAkB,EAAE,GAAG;aACvB,aAAa;CACL,CAAC;AAEX,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,SAAS,GACT,cAAc,GACd,MAAM,GACN,kBAAkB,GAClB,SAAS,CAAC;AAEd;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAE5C,QAAQ,CAAC,IAAI,EAAE,gBAAgB;IADjC,YACW,IAAI,EAAE,gBAAgB,EAC/B,OAAO,EAAE,MAAM,EAIhB;CACF;AAED,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,gBAAgB;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,YAAY,OAAO,EAAE,qBAAqB,EAezC;IAEK,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsElE;CACF;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAiBlD;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,UAAU,EAAE,MAAM,GACjB,SAAS,eAAe,EAAE,CAsB5B;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAUvE"}
@@ -0,0 +1,238 @@
1
+ /** Bounds shared by the adapter and the tool. The tool re-applies them. */
2
+ export const WEB_SEARCH_LIMITS = {
3
+ defaultResults: 5,
4
+ maxResults: 10,
5
+ queryCharacters: 256,
6
+ titleCharacters: 200,
7
+ snippetCharacters: 400,
8
+ urlCharacters: 2_048,
9
+ publishedDateCharacters: 64,
10
+ providerCharacters: 100,
11
+ responseBytes: 256 * 1024,
12
+ };
13
+ /**
14
+ * A safe, user-facing failure. Messages never include the endpoint, request
15
+ * query, response body, or credentials.
16
+ */
17
+ export class WebSearchBackendError extends Error {
18
+ kind;
19
+ constructor(kind, message) {
20
+ super(message);
21
+ this.kind = kind;
22
+ this.name = "WebSearchBackendError";
23
+ }
24
+ }
25
+ const DEFAULT_TIMEOUT_MS = 10_000;
26
+ /**
27
+ * SearXNG's JSON search API (the instance must allow `format=json`).
28
+ *
29
+ * The adapter is deliberately small: one GET request, no retries, no cookies,
30
+ * no redirects, and a bounded response body. Adding another backend means
31
+ * implementing WebSearchBackend, not changing the Agent or the tool.
32
+ */
33
+ export class SearxngBackend {
34
+ name;
35
+ searchURL;
36
+ token;
37
+ fetcher;
38
+ timeoutMs;
39
+ constructor(options) {
40
+ const url = parseBackendURL(options.baseURL);
41
+ const path = url.pathname.replace(/\/+$/, "");
42
+ this.searchURL = path.endsWith("/search")
43
+ ? `${url.origin}${path}`
44
+ : `${url.origin}${path}/search`;
45
+ this.name = `searxng (${url.host})`;
46
+ if (options.token !== undefined && options.token.length > 0) {
47
+ this.token = options.token;
48
+ }
49
+ this.fetcher = options.fetch ?? fetch;
50
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
51
+ if (!Number.isSafeInteger(this.timeoutMs) || this.timeoutMs < 1) {
52
+ throw new TypeError("Web search timeout must be a positive integer.");
53
+ }
54
+ }
55
+ async search(request) {
56
+ const timeout = AbortSignal.timeout(this.timeoutMs);
57
+ const signal = request.signal === undefined
58
+ ? timeout
59
+ : AbortSignal.any([request.signal, timeout]);
60
+ const url = new URL(this.searchURL);
61
+ url.searchParams.set("q", request.query);
62
+ url.searchParams.set("format", "json");
63
+ let response;
64
+ try {
65
+ response = await this.fetcher(url, {
66
+ method: "GET",
67
+ headers: {
68
+ accept: "application/json",
69
+ ...(this.token === undefined ? {} : { authorization: `Bearer ${this.token}` }),
70
+ },
71
+ redirect: "error",
72
+ signal,
73
+ });
74
+ }
75
+ catch {
76
+ if (request.signal?.aborted) {
77
+ throw new WebSearchBackendError("aborted", "the search was cancelled");
78
+ }
79
+ if (timeout.aborted) {
80
+ throw new WebSearchBackendError("timeout", `the search provider did not respond within ${Math.ceil(this.timeoutMs / 1_000)} seconds`);
81
+ }
82
+ throw new WebSearchBackendError("network", "could not reach the search provider");
83
+ }
84
+ if (!response.ok) {
85
+ if (response.status === 429) {
86
+ throw new WebSearchBackendError("rate_limited", "the search provider rate-limited the request (HTTP 429)");
87
+ }
88
+ throw new WebSearchBackendError("http", `the search provider returned HTTP ${response.status}`);
89
+ }
90
+ let payload;
91
+ try {
92
+ payload = JSON.parse(await readBoundedBody(response));
93
+ }
94
+ catch (error) {
95
+ if (error instanceof WebSearchBackendError)
96
+ throw error;
97
+ throw new WebSearchBackendError("invalid_response", "the search provider returned an invalid response");
98
+ }
99
+ const rawResults = typeof payload === "object" && payload !== null && !Array.isArray(payload)
100
+ ? payload.results
101
+ : undefined;
102
+ if (!Array.isArray(rawResults)) {
103
+ throw new WebSearchBackendError("invalid_response", "the search provider returned an invalid response");
104
+ }
105
+ return {
106
+ provider: this.name,
107
+ results: normalizeSearxngResults(rawResults, request.maxResults),
108
+ };
109
+ }
110
+ }
111
+ /** Human-readable adapter identity without credentials or URL path. */
112
+ export function webSearchProviderName(baseURL) {
113
+ return `searxng (${parseBackendURL(baseURL).host})`;
114
+ }
115
+ /** Validates and normalizes a user-supplied backend URL. */
116
+ export function parseBackendURL(value) {
117
+ let url;
118
+ try {
119
+ url = new URL(value);
120
+ }
121
+ catch {
122
+ throw new TypeError("Web search URL must be an absolute http or https URL.");
123
+ }
124
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
125
+ throw new TypeError("Web search URL must use http or https.");
126
+ }
127
+ if (url.username.length > 0 || url.password.length > 0) {
128
+ throw new TypeError("Web search URL must not contain credentials; use CHIVGENT_WEB_SEARCH_TOKEN.");
129
+ }
130
+ if (url.search.length > 0 || url.hash.length > 0) {
131
+ throw new TypeError("Web search URL must not contain a query string or fragment.");
132
+ }
133
+ return url;
134
+ }
135
+ /** Applies the output bounds to results supplied by any backend. */
136
+ export function boundWebSearchResults(results, maxResults) {
137
+ const bounded = [];
138
+ const seen = new Set();
139
+ for (const value of results) {
140
+ if (typeof value !== "object" || value === null || Array.isArray(value))
141
+ continue;
142
+ const record = value;
143
+ const url = normalizeResultURL(record.url);
144
+ if (url === undefined || seen.has(url))
145
+ continue;
146
+ seen.add(url);
147
+ const publishedDate = boundText(record.publishedDate ?? record.published_date, WEB_SEARCH_LIMITS.publishedDateCharacters);
148
+ bounded.push({
149
+ title: boundText(record.title, WEB_SEARCH_LIMITS.titleCharacters) || url,
150
+ url,
151
+ snippet: boundText(record.snippet ?? record.content, WEB_SEARCH_LIMITS.snippetCharacters),
152
+ ...(publishedDate.length === 0 ? {} : { publishedDate }),
153
+ });
154
+ if (bounded.length >= maxResults)
155
+ break;
156
+ }
157
+ return bounded;
158
+ }
159
+ /** Collapses whitespace and control characters, then bounds by characters. */
160
+ export function boundText(value, maxCharacters) {
161
+ if (typeof value !== "string")
162
+ return "";
163
+ const clean = value
164
+ .replace(/[\u0000-\u001f\u007f-\u009f]/g, " ")
165
+ .replace(/\s+/g, " ")
166
+ .trim();
167
+ const characters = [...clean];
168
+ return characters.length <= maxCharacters
169
+ ? clean
170
+ : `${characters.slice(0, maxCharacters - 1).join("")}…`;
171
+ }
172
+ function normalizeSearxngResults(raw, maxResults) {
173
+ const mapped = raw.map((value) => {
174
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
175
+ return undefined;
176
+ }
177
+ const record = value;
178
+ return {
179
+ title: record.title,
180
+ url: record.url,
181
+ snippet: record.content ?? record.snippet,
182
+ publishedDate: record.publishedDate ?? record.published_date,
183
+ };
184
+ });
185
+ return boundWebSearchResults(mapped, maxResults);
186
+ }
187
+ function normalizeResultURL(value) {
188
+ if (typeof value !== "string" || value.length === 0 ||
189
+ value.length > WEB_SEARCH_LIMITS.urlCharacters) {
190
+ return undefined;
191
+ }
192
+ let url;
193
+ try {
194
+ url = new URL(value);
195
+ }
196
+ catch {
197
+ return undefined;
198
+ }
199
+ if (url.protocol !== "http:" && url.protocol !== "https:")
200
+ return undefined;
201
+ if (url.username.length > 0 || url.password.length > 0)
202
+ return undefined;
203
+ return url.toString();
204
+ }
205
+ async function readBoundedBody(response) {
206
+ const declaration = Number(response.headers.get("content-length"));
207
+ if (Number.isFinite(declaration) && declaration > WEB_SEARCH_LIMITS.responseBytes) {
208
+ throw new WebSearchBackendError("invalid_response", "the search provider response was too large");
209
+ }
210
+ const reader = response.body?.getReader();
211
+ if (reader === undefined)
212
+ return "";
213
+ const chunks = [];
214
+ let bytes = 0;
215
+ try {
216
+ for (;;) {
217
+ const { done, value } = await reader.read();
218
+ if (done)
219
+ break;
220
+ bytes += value.byteLength;
221
+ if (bytes > WEB_SEARCH_LIMITS.responseBytes) {
222
+ throw new WebSearchBackendError("invalid_response", "the search provider response was too large");
223
+ }
224
+ chunks.push(value);
225
+ }
226
+ }
227
+ finally {
228
+ await reader.cancel().catch(() => undefined);
229
+ }
230
+ const joined = new Uint8Array(bytes);
231
+ let offset = 0;
232
+ for (const chunk of chunks) {
233
+ joined.set(chunk, offset);
234
+ offset += chunk.byteLength;
235
+ }
236
+ return new TextDecoder("utf-8", { fatal: false }).decode(joined);
237
+ }
238
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/websearch/backend.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chivgent",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "A terminal coding agent with a streaming TUI and configurable AI providers.",
5
5
  "license": "MIT",
6
6
  "repository": {