@bendyline/gezel-service 1.0.3 → 1.0.5
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/bin/gezeld.js +781 -251
- package/dist/handboek-content/whats-new/1.26226.md +89 -0
- package/dist/index.d.ts +64 -11
- package/dist/index.js +781 -251
- package/dist/memory/embed-worker.js +22 -3
- package/dist/ui/assets/{TerminalCodeEditor-CXspNipu.js → TerminalCodeEditor-C_Mvaxqz.js} +2 -2
- package/dist/ui/assets/{_.contribution-Bi8h5rS7.js → _.contribution-fOcpgyNy.js} +1 -1
- package/dist/ui/assets/{chunk-6N2J7C2B-Du7clJkV.js → chunk-6N2J7C2B-BNHR_rFP.js} +1 -1
- package/dist/ui/assets/chunk-ILCJ3WFD-CUnKgI_I.js +4 -0
- package/dist/ui/assets/chunk-S5PCVMKU-i2wfHmvU.js +6 -0
- package/dist/ui/assets/{chunk-WATAOG4Y-BnCgSncI.js → chunk-WATAOG4Y-BbL-tDgQ.js} +1 -1
- package/dist/ui/assets/{cpp.contribution-CIgWElWw.js → cpp.contribution-Cx5HvoW7.js} +1 -1
- package/dist/ui/assets/{csharp.contribution-DDiJzXzB.js → csharp.contribution-DMuCSvzf.js} +1 -1
- package/dist/ui/assets/{css.contribution-Dc5E_mNx.js → css.contribution-BPXcRoVK.js} +1 -1
- package/dist/ui/assets/{cssMode-BN_VZB6O.js → cssMode-BHAnHChA.js} +1 -1
- package/dist/ui/assets/{dist-D4PZf1Q3.js → dist-DRDFuw7G.js} +2 -2
- package/dist/ui/assets/dist-DYn91eSO.js +2 -0
- package/dist/ui/assets/{dockerfile.contribution-BQsaSuAJ.js → dockerfile.contribution-DQAHazBI.js} +1 -1
- package/dist/ui/assets/docx-BEJpkI6I.js +2 -0
- package/dist/ui/assets/extract-UTAOG7LV-BY3SCkzz.js +1 -0
- package/dist/ui/assets/{go.contribution-CPvqBST7.js → go.contribution-Jq5pYI7r.js} +1 -1
- package/dist/ui/assets/{handlebars-DJvRMy-I.js → handlebars-BWC7ZXbe.js} +1 -1
- package/dist/ui/assets/handlebars.contribution-BSmxDPeT.js +2 -0
- package/dist/ui/assets/{html-Becff5XU.js → html-BzC9B_Os.js} +1 -1
- package/dist/ui/assets/html.contribution-CEvtdKHG.js +2 -0
- package/dist/ui/assets/{htmlMode-BFmyC6t-.js → htmlMode-1qtmM5J4.js} +1 -1
- package/dist/ui/assets/{index-w_CaRVtV.js → index-JGn32C5f.js} +177 -172
- package/dist/ui/assets/infer-D6e75m-s.js +2 -0
- package/dist/ui/assets/{ini.contribution-DFSSA0eY.js → ini.contribution-BQpzdQzE.js} +1 -1
- package/dist/ui/assets/{java.contribution-Bdvvskrf.js → java.contribution-r3T-8LYE.js} +1 -1
- package/dist/ui/assets/{javascript-DByfaclN.js → javascript-DlipM3VT.js} +1 -1
- package/dist/ui/assets/javascript.contribution-D4MU3K0o.js +2 -0
- package/dist/ui/assets/{jsonMode-CxkV6dJT.js → jsonMode-DSXTaEG9.js} +1 -1
- package/dist/ui/assets/{kotlin.contribution-D8eqi2Fi.js → kotlin.contribution-NI_YvQPr.js} +1 -1
- package/dist/ui/assets/layouts-2A7QNF6Y-CWQp8HDd.js +1 -0
- package/dist/ui/assets/{less.contribution-DFRb86Ld.js → less.contribution-BDz7g6GS.js} +1 -1
- package/dist/ui/assets/{lua.contribution-BgktkcsF.js → lua.contribution-Cr_f17YF.js} +1 -1
- package/dist/ui/assets/{markdown.contribution-BKqBKD_g.js → markdown.contribution-CeJFrLN_.js} +1 -1
- package/dist/ui/assets/{monaco-CyhM025v.js → monaco-Bv9TxWl_.js} +3 -3
- package/dist/ui/assets/{monaco-base-hW9ht_BG.js → monaco-base-DD1Wr24S.js} +1 -1
- package/dist/ui/assets/{monaco-setup-Cquhh1OE.js → monaco-setup-CSa3_fbr.js} +1 -1
- package/dist/ui/assets/{monaco.contribution-Cle0Lbgx.js → monaco.contribution-DKCJArGP.js} +2 -2
- package/dist/ui/assets/{monaco.contribution-BVrZ1Anc.js → monaco.contribution-QFH9z5g8.js} +2 -2
- package/dist/ui/assets/{monaco.contribution-D9-bPyBf.js → monaco.contribution-ZD-wInG3.js} +2 -2
- package/dist/ui/assets/{monaco.contribution-Dl8lHLi5.js → monaco.contribution-tTvEzZ5l.js} +2 -2
- package/dist/ui/assets/{php.contribution-CcYxMawn.js → php.contribution-B310cs3S.js} +1 -1
- package/dist/ui/assets/pptx-DZdEoDP9.js +6 -0
- package/dist/ui/assets/{python-DivQov6J.js → python-CcCNDnkj.js} +1 -1
- package/dist/ui/assets/python.contribution-ZHL594qQ.js +2 -0
- package/dist/ui/assets/{ruby.contribution-DNudSRrU.js → ruby.contribution-CRsX2xPw.js} +1 -1
- package/dist/ui/assets/{rust.contribution-BqG2lQpP.js → rust.contribution-CfwWiQxD.js} +1 -1
- package/dist/ui/assets/{scss.contribution-DDxPnF-K.js → scss.contribution-CJaLNKeq.js} +1 -1
- package/dist/ui/assets/{shell.contribution-Q7wVL7zv.js → shell.contribution-DLPinQHD.js} +1 -1
- package/dist/ui/assets/{sql.contribution-B9ndj3QH.js → sql.contribution-DsZSLfVg.js} +1 -1
- package/dist/ui/assets/{swift.contribution-D_FDdL6S.js → swift.contribution-DFBOOFKs.js} +1 -1
- package/dist/ui/assets/{terminal-monaco-setup-BdF0mUfG.js → terminal-monaco-setup-B8Xv2NV9.js} +1 -1
- package/dist/ui/assets/{tsMode-JVR2Jo5q.js → tsMode-DqT2Dz4k.js} +1 -1
- package/dist/ui/assets/{typescript-1ZOjdUnd.js → typescript-_R5MS0Lp.js} +1 -1
- package/dist/ui/assets/typescript.contribution-CHnXQvfG.js +2 -0
- package/dist/ui/assets/xlsx-DDBRN-IU.js +4 -0
- package/dist/ui/assets/{xml-DrdFGpo2.js → xml-CQVIKNxb.js} +1 -1
- package/dist/ui/assets/xml.contribution-HY4GvlWC.js +2 -0
- package/dist/ui/assets/{yaml-DYQPB5Mj.js → yaml-Nt3uLkWC.js} +1 -1
- package/dist/ui/assets/yaml.contribution-C7dllTyY.js +2 -0
- package/dist/ui/index.html +10 -10
- package/package.json +12 -11
- package/dist/ui/assets/chunk-ILCJ3WFD-fHFoZ9wm.js +0 -4
- package/dist/ui/assets/chunk-S5PCVMKU-DopU3Q9j.js +0 -6
- package/dist/ui/assets/dist-BwDZUtiH.js +0 -2
- package/dist/ui/assets/docx-IZY6hX8A.js +0 -2
- package/dist/ui/assets/extract-UTAOG7LV-BZ_L7lLL.js +0 -1
- package/dist/ui/assets/handlebars.contribution-BNbstxN6.js +0 -2
- package/dist/ui/assets/html.contribution-CPDzzJ0M.js +0 -2
- package/dist/ui/assets/infer-v-bCXeT9.js +0 -2
- package/dist/ui/assets/javascript.contribution-CPCuprn0.js +0 -2
- package/dist/ui/assets/layouts-2A7QNF6Y-D94iKLLQ.js +0 -1
- package/dist/ui/assets/pptx-CsdVR0xn.js +0 -6
- package/dist/ui/assets/python.contribution-CiRaN0sm.js +0 -2
- package/dist/ui/assets/typescript.contribution-_s-8TvIE.js +0 -2
- package/dist/ui/assets/xlsx-CdLmEC42.js +0 -4
- package/dist/ui/assets/xml.contribution-DUPYAKAC.js +0 -2
- package/dist/ui/assets/yaml.contribution-CRBo99nF.js +0 -2
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: whats-new/1.26226
|
|
3
|
+
title: 1.26226 — 14 August 2026
|
|
4
|
+
order: -26226
|
|
5
|
+
summary: Five more models on the scorecard, file problems you can hand straight to a gezel, a much fuller terminal app, and memory that keeps working when its index breaks.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 1.26226 — 14 August 2026
|
|
9
|
+
|
|
10
|
+
Two days of work since **1.26224**, and a dense two days.
|
|
11
|
+
|
|
12
|
+
If you read only one thing: the problems gezel finds in your files stopped being a list you read and became work you can hand to someone, the terminal version of gezel caught up with the app, and the model scoreboard more than doubled.
|
|
13
|
+
|
|
14
|
+
Also: a new model - Qwen 3.8 27B Q4 - is now available. We're doing more testing and additional tuning over the next couple days, but if Qwen 3.6 is any indication, it should be really good!
|
|
15
|
+
|
|
16
|
+
## Problems in your files became work you can hand off
|
|
17
|
+
|
|
18
|
+
Gezel's *boekwachter* — the keeper of the books, the crew member who reads through a project and notes what looks wrong — used to produce a list. You read it, and then it was on you.
|
|
19
|
+
|
|
20
|
+
Now each finding is a tracked issue with its own reference (`BW-1`, `BW-2`, and so on) that survives restarts and re-scans. Each one is **open**, **in progress**, **resolved** or **dismissed**, and you move it between those yourself. Closed ones fold away until you ask to see them.
|
|
21
|
+
|
|
22
|
+
The part that matters: there is now a **Fix this** button. Press it and gezel opens a dialog that has already worked out what kind of gezel this file needs — a writer for a document, a designer for an image, a developer for code, a researcher for a spreadsheet — and offers you the ones on your crew who fit. Choose one and it becomes a task, linked back to the issue, so the file, the finding and the work are the same thread rather than three things you hold in your head. Each file also shows a plain health score out of ten and the reason behind it.
|
|
23
|
+
|
|
24
|
+
## The terminal app caught up
|
|
25
|
+
|
|
26
|
+
If you use `gezel` from a terminal, this release is mostly for you.
|
|
27
|
+
|
|
28
|
+
- Many stability fixes for the npm '@bendyline/gezel-cli' package and command line. See the docs at https://gezel.com/docs/cli-reference/ for more information.
|
|
29
|
+
- `/open` — type it in a chat and gezel offers you the files that conversation just touched, plus the project's artifacts and workspace folders, and opens the one you pick. This works in the desktop app's message box too.
|
|
30
|
+
- `gezel mode <read-only|reactive|reactive+tasks|full-play>`, or `/mode` inside a session — the same four settings for how much gezel is allowed to do on its own that the app has, now in one word from the command line.
|
|
31
|
+
- `gezel do <craftbook>` and `/do` — start a piece of standard work (a *craftbook* is gezel's word for a written-down procedure) without leaving the terminal.
|
|
32
|
+
- `/allow` and `/disallow` — turn a project's write permissions on and off in place.
|
|
33
|
+
- `/model download` — pick and fetch a new on-device model from inside a session.
|
|
34
|
+
- First-run setup in the terminal now shows the same model information the app does, and pressing Ctrl+C actually shuts down the background service it started instead of leaving it running.
|
|
35
|
+
|
|
36
|
+
The rest of the commands are in the [command-line reference](../technical/cli-reference.md).
|
|
37
|
+
|
|
38
|
+
## Memory that does not give up
|
|
39
|
+
|
|
40
|
+
Your gezels' memories are ordinary Markdown files, and a search index sits on top of them to make recall fast. Previously, trouble with the index could take memory down with it — a first-time download of the search model failing because you were offline was enough to turn memory off for the rest of the session.
|
|
41
|
+
|
|
42
|
+
That is fixed in three places. Saving a memory now always writes the Markdown first, and reports the indexing as deferred rather than failing; the index catches up on its own afterwards. Searching falls back to plain text search when the fast path is unavailable, and tells you it did. And a failed model download is now treated as something that might clear — gezel waits a minute and tries again, instead of concluding that memory is broken.
|
|
43
|
+
|
|
44
|
+
## Connectors are now an explicit preview
|
|
45
|
+
|
|
46
|
+
Connectors — the things that pull a calendar, a repository or a social account into a project — have moved behind a switch in **Settings → Advanced → Show very early work-in-progress features**, and it is off. So are the project types and craftbooks that depend on them.
|
|
47
|
+
|
|
48
|
+
This is a step back in visibility and a step forward in honesty. They are not finished, they change shape between releases, and having them sitting in every project's settings implied a stability they do not have yet.
|
|
49
|
+
|
|
50
|
+
Behind that switch, they got considerably better. Bluesky, X, LinkedIn and Instagram joined the connectors gezel can talk to, with a deliberate three-step path to publishing anything: a gezel **drafts** a post, **queues** it, and only then can **publish** it — and publishing is denied unless you have said otherwise, one time at a time. Overnight work never publishes; it leaves things in the outbox for you. Gezel ships no social-media app credentials of its own, so connecting an account means registering your own developer app, which the connection panel now walks you through and stores the secret in your operating system's keychain. Posts and mentions that come back land in the project's artifacts and are searchable alongside everything else.
|
|
51
|
+
|
|
52
|
+
## Five more models measured
|
|
53
|
+
|
|
54
|
+
The [Model scorecard](../technical/model-scorecard.md) went from four models to nine.
|
|
55
|
+
|
|
56
|
+
The new entries are **gemma4-26b**, **qwen3.6-27b**, **qwen3.6-35b-a3b**, **muse-glimmer-30b** and **nemotron3.5-lightning-30b**, all measured the same way as the first four: every job run three times on a real machine and checked by a program. The picture that emerges is more interesting than "bigger is better". On general capability, gemma4-26b and qwen3.6-27b both finished every job. On the office and knowledge set, the small ornith-9b still beats several models three times its size. And qwen3.6-27b and qwen3.6-35b-a3b earn the highest marks from the separate quality read, at a fraction of the memory gemma4-26b needs.
|
|
57
|
+
|
|
58
|
+
[How we test models](../technical/how-we-test-models.md) explains what the numbers do and do not tell you. It is worth five minutes before you pick.
|
|
59
|
+
|
|
60
|
+
While you are on the models screen, every catalog model now says **who made it and who prepared the version you download**. Those are often different organizations — a company trains the model, someone else converts and compresses it so it runs on your machine — and until now gezel showed you only one name. The terminal app shows the same line when it offers you a model.
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
## Smaller things
|
|
64
|
+
|
|
65
|
+
- **A job's single gezel is now called the Builder** rather than the Ambachtsman. Same gezel, a more simple word.
|
|
66
|
+
- **Codex and Claude sessions have their own permission setting per project**, separate from what gezel's own tools may do — so you can let one edit and keep the other reading.
|
|
67
|
+
- **Settings → About lists your running local engines** and, for each, the context window it actually got at launch. A model that suddenly seems to have lost the plot is very often one whose window came out smaller than the instructions it carries; this turns that from a log hunt into a glance.
|
|
68
|
+
- **The "stop everything" button now also unloads local engines** and drops gezel to Reactive, and it is reachable from Settings as well as the engine pill.
|
|
69
|
+
- **Model files gezel cannot read appear under "Models needing attention"** with their size and an Update or Remove button, instead of vanishing while still using your disk.
|
|
70
|
+
- **App updates show a real download progress bar** rather than an unmoving "downloading".
|
|
71
|
+
- **If gezel itself crashes, you get a plain dialog** offering to open a pre-filled report in your browser. Nothing is sent anywhere unless you press it.
|
|
72
|
+
- **Your graphics setup is re-checked at every launch**, so installing or removing a driver is noticed instead of remembered wrongly from the first run.
|
|
73
|
+
- **The prompt cache display no longer counts shared groundwork as conversations**, so the number matches what you have open.
|
|
74
|
+
- **Craftbooks now say what each step is supposed to produce**, and the finished result is checked against that rather than against the attempt.
|
|
75
|
+
- **Asking for the same piece of work twice in one turn returns the task already running** instead of starting a duplicate.
|
|
76
|
+
- Refreshed underlying editor and catalog content packages (squisq 2.7.2, gilde 0.1.28).
|
|
77
|
+
|
|
78
|
+
## For developers
|
|
79
|
+
|
|
80
|
+
- **The Output Pane API (**`window.gezel`**) is documented and at version 1.** Interactive pages pinned into a project's Output pane get a frozen `gezel` object with `page`, `tools`, `data` and `ui` — reads are declared in the project type's manifest and enforced per request on the server, so a page can never read past its declaration. The earlier hand-rolled postMessage pattern keeps working.
|
|
81
|
+
- **Pull request files and diffs are properly paginated** for tools that read them, so a large PR no longer silently loses its later files.
|
|
82
|
+
- **Dependency operations in the repository are leased.** `pnpm deps:status` diagnoses, `pnpm deps:install` adds only what is genuinely missing, and `pnpm deps:repair` is the one explicit reconciliation path; builds and tests hold a shared read lease and can run alongside each other.
|
|
83
|
+
- `node-pty`** is now an optional dependency**, so an npm install of gezel no longer fails on machines without a build toolchain.
|
|
84
|
+
|
|
85
|
+
## Anything to do?
|
|
86
|
+
|
|
87
|
+
No. Update when you are offered it.
|
|
88
|
+
|
|
89
|
+
Two settings are worth a visit. If connectors disappeared from your projects, they are behind **Settings → Advanced → Show very early work-in-progress features** — turn it on and they come back exactly as they were. And if you run models on your own machine, the new scorecard entries may change which one you want: start at the [Model scorecard](../technical/model-scorecard.md).
|
package/dist/index.d.ts
CHANGED
|
@@ -1808,11 +1808,10 @@ interface PublishScope {
|
|
|
1808
1808
|
* History is bus-side only: cleared on `done` so completed turns don't get
|
|
1809
1809
|
* re-delivered when a new subscriber connects after the fact.
|
|
1810
1810
|
*
|
|
1811
|
-
*
|
|
1812
|
-
*
|
|
1813
|
-
*
|
|
1814
|
-
*
|
|
1815
|
-
* does, which is the only listener that cares about that scope.
|
|
1811
|
+
* If a send truly cannot resolve its session record, it does not know the
|
|
1812
|
+
* gezelId/projectId and publishes session-scoped via `publishSessionOnly`.
|
|
1813
|
+
* Once a record is known, even provider-start failures use `publish` so
|
|
1814
|
+
* project/global clients receive the error.
|
|
1816
1815
|
*/
|
|
1817
1816
|
declare class ChatEventBus {
|
|
1818
1817
|
private readonly sessionBuses;
|
|
@@ -2293,6 +2292,17 @@ interface PromptCtx extends ModelCtx {
|
|
|
2293
2292
|
interface TurnCtx extends ModelCtx {
|
|
2294
2293
|
sessionId: string;
|
|
2295
2294
|
isMeester: boolean;
|
|
2295
|
+
/** Project receiving this turn. `default` is the unscoped front-door context. */
|
|
2296
|
+
projectId: string;
|
|
2297
|
+
/**
|
|
2298
|
+
* Provenance of the user-role message. Provider schemas use `user` for
|
|
2299
|
+
* human composer turns, question answers, gezel handoffs, and service
|
|
2300
|
+
* nudges alike; behaviors need this stronger signal before applying
|
|
2301
|
+
* user-intent routing such as the Meester new-project prelude.
|
|
2302
|
+
*/
|
|
2303
|
+
messageOrigin: 'direct-user' | 'question-answer' | 'cross-gezel' | 'background-nudge' | 'system';
|
|
2304
|
+
/** Canonical/unqualified plus provider-advertised live tool names. */
|
|
2305
|
+
availableToolNames: ReadonlyArray<string>;
|
|
2296
2306
|
/** Verbatim user-message text for this turn. */
|
|
2297
2307
|
userText: string;
|
|
2298
2308
|
/** Tool calls that drained from the per-turn accumulator. */
|
|
@@ -5287,6 +5297,12 @@ interface SearchResult {
|
|
|
5287
5297
|
|
|
5288
5298
|
interface SaveOutcome {
|
|
5289
5299
|
status: 'saved' | 'duplicate';
|
|
5300
|
+
/** False means Markdown is durable and the derived vector cache needs repair. */
|
|
5301
|
+
indexed?: boolean;
|
|
5302
|
+
degraded?: {
|
|
5303
|
+
code: 'semantic_index_unavailable';
|
|
5304
|
+
message: string;
|
|
5305
|
+
};
|
|
5290
5306
|
/** Populated on 'duplicate': what it matched and how. */
|
|
5291
5307
|
match?: {
|
|
5292
5308
|
text: string;
|
|
@@ -5294,6 +5310,16 @@ interface SaveOutcome {
|
|
|
5294
5310
|
via: 'exact' | 'vector';
|
|
5295
5311
|
};
|
|
5296
5312
|
}
|
|
5313
|
+
type MemorySearchMode = 'semantic' | 'hybrid' | 'lexical';
|
|
5314
|
+
interface MemorySearchOutcome {
|
|
5315
|
+
results: SearchResult[];
|
|
5316
|
+
mode: MemorySearchMode;
|
|
5317
|
+
/** Present when a semantic-search failure forced the source-text fallback. */
|
|
5318
|
+
degraded?: {
|
|
5319
|
+
code: 'semantic_search_unavailable';
|
|
5320
|
+
message: string;
|
|
5321
|
+
};
|
|
5322
|
+
}
|
|
5297
5323
|
interface MemoryManagerOptions {
|
|
5298
5324
|
/** Override {@link MEMORY_DEDUP_THRESHOLD} (tests). */
|
|
5299
5325
|
dedupThreshold?: number;
|
|
@@ -5315,8 +5341,8 @@ declare class MemoryManager {
|
|
|
5315
5341
|
* that text dedups, so we accept the race rather than lock.
|
|
5316
5342
|
*
|
|
5317
5343
|
* Degraded mode (embeddings disabled): markdown is still appended (it is
|
|
5318
|
-
* the source of truth and the
|
|
5319
|
-
*
|
|
5344
|
+
* the source of truth) and the outcome reports deferred indexing. The health
|
|
5345
|
+
* monitor self-heals the derived index once embeddings recover.
|
|
5320
5346
|
*/
|
|
5321
5347
|
save(scope: 'gezel' | 'project', id: string, text: string, kind?: MemoryKind): Promise<SaveOutcome>;
|
|
5322
5348
|
/**
|
|
@@ -5347,6 +5373,15 @@ declare class MemoryManager {
|
|
|
5347
5373
|
*/
|
|
5348
5374
|
hasIndex(scope: 'gezel' | 'project', id: string): boolean;
|
|
5349
5375
|
searchAll(gezelId: string, projectId: string, query: string, topK?: number): Promise<SearchResult[]>;
|
|
5376
|
+
/**
|
|
5377
|
+
* Search both scopes with one query embedding. Missing indexes fall back to
|
|
5378
|
+
* the daily Markdown source; an unavailable/corrupt semantic cache does the
|
|
5379
|
+
* same and reports a degraded mode instead of turning an optional feature
|
|
5380
|
+
* into an HTTP 500.
|
|
5381
|
+
*/
|
|
5382
|
+
searchAllDetailed(gezelId: string, projectId: string, query: string, topK?: number): Promise<MemorySearchOutcome>;
|
|
5383
|
+
private searchAllLexical;
|
|
5384
|
+
private searchLexical;
|
|
5350
5385
|
listDays(scope: 'gezel' | 'project', id: string): Promise<string[]>;
|
|
5351
5386
|
readDay(scope: 'gezel' | 'project', id: string, day: string): Promise<string>;
|
|
5352
5387
|
/**
|
|
@@ -8488,6 +8523,7 @@ interface TaskBudgetSnapshot {
|
|
|
8488
8523
|
inputTokens: number;
|
|
8489
8524
|
}
|
|
8490
8525
|
|
|
8526
|
+
type TurnMessageOrigin = 'direct-user' | 'question-answer' | 'cross-gezel' | 'background-nudge' | 'system';
|
|
8491
8527
|
interface GateScriptDiagnostic {
|
|
8492
8528
|
scriptName: string;
|
|
8493
8529
|
runId?: string;
|
|
@@ -8783,10 +8819,12 @@ declare class ChatManager {
|
|
|
8783
8819
|
*/
|
|
8784
8820
|
private readonly afterSessionIdle;
|
|
8785
8821
|
/**
|
|
8786
|
-
* One live async file handoff per sender/target/project/path. Models can
|
|
8822
|
+
* One live async file handoff per sender/target/project/path/intent. Models can
|
|
8787
8823
|
* emit the same `message_gezel` call several times while the sender turn
|
|
8788
8824
|
* is still active; joining that work prevents a parked-send burst from
|
|
8789
|
-
* replaying the same assignment into the recipient session.
|
|
8825
|
+
* replaying the same assignment into the recipient session. A later
|
|
8826
|
+
* validator repair for a file that was originally missing is distinct work
|
|
8827
|
+
* and must never join the older create request.
|
|
8790
8828
|
*/
|
|
8791
8829
|
private readonly inflightFileHandoffs;
|
|
8792
8830
|
/** Set once {@link shutdown} starts so deferred watchdogs don't fire into a tearing-down manager. */
|
|
@@ -9597,6 +9635,8 @@ declare class ChatManager {
|
|
|
9597
9635
|
* advanced, carry on" instead of naming the recipient as the sender.
|
|
9598
9636
|
*/
|
|
9599
9637
|
fromGezelId?: string;
|
|
9638
|
+
/** Naming presentation inherited from the task's launching session. */
|
|
9639
|
+
roleBasedNameOnlyMode?: boolean;
|
|
9600
9640
|
/**
|
|
9601
9641
|
* `'entry'` is a fresh launch (e.g. the command launcher created the
|
|
9602
9642
|
* task and is starting its entry step) — there is no prior step, so
|
|
@@ -9653,6 +9693,8 @@ declare class ChatManager {
|
|
|
9653
9693
|
toGezelIdOrName: string;
|
|
9654
9694
|
projectId?: string;
|
|
9655
9695
|
text: string;
|
|
9696
|
+
/** One-way feedback that must not wake the sender with the recipient's reply. */
|
|
9697
|
+
suppressReply?: boolean;
|
|
9656
9698
|
/** Internal task context for scheduler re-drives. */
|
|
9657
9699
|
taskRef?: string;
|
|
9658
9700
|
/** Exact step paired with taskRef when re-driving task work. */
|
|
@@ -10064,6 +10106,8 @@ declare class ChatManager {
|
|
|
10064
10106
|
* the message never queued, so it renders as a normal send.
|
|
10065
10107
|
*/
|
|
10066
10108
|
nudge?: boolean;
|
|
10109
|
+
/** Strong provenance used by per-turn behavior hooks. */
|
|
10110
|
+
messageOrigin?: TurnMessageOrigin;
|
|
10067
10111
|
}): Promise<ChatMessage>;
|
|
10068
10112
|
/**
|
|
10069
10113
|
* Wrap {@link runSend} so its completion — success or error — triggers
|
|
@@ -12141,6 +12185,8 @@ interface TaskRunnerDispatcher {
|
|
|
12141
12185
|
fromGezelName?: string;
|
|
12142
12186
|
fromGezelId?: string;
|
|
12143
12187
|
kind?: 'handoff' | 'entry';
|
|
12188
|
+
/** Naming presentation pinned by the task that owns this handoff. */
|
|
12189
|
+
roleBasedNameOnlyMode?: boolean;
|
|
12144
12190
|
/**
|
|
12145
12191
|
* Queue lane for the dispatched turn. Task handoffs travel
|
|
12146
12192
|
* `'background'` so a typed chat always drains first; Night Shift also
|
|
@@ -12292,6 +12338,11 @@ declare class TaskRunner {
|
|
|
12292
12338
|
};
|
|
12293
12339
|
/** Run one serialized dispatch pass now, sharing the interval's overlap guard. */
|
|
12294
12340
|
wake(): Promise<void>;
|
|
12341
|
+
/**
|
|
12342
|
+
* Public test/operator entry point. Keep it serialized with the interval:
|
|
12343
|
+
* callers may drive a real, already-started service whose ticker is active.
|
|
12344
|
+
*/
|
|
12345
|
+
tick(): Promise<void>;
|
|
12295
12346
|
/**
|
|
12296
12347
|
* Scan every `active` task and enqueue a handoff for any whose
|
|
12297
12348
|
* current step has an effective gezel owner. Call on service boot and
|
|
@@ -12309,9 +12360,9 @@ declare class TaskRunner {
|
|
|
12309
12360
|
/**
|
|
12310
12361
|
* One dispatch pass. Walks pending in FIFO order; dispatches any
|
|
12311
12362
|
* whose target provider has a free slot; skips items for tasks
|
|
12312
|
-
* that are no longer active.
|
|
12363
|
+
* that are no longer active.
|
|
12313
12364
|
*/
|
|
12314
|
-
|
|
12365
|
+
private tickOnce;
|
|
12315
12366
|
private pruneActiveDispatches;
|
|
12316
12367
|
}
|
|
12317
12368
|
|
|
@@ -13374,6 +13425,8 @@ declare class ChatModelInstallRegistry<E extends ChatInstallEventBase, O> {
|
|
|
13374
13425
|
interface GgufInstallOpts {
|
|
13375
13426
|
skipSha: boolean;
|
|
13376
13427
|
includeMmproj: boolean;
|
|
13428
|
+
/** Whether a text-only chat install should also pull the default image reader. */
|
|
13429
|
+
installCompanion: boolean;
|
|
13377
13430
|
}
|
|
13378
13431
|
interface MlxInstallOpts {
|
|
13379
13432
|
skipSha: boolean;
|