Tickets: Kronk provider (75), v1.0.6 moves, Auto improve epic
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3b7d74c parent: 19e7162 modified
.tickets/epics.yaml +11 -1 | @@ -31,7 +31,7 @@ epics: | ||
| 31 | 31 | state: open |
| 32 | 32 | color: "#5319e7" |
| 33 | 33 | - title: ToDo |
| 34 | - state: open | |
| 34 | + state: closed | |
| 35 | 35 | color: "#c2e0c6" |
| 36 | 36 | - title: Questions |
| 37 | 37 | state: open |
| @@ -67,3 +67,13 @@ epics: | ||
| 67 | 67 | state: open |
| 68 | 68 | color: "#a2eeef" |
| 69 | 69 | description: MCP servers used by mini-me (connection, discovery, authentication) |
| 70 | + - title: Auto improve | |
| 71 | + state: open | |
| 72 | + color: "#d876e3" | |
| 73 | + description: mini-me improving its own source code (with Claude and local models) | |
| 74 | + - title: Search | |
| 75 | + state: open | |
| 76 | + color: "#5319e7" | |
| 77 | + - title: Agent Identity | |
| 78 | + state: open | |
| 79 | + color: "#006b75" | |
| @@ -31,7 +31,7 @@ epics: | |||
| 31 | state: open | 31 | state: open |
| 32 | color: "#5319e7" | 32 | color: "#5319e7" |
| 33 | - title: ToDo | 33 | - title: ToDo |
| 34 | - state: open | 34 | + state: closed |
| 35 | color: "#c2e0c6" | 35 | color: "#c2e0c6" |
| 36 | - title: Questions | 36 | - title: Questions |
| 37 | state: open | 37 | state: open |
| @@ -67,3 +67,13 @@ epics: | |||
| 67 | state: open | 67 | state: open |
| 68 | color: "#a2eeef" | 68 | color: "#a2eeef" |
| 69 | description: MCP servers used by mini-me (connection, discovery, authentication) | 69 | description: MCP servers used by mini-me (connection, discovery, authentication) |
| 70 | + - title: Auto improve | ||
| 71 | + state: open | ||
| 72 | + color: "#d876e3" | ||
| 73 | + description: mini-me improving its own source code (with Claude and local models) | ||
| 74 | + - title: Search | ||
| 75 | + state: open | ||
| 76 | + color: "#5319e7" | ||
| 77 | + - title: Agent Identity | ||
| 78 | + state: open | ||
| 79 | + color: "#006b75" | ||
modified
.tickets/issues/0019-try-to-auto-improve-the-source-code-of-mini-me-w.yaml +2 -2 | @@ -6,12 +6,12 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-09-17T13:22:40.786Z |
| 9 | -updatedAt: 2026-10-06T13:05:39.475Z | |
| 9 | +updatedAt: 2026-11-11T06:51:08.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - priority::low |
| 12 | 12 | - kind::chore |
| 13 | 13 | - enhancement |
| 14 | -epic: Debug | |
| 14 | +epic: Auto improve | |
| 15 | 15 | body: | |
| 16 | 16 | - Use the sessions' logs |
| 17 | 17 | - Create a Claude Skill for this |
| @@ -6,12 +6,12 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-09-17T13:22:40.786Z | 8 | createdAt: 2026-09-17T13:22:40.786Z |
| 9 | -updatedAt: 2026-10-06T13:05:39.475Z | 9 | +updatedAt: 2026-11-11T06:51:08.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - priority::low | 11 | - priority::low |
| 12 | - kind::chore | 12 | - kind::chore |
| 13 | - enhancement | 13 | - enhancement |
| 14 | -epic: Debug | 14 | +epic: Auto improve |
| 15 | body: | | 15 | body: | |
| 16 | - Use the sessions' logs | 16 | - Use the sessions' logs |
| 17 | - Create a Claude Skill for this | 17 | - Create a Claude Skill for this |
modified
.tickets/issues/0058-add-more-tools-to-the-sbx-template-redis-cli-to.yaml +2 -2 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 58 |
| 3 | 3 | title: Add more tools to the sbx template (redis, cli to parse source code ...) |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-01T04:39:22.452Z |
| 9 | -updatedAt: 2026-10-06T13:13:18.155Z | |
| 9 | +updatedAt: 2026-11-11T06:53:19.908Z | |
| 10 | 10 | labels: [] |
| 11 | 11 | epic: ToDo |
| 12 | 12 | body: "" |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 58 | 2 | id: 58 |
| 3 | title: Add more tools to the sbx template (redis, cli to parse source code ...) | 3 | title: Add more tools to the sbx template (redis, cli to parse source code ...) |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-01T04:39:22.452Z | 8 | createdAt: 2026-10-01T04:39:22.452Z |
| 9 | -updatedAt: 2026-10-06T13:13:18.155Z | 9 | +updatedAt: 2026-11-11T06:53:19.908Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | epic: ToDo | 11 | epic: ToDo |
| 12 | body: "" | 12 | body: "" |
renamed
.tickets/issues/0069-create-mini-me-skills-to-search-some-specific-kn.yaml +4 -3 | similarity index 77% | ||
| rename from .tickets/issues/0069-create-skills-to-search-some-specific-knowlege-o.yaml | ||
| rename to .tickets/issues/0069-create-mini-me-skills-to-search-some-specific-kn.yaml | ||
| @@ -1,14 +1,15 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 69 |
| 3 | -title: Create skills to search some specific knowlege on internet | |
| 3 | +title: Create mini me skills to search some specific knowlege on internet | |
| 4 | 4 | state: open |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-02T09:26:19.729Z |
| 9 | -updatedAt: 2026-10-20T07:43:15.320Z | |
| 9 | +updatedAt: 2026-11-11T06:55:34.384Z | |
| 10 | 10 | labels: [] |
| 11 | -epic: ToDo | |
| 11 | +milestone: v2.0.0 | |
| 12 | +epic: Search | |
| 12 | 13 | related: |
| 13 | 14 | - 104 |
| 14 | 15 | body: | |
| similarity index 77% | |||
| rename from .tickets/issues/0069-create-skills-to-search-some-specific-knowlege-o.yaml | |||
| rename to .tickets/issues/0069-create-mini-me-skills-to-search-some-specific-kn.yaml | |||
| @@ -1,14 +1,15 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 69 | 2 | id: 69 |
| 3 | -title: Create skills to search some specific knowlege on internet | 3 | +title: Create mini me skills to search some specific knowlege on internet |
| 4 | state: open | 4 | state: open |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-02T09:26:19.729Z | 8 | createdAt: 2026-10-02T09:26:19.729Z |
| 9 | -updatedAt: 2026-10-20T07:43:15.320Z | 9 | +updatedAt: 2026-11-11T06:55:34.384Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | -epic: ToDo | 11 | +milestone: v2.0.0 |
| 12 | +epic: Search | ||
| 12 | related: | 13 | related: |
| 13 | - 104 | 14 | - 104 |
| 14 | body: | | 15 | body: | |
modified
.tickets/issues/0070-add-github-gitlab-other-identity-to-the-mini-me.yaml +2 -2 | @@ -6,9 +6,9 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-02T14:22:29.427Z |
| 9 | -updatedAt: 2026-10-06T13:11:38.195Z | |
| 9 | +updatedAt: 2026-11-11T06:57:56.200Z | |
| 10 | 10 | labels: [] |
| 11 | -epic: Questions | |
| 11 | +epic: Agent Identity | |
| 12 | 12 | body: "" |
| 13 | 13 | tasks: [] |
| 14 | 14 | comments: [] |
| @@ -6,9 +6,9 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-02T14:22:29.427Z | 8 | createdAt: 2026-10-02T14:22:29.427Z |
| 9 | -updatedAt: 2026-10-06T13:11:38.195Z | 9 | +updatedAt: 2026-11-11T06:57:56.200Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | -epic: Questions | 11 | +epic: Agent Identity |
| 12 | body: "" | 12 | body: "" |
| 13 | tasks: [] | 13 | tasks: [] |
| 14 | comments: [] | 14 | comments: [] |
modified
.tickets/issues/0075-add-kronk-provider.yaml +325 -7 | @@ -1,15 +1,333 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 75 |
| 3 | -title: Add Gronk provider | |
| 3 | +title: Add Kronk provider | |
| 4 | 4 | state: open |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-06T03:58:37.611Z |
| 9 | -updatedAt: 2026-11-01T21:05:08.000Z | |
| 10 | -labels: [] | |
| 11 | -milestone: v2.0.0 | |
| 9 | +updatedAt: 2026-11-11T07:00:31.000Z | |
| 10 | +labels: | |
| 11 | + - kind::feature | |
| 12 | + - priority::medium | |
| 13 | +milestone: v1.0.6 | |
| 12 | 14 | epic: Providers (LLM Engine) |
| 13 | -body: "" | |
| 14 | -tasks: [] | |
| 15 | -comments: [] | |
| 15 | +related: | |
| 16 | + - 62 | |
| 17 | +body: | | |
| 18 | + ## Context | |
| 19 | + | |
| 20 | + [Kronk](https://www.kronkai.com/) ([ardanlabs/kronk](https://github.com/ardanlabs/kronk)) | |
| 21 | + is a local inference server written in Go by Ardan Labs. It embeds llama.cpp | |
| 22 | + through yzma, without a llama-server process. `kronk server start` serves an | |
| 23 | + OpenAI-compatible API (plus Anthropic `/v1/messages`) on `127.0.0.1:11435`. | |
| 24 | + | |
| 25 | + Add it as an mm provider, `provider: kronk`. It is a new entry of the | |
| 26 | + `openaiCompat` registry (`internal/engine/openai_compat.go`), like dmr, | |
| 27 | + llamacpp, llmman and ollama: no new wire protocol. Only the | |
| 28 | + server-specific parts are new: the probe, pull and unload. | |
| 29 | + | |
| 30 | + ## What the Kronk manual says (to be measured, not trusted) | |
| 31 | + | |
| 32 | + Sources: `.manual/chapter-08-model-server.md`, `chapter-09-api-endpoints.md`, | |
| 33 | + `chapter-10-request-parameters.md`, `chapter-12-security-authentication.md`, | |
| 34 | + `chapter-14-client-integration.md` in the Kronk repository (read on 2026-11-11, Kronk 1.33.2). | |
| 35 | + | |
| 36 | + - **Install**: `brew install ardanlabs/kronk/kronk`, or | |
| 37 | + `go install github.com/ardanlabs/kronk/cmd/kronk@latest`. | |
| 38 | + - **Start**: `kronk server start`, or `--detach` (log in `~/.kronk/kronk.log`). | |
| 39 | + - **Address**: `127.0.0.1:11435`, loopback only. `--api-host` or | |
| 40 | + `KRONK_WEB_API_HOST` changes it. Note the port is 11435, next to Ollama's 11434. | |
| 41 | + - **Base URL for mm**: `http://127.0.0.1:11435/v1`. | |
| 42 | + - **Endpoints**: | |
| 43 | + - `POST /v1/chat/completions`: SSE streaming, `tools` and `tool_choice`, | |
| 44 | + streamed `tool_calls`, `stream_options.include_usage`; | |
| 45 | + - `GET /v1/models`: installed models, not only the loaded ones; | |
| 46 | + - `GET /v1/models/{model}`: 404 when absent; | |
| 47 | + - `/v1/embeddings`, `/v1/rerank`, `/v1/tokenize`, `/v1/decide`. | |
| 48 | + - **Model ids**: `provider/modelID`, e.g. `unsloth/Qwen3-0.6B-Q8_0`. `owner/repo:quant` | |
| 49 | + and `owner/repo/file.gguf` pin a repository or a file. | |
| 50 | + - **Pull**: | |
| 51 | + - CLI: `kronk model pull unsloth/Qwen3-0.6B-Q8_0`; | |
| 52 | + - API: `POST /v1/kronk/models/pull`, which streams progress. | |
| 53 | + - **Unload**: `POST /v1/kronk/models/unload`. | |
| 54 | + - **Loaded models**: `GET /v1/kronk/models/ps`. | |
| 55 | + - **Model details and configuration**: `GET /v1/kronk/models/{model}`, which may | |
| 56 | + give the context window. The window is also set per model in | |
| 57 | + `~/.kronk/models/model_config.yaml` (`context-window`). | |
| 58 | + - **Reasoning**: | |
| 59 | + - streamed as `reasoning_content`, which mm already reads; | |
| 60 | + - switched off with the top-level `enable_thinking: false`, | |
| 61 | + `reasoning_effort`, or `chat_template_kwargs`, which is passed through | |
| 62 | + to the template; | |
| 63 | + - Kronk does not translate between these three switches. | |
| 64 | + - **Auth**: | |
| 65 | + - the default mode `open` checks no key, and any non-empty key works; | |
| 66 | + - the modes `authenticated` and `full-protected` require | |
| 67 | + `Authorization: Bearer <token>`; | |
| 68 | + - the manual and its client examples use the variable `KRONK_TOKEN`. | |
| 69 | + - **Errors**: | |
| 70 | + - before the stream: JSON `{"code","message"}` with an HTTP status; | |
| 71 | + - after SSE headers: reported inside the stream, with a 200 status. | |
| 72 | + - **Not documented**: | |
| 73 | + - whether a model that is installed but not loaded is loaded on the first request; | |
| 74 | + - whether there is a llama.cpp-style `prompt_progress` (Kronk is not llama-server). | |
| 75 | + | |
| 76 | + ## Scope | |
| 77 | + | |
| 78 | + - Registry entry `kronk`: | |
| 79 | + - `baseURL` `http://127.0.0.1:11435/v1`; | |
| 80 | + - fallback `http://host.docker.internal:11435/v1`; | |
| 81 | + - `apiKeyEnv: KRONK_TOKEN`, not required, with a dummy key. | |
| 82 | + - `startHint`: `start it: kronk server start`. `notFoundHint`: `kronk model pull %s`. | |
| 83 | + - Probe: | |
| 84 | + - reachability; | |
| 85 | + - model present in `/v1/models`; | |
| 86 | + - context window from `/v1/kronk/models/{model}` if it gives one. | |
| 87 | + - `thinkingOff`: the variant that Kronk actually obeys (measure it). | |
| 88 | + - `pull` (`autoPull`) through `POST /v1/kronk/models/pull`. | |
| 89 | + - `unload` through `POST /v1/kronk/models/unload`. | |
| 90 | + - `progress` stays false unless a measurement shows `prompt_progress`. | |
| 91 | + - Explain: | |
| 92 | + - 401 or 403 names `KRONK_TOKEN`; | |
| 93 | + - 404 says `kronk model pull`; | |
| 94 | + - a connection refused gives the start hint. | |
| 95 | + - `mm init`: | |
| 96 | + - the provider is offered with its default URL; | |
| 97 | + - presets if needed (`internal/agentinit/presets.yaml`). | |
| 98 | + - Demo config in `demos/kronk/` with a small model that calls tools well. | |
| 99 | + | |
| 100 | + Out of scope: the Anthropic `/v1/messages` route, `/v1/responses`, and Kronk's | |
| 101 | + `/v1/decide`. Kronk's `/v1/decide` could later back mm's deciders, which would | |
| 102 | + be a separate ticket. | |
| 103 | + | |
| 104 | + ## Sandbox note | |
| 105 | + | |
| 106 | + Kronk binds to loopback by default. From an sbx sandbox, the fallback | |
| 107 | + `host.docker.internal:11435` only answers if the host started | |
| 108 | + `kronk server start --api-host 0.0.0.0:11435`, and the policy allows | |
| 109 | + `localhost:11435`. The how-to must say so. | |
| 110 | + | |
| 111 | + ## Acceptance criteria | |
| 112 | + | |
| 113 | + - `provider: kronk` with no `baseUrl` reaches a local `kronk server start`, and | |
| 114 | + a turn with a tool call works end to end. | |
| 115 | + - A model not installed is pulled when `autoPull` is on. Otherwise, the | |
| 116 | + warning names `kronk model pull`. | |
| 117 | + - The context window shown at start-up is correct, or labelled as unknown. | |
| 118 | + - Compaction summary runs with thinking off. | |
| 119 | + - Unit tests: a Resolve row, the probe against a fake server, pull, unload, Explain. | |
| 120 | + - Docs EN and FR: a how-to, the provider reference row, `configuration.md`, | |
| 121 | + the indexes, and the provider README / package diagram if touched. | |
| 122 | +tasks: | |
| 123 | + - id: 1 | |
| 124 | + title: "Measure Kronk: /v1/models, model details (window), reasoning field and thinking switch, prompt_progress, 404/401 shapes, load on first request" | |
| 125 | + state: closed | |
| 126 | + priority: high | |
| 127 | + author: | |
| 128 | + name: k33g | |
| 129 | + email: ph.charriere@gmail.com | |
| 130 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 131 | + updatedAt: 2026-11-11T06:46:21.000Z | |
| 132 | + closedAt: 2026-11-11T06:46:21.000Z | |
| 133 | + - id: 2 | |
| 134 | + title: Registry entry kronk (URL, fallback, KRONK_TOKEN, hints, thinkingOff) | |
| 135 | + state: closed | |
| 136 | + priority: high | |
| 137 | + author: | |
| 138 | + name: k33g | |
| 139 | + email: ph.charriere@gmail.com | |
| 140 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 141 | + updatedAt: 2026-11-11T07:00:31.000Z | |
| 142 | + closedAt: 2026-11-11T07:00:31.000Z | |
| 143 | + - id: 3 | |
| 144 | + title: probeKronk (reachability, model installed, context window) | |
| 145 | + state: closed | |
| 146 | + priority: medium | |
| 147 | + author: | |
| 148 | + name: k33g | |
| 149 | + email: ph.charriere@gmail.com | |
| 150 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 151 | + updatedAt: 2026-11-11T07:00:31.000Z | |
| 152 | + closedAt: 2026-11-11T07:00:31.000Z | |
| 153 | + - id: 4 | |
| 154 | + title: pullKronk (POST /v1/kronk/models/pull, streamed progress) and unloadKronk (POST /v1/kronk/models/unload) | |
| 155 | + state: closed | |
| 156 | + priority: medium | |
| 157 | + author: | |
| 158 | + name: k33g | |
| 159 | + email: ph.charriere@gmail.com | |
| 160 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 161 | + updatedAt: 2026-11-11T07:00:31.000Z | |
| 162 | + closedAt: 2026-11-11T07:00:31.000Z | |
| 163 | + - id: 5 | |
| 164 | + title: "Tests: Resolve row, probe, pull, unload, Explain against a fake server" | |
| 165 | + state: closed | |
| 166 | + priority: high | |
| 167 | + author: | |
| 168 | + name: k33g | |
| 169 | + email: ph.charriere@gmail.com | |
| 170 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 171 | + updatedAt: 2026-11-11T07:00:31.000Z | |
| 172 | + closedAt: 2026-11-11T07:00:31.000Z | |
| 173 | + - id: 6 | |
| 174 | + title: mm init support (provider list, default URL comment, presets if needed) | |
| 175 | + state: closed | |
| 176 | + priority: low | |
| 177 | + author: | |
| 178 | + name: k33g | |
| 179 | + email: ph.charriere@gmail.com | |
| 180 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 181 | + updatedAt: 2026-11-11T07:00:31.000Z | |
| 182 | + closedAt: 2026-11-11T07:00:31.000Z | |
| 183 | + - id: 7 | |
| 184 | + title: Demo config demos/kronk/ with a small tool-calling model | |
| 185 | + state: closed | |
| 186 | + priority: low | |
| 187 | + author: | |
| 188 | + name: k33g | |
| 189 | + email: ph.charriere@gmail.com | |
| 190 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 191 | + updatedAt: 2026-11-11T07:00:31.000Z | |
| 192 | + closedAt: 2026-11-11T07:00:31.000Z | |
| 193 | + - id: 8 | |
| 194 | + title: Docs EN+FR (how-to incl. sandbox --api-host note, reference, configuration, indexes, diagram) | |
| 195 | + state: closed | |
| 196 | + priority: medium | |
| 197 | + author: | |
| 198 | + name: k33g | |
| 199 | + email: ph.charriere@gmail.com | |
| 200 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 201 | + updatedAt: 2026-11-11T07:00:31.000Z | |
| 202 | + closedAt: 2026-11-11T07:00:31.000Z | |
| 203 | + - id: 9 | |
| 204 | + title: Live check against Kronk on the Mac (tool call, window, compaction, pull, unload) | |
| 205 | + state: open | |
| 206 | + priority: high | |
| 207 | + author: | |
| 208 | + name: k33g | |
| 209 | + email: ph.charriere@gmail.com | |
| 210 | + createdAt: 2026-11-11T06:24:34.000Z | |
| 211 | +comments: | |
| 212 | + - id: 1 | |
| 213 | + author: | |
| 214 | + name: k33g | |
| 215 | + email: ph.charriere@gmail.com | |
| 216 | + createdAt: 2026-11-11T06:46:21.000Z | |
| 217 | + body: | | |
| 218 | + ## Measured on the Mac's Kronk from the sandbox (2026-11-11) | |
| 219 | + | |
| 220 | + Model: `mradermacher/Qwopus3.5-4B-Coder.Q8_0`. Reached at | |
| 221 | + `http://host.docker.internal:11435`; `127.0.0.1:11435` does not answer from | |
| 222 | + the sandbox, so the fallback is needed. | |
| 223 | + | |
| 224 | + **Where the manual is wrong or silent** | |
| 225 | + | |
| 226 | + - **Error shape is OpenAI's, not the manual's**: `{"error":{"message","type","code"}}`. | |
| 227 | + - Unknown model at chat: HTTP 404, `type: not_found_error`, `code: not_found`, | |
| 228 | + message `... model not found: "foo/bar-Q4"`. | |
| 229 | + - Id without a provider (`nope`): HTTP 400, `invalid_argument`, | |
| 230 | + `must use provider/modelID or provider/modelID/profile`. | |
| 231 | + - **Model ids contain a `/`, so the path must be encoded.** | |
| 232 | + - `GET /v1/models/{id}` and `GET /v1/kronk/models/{id}` need `%2F` | |
| 233 | + (`url.PathEscape`). A raw `/` gives 404 or 400. | |
| 234 | + - **`/v1/models` also lists profiles**: `mradermacher/Qwopus3.5-4B-Coder.Q8_0/AGENT`. | |
| 235 | + - **A model is loaded on the first request.** After an unload, the chat request | |
| 236 | + answered 200 in 2.3 s. No pull is needed when the model is installed. | |
| 237 | + | |
| 238 | + **Measured values for the implementation** | |
| 239 | + | |
| 240 | + - **Context window**: `GET /v1/kronk/models/<encoded id>` gives | |
| 241 | + `model_config.context-window` (131072 here). | |
| 242 | + - GGUF metadata says `qwen35.context_length` 262144; the configured | |
| 243 | + value is the one served. | |
| 244 | + - **Loaded models**: `GET /v1/kronk/models/ps`. | |
| 245 | + - Returns `[{id, status:"loaded", size, vram_total, kv_cache, ...}]`. | |
| 246 | + - Returns `[]` when nothing is loaded. | |
| 247 | + - **Reasoning**: | |
| 248 | + - streamed as `delta.reasoning_content`; | |
| 249 | + - `usage.completion_tokens_details.reasoning_tokens` is filled. | |
| 250 | + - **Thinking off**: | |
| 251 | + - `chat_template_kwargs: {enable_thinking: false}` works, so the | |
| 252 | + existing `thinkingOffTemplate` fits; | |
| 253 | + - top-level `enable_thinking: false` works too; | |
| 254 | + - `reasoning_effort: "none"` is IGNORED (the model still reasons). | |
| 255 | + - **`return_progress`: no `prompt_progress` chunk**, so `progress: false`. | |
| 256 | + - **`stream_options.include_usage`** works: a last chunk with `choices: []` | |
| 257 | + and the usage. | |
| 258 | + - Extra fields in the usage: `tokens_per_second`, | |
| 259 | + `time_to_first_token_ms`, `draft_*` (MTP speculative decoding). | |
| 260 | + - **Streamed tool call** is standard OpenAI: | |
| 261 | + - the first delta carries `id`, `name` and `arguments: ""`; | |
| 262 | + - the next delta carries the arguments; | |
| 263 | + - the last has `finish_reason: "tool_calls"`. | |
| 264 | + - **Pull**: `POST /v1/kronk/models/pull {"model_url": "<id>"}`. | |
| 265 | + - The server answers HTTP 200 with SSE `data: {status, progress?, meta?}`. | |
| 266 | + - `progress` = `{src, current_bytes, total_bytes, mb_per_sec, complete}`. | |
| 267 | + - **Success** = the last record has `status: "downloaded"` and `downloaded: true`. | |
| 268 | + - **Failure** = the last record is only an error `status` (still HTTP 200), | |
| 269 | + e.g. `download: resolve "nobody/x": ... not found at provider "nobody"`. | |
| 270 | + - An already-installed model answers `-> already downloaded`, then `downloaded`. | |
| 271 | + - **Unload**: `POST /v1/kronk/models/unload {"id": "<id>"}`. | |
| 272 | + - Success: `{"status":"unloaded","id":...}`. | |
| 273 | + - Not loaded: HTTP 404, `not_found`. | |
| 274 | + - Streams still running: `failed_precondition`. | |
| 275 | + | |
| 276 | + **Not measured**: the 401 and 403 shapes, which need an `authenticated` | |
| 277 | + mode on the server. | |
| 278 | + | |
| 279 | + Source for the pull and unload request types: | |
| 280 | + `cmd/server/app/domain/toolapp/{model.go,models.go}` in ardanlabs/kronk. | |
| 281 | + - id: 2 | |
| 282 | + author: | |
| 283 | + name: k33g | |
| 284 | + email: ph.charriere@gmail.com | |
| 285 | + createdAt: 2026-11-11T07:00:31.000Z | |
| 286 | + body: | | |
| 287 | + ## Implemented on branch feature/kronk-provider | |
| 288 | + | |
| 289 | + - `internal/engine/kronk.go`: | |
| 290 | + - `probeKronk`: the key is sent; a 401 or 403 is a warning naming | |
| 291 | + `$KRONK_TOKEN`; a missing model warns `kronk model pull`; the window | |
| 292 | + comes from `/v1/kronk/models/<escaped id>`; | |
| 293 | + - `pullKronk` and `readKronkPullStream`; | |
| 294 | + - `unloadKronk`: a 404 means "nothing to unload". | |
| 295 | + - The `kronk` registry entry is in `openai_compat.go`: | |
| 296 | + - `thinkingOffTemplate`; | |
| 297 | + - `progress: false`. | |
| 298 | + - `mm init`: | |
| 299 | + - `kronk` is in the list of providers and in the local servers it probes; | |
| 300 | + - `kronkFacts` reads `/v1/kronk/models/<id>`: the metadata as strings, | |
| 301 | + and `model_config.context-window` (the trained length when it is missing). | |
| 302 | + - Tests: | |
| 303 | + - `internal/engine/kronk_test.go`, against a fake Kronk replaying the | |
| 304 | + measured shapes; | |
| 305 | + - Resolve rows and DefaultURLs; | |
| 306 | + - `TestKronkFacts`. | |
| 307 | + - `go test ./...` passes. | |
| 308 | + - Demo: `demos/kronk/agent.kronk.yaml` and `README.en.md` / `README.fr.md`. | |
| 309 | + - Docs EN and FR: | |
| 310 | + - a new page, how-to `run-with-kronk`; | |
| 311 | + - updated: configuration (defaults, autoPull, unloadModels, sampling, | |
| 312 | + summaryMaxTokens, firstTokenTimeout), cli, tools (`unload_model`), | |
| 313 | + providers, mm-init, thinking-models, turn-reasoning-off, | |
| 314 | + unload-a-model, run-in-a-docker-sandbox, the indexes. | |
| 315 | + | |
| 316 | + ## Checked live from the sandbox (Kronk on the Mac) | |
| 317 | + | |
| 318 | + - The banner shows `ctx: 131072 (/v1/kronk/models)`. | |
| 319 | + - A turn with bash calls works. | |
| 320 | + - `/unload` works twice: the second call answers "not loaded". | |
| 321 | + - `mm init --provider kronk --check` works. | |
| 322 | + | |
| 323 | + ## Still to check (task 9, on the Mac) | |
| 324 | + | |
| 325 | + - A real download with `autoPull: true`. | |
| 326 | + - A real compaction. | |
| 327 | + - A protected Kronk (`KRONK_TOKEN`). | |
| 328 | + | |
| 329 | + The quality gate (qlty) is not available in the sandbox. | |
| 330 | + | |
| 331 | + Seen with Qwopus: a turn ended with the answer only in the reasoning | |
| 332 | + (`⚠ empty answer`). That comes from the model, not from the provider. | |
| 333 | + | |
| @@ -1,15 +1,333 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 75 | 2 | id: 75 |
| 3 | -title: Add Gronk provider | 3 | +title: Add Kronk provider |
| 4 | state: open | 4 | state: open |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-06T03:58:37.611Z | 8 | createdAt: 2026-10-06T03:58:37.611Z |
| 9 | -updatedAt: 2026-11-01T21:05:08.000Z | 9 | +updatedAt: 2026-11-11T07:00:31.000Z |
| 10 | -labels: [] | 10 | +labels: |
| 11 | -milestone: v2.0.0 | 11 | + - kind::feature |
| 12 | + - priority::medium | ||
| 13 | +milestone: v1.0.6 | ||
| 12 | epic: Providers (LLM Engine) | 14 | epic: Providers (LLM Engine) |
| 13 | -body: "" | 15 | +related: |
| 14 | -tasks: [] | 16 | + - 62 |
| 15 | -comments: [] | 17 | +body: | |
| 18 | + ## Context | ||
| 19 | + | ||
| 20 | + [Kronk](https://www.kronkai.com/) ([ardanlabs/kronk](https://github.com/ardanlabs/kronk)) | ||
| 21 | + is a local inference server written in Go by Ardan Labs. It embeds llama.cpp | ||
| 22 | + through yzma, without a llama-server process. `kronk server start` serves an | ||
| 23 | + OpenAI-compatible API (plus Anthropic `/v1/messages`) on `127.0.0.1:11435`. | ||
| 24 | + | ||
| 25 | + Add it as an mm provider, `provider: kronk`. It is a new entry of the | ||
| 26 | + `openaiCompat` registry (`internal/engine/openai_compat.go`), like dmr, | ||
| 27 | + llamacpp, llmman and ollama: no new wire protocol. Only the | ||
| 28 | + server-specific parts are new: the probe, pull and unload. | ||
| 29 | + | ||
| 30 | + ## What the Kronk manual says (to be measured, not trusted) | ||
| 31 | + | ||
| 32 | + Sources: `.manual/chapter-08-model-server.md`, `chapter-09-api-endpoints.md`, | ||
| 33 | + `chapter-10-request-parameters.md`, `chapter-12-security-authentication.md`, | ||
| 34 | + `chapter-14-client-integration.md` in the Kronk repository (read on 2026-11-11, Kronk 1.33.2). | ||
| 35 | + | ||
| 36 | + - **Install**: `brew install ardanlabs/kronk/kronk`, or | ||
| 37 | + `go install github.com/ardanlabs/kronk/cmd/kronk@latest`. | ||
| 38 | + - **Start**: `kronk server start`, or `--detach` (log in `~/.kronk/kronk.log`). | ||
| 39 | + - **Address**: `127.0.0.1:11435`, loopback only. `--api-host` or | ||
| 40 | + `KRONK_WEB_API_HOST` changes it. Note the port is 11435, next to Ollama's 11434. | ||
| 41 | + - **Base URL for mm**: `http://127.0.0.1:11435/v1`. | ||
| 42 | + - **Endpoints**: | ||
| 43 | + - `POST /v1/chat/completions`: SSE streaming, `tools` and `tool_choice`, | ||
| 44 | + streamed `tool_calls`, `stream_options.include_usage`; | ||
| 45 | + - `GET /v1/models`: installed models, not only the loaded ones; | ||
| 46 | + - `GET /v1/models/{model}`: 404 when absent; | ||
| 47 | + - `/v1/embeddings`, `/v1/rerank`, `/v1/tokenize`, `/v1/decide`. | ||
| 48 | + - **Model ids**: `provider/modelID`, e.g. `unsloth/Qwen3-0.6B-Q8_0`. `owner/repo:quant` | ||
| 49 | + and `owner/repo/file.gguf` pin a repository or a file. | ||
| 50 | + - **Pull**: | ||
| 51 | + - CLI: `kronk model pull unsloth/Qwen3-0.6B-Q8_0`; | ||
| 52 | + - API: `POST /v1/kronk/models/pull`, which streams progress. | ||
| 53 | + - **Unload**: `POST /v1/kronk/models/unload`. | ||
| 54 | + - **Loaded models**: `GET /v1/kronk/models/ps`. | ||
| 55 | + - **Model details and configuration**: `GET /v1/kronk/models/{model}`, which may | ||
| 56 | + give the context window. The window is also set per model in | ||
| 57 | + `~/.kronk/models/model_config.yaml` (`context-window`). | ||
| 58 | + - **Reasoning**: | ||
| 59 | + - streamed as `reasoning_content`, which mm already reads; | ||
| 60 | + - switched off with the top-level `enable_thinking: false`, | ||
| 61 | + `reasoning_effort`, or `chat_template_kwargs`, which is passed through | ||
| 62 | + to the template; | ||
| 63 | + - Kronk does not translate between these three switches. | ||
| 64 | + - **Auth**: | ||
| 65 | + - the default mode `open` checks no key, and any non-empty key works; | ||
| 66 | + - the modes `authenticated` and `full-protected` require | ||
| 67 | + `Authorization: Bearer <token>`; | ||
| 68 | + - the manual and its client examples use the variable `KRONK_TOKEN`. | ||
| 69 | + - **Errors**: | ||
| 70 | + - before the stream: JSON `{"code","message"}` with an HTTP status; | ||
| 71 | + - after SSE headers: reported inside the stream, with a 200 status. | ||
| 72 | + - **Not documented**: | ||
| 73 | + - whether a model that is installed but not loaded is loaded on the first request; | ||
| 74 | + - whether there is a llama.cpp-style `prompt_progress` (Kronk is not llama-server). | ||
| 75 | + | ||
| 76 | + ## Scope | ||
| 77 | + | ||
| 78 | + - Registry entry `kronk`: | ||
| 79 | + - `baseURL` `http://127.0.0.1:11435/v1`; | ||
| 80 | + - fallback `http://host.docker.internal:11435/v1`; | ||
| 81 | + - `apiKeyEnv: KRONK_TOKEN`, not required, with a dummy key. | ||
| 82 | + - `startHint`: `start it: kronk server start`. `notFoundHint`: `kronk model pull %s`. | ||
| 83 | + - Probe: | ||
| 84 | + - reachability; | ||
| 85 | + - model present in `/v1/models`; | ||
| 86 | + - context window from `/v1/kronk/models/{model}` if it gives one. | ||
| 87 | + - `thinkingOff`: the variant that Kronk actually obeys (measure it). | ||
| 88 | + - `pull` (`autoPull`) through `POST /v1/kronk/models/pull`. | ||
| 89 | + - `unload` through `POST /v1/kronk/models/unload`. | ||
| 90 | + - `progress` stays false unless a measurement shows `prompt_progress`. | ||
| 91 | + - Explain: | ||
| 92 | + - 401 or 403 names `KRONK_TOKEN`; | ||
| 93 | + - 404 says `kronk model pull`; | ||
| 94 | + - a connection refused gives the start hint. | ||
| 95 | + - `mm init`: | ||
| 96 | + - the provider is offered with its default URL; | ||
| 97 | + - presets if needed (`internal/agentinit/presets.yaml`). | ||
| 98 | + - Demo config in `demos/kronk/` with a small model that calls tools well. | ||
| 99 | + | ||
| 100 | + Out of scope: the Anthropic `/v1/messages` route, `/v1/responses`, and Kronk's | ||
| 101 | + `/v1/decide`. Kronk's `/v1/decide` could later back mm's deciders, which would | ||
| 102 | + be a separate ticket. | ||
| 103 | + | ||
| 104 | + ## Sandbox note | ||
| 105 | + | ||
| 106 | + Kronk binds to loopback by default. From an sbx sandbox, the fallback | ||
| 107 | + `host.docker.internal:11435` only answers if the host started | ||
| 108 | + `kronk server start --api-host 0.0.0.0:11435`, and the policy allows | ||
| 109 | + `localhost:11435`. The how-to must say so. | ||
| 110 | + | ||
| 111 | + ## Acceptance criteria | ||
| 112 | + | ||
| 113 | + - `provider: kronk` with no `baseUrl` reaches a local `kronk server start`, and | ||
| 114 | + a turn with a tool call works end to end. | ||
| 115 | + - A model not installed is pulled when `autoPull` is on. Otherwise, the | ||
| 116 | + warning names `kronk model pull`. | ||
| 117 | + - The context window shown at start-up is correct, or labelled as unknown. | ||
| 118 | + - Compaction summary runs with thinking off. | ||
| 119 | + - Unit tests: a Resolve row, the probe against a fake server, pull, unload, Explain. | ||
| 120 | + - Docs EN and FR: a how-to, the provider reference row, `configuration.md`, | ||
| 121 | + the indexes, and the provider README / package diagram if touched. | ||
| 122 | +tasks: | ||
| 123 | + - id: 1 | ||
| 124 | + title: "Measure Kronk: /v1/models, model details (window), reasoning field and thinking switch, prompt_progress, 404/401 shapes, load on first request" | ||
| 125 | + state: closed | ||
| 126 | + priority: high | ||
| 127 | + author: | ||
| 128 | + name: k33g | ||
| 129 | + email: ph.charriere@gmail.com | ||
| 130 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 131 | + updatedAt: 2026-11-11T06:46:21.000Z | ||
| 132 | + closedAt: 2026-11-11T06:46:21.000Z | ||
| 133 | + - id: 2 | ||
| 134 | + title: Registry entry kronk (URL, fallback, KRONK_TOKEN, hints, thinkingOff) | ||
| 135 | + state: closed | ||
| 136 | + priority: high | ||
| 137 | + author: | ||
| 138 | + name: k33g | ||
| 139 | + email: ph.charriere@gmail.com | ||
| 140 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 141 | + updatedAt: 2026-11-11T07:00:31.000Z | ||
| 142 | + closedAt: 2026-11-11T07:00:31.000Z | ||
| 143 | + - id: 3 | ||
| 144 | + title: probeKronk (reachability, model installed, context window) | ||
| 145 | + state: closed | ||
| 146 | + priority: medium | ||
| 147 | + author: | ||
| 148 | + name: k33g | ||
| 149 | + email: ph.charriere@gmail.com | ||
| 150 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 151 | + updatedAt: 2026-11-11T07:00:31.000Z | ||
| 152 | + closedAt: 2026-11-11T07:00:31.000Z | ||
| 153 | + - id: 4 | ||
| 154 | + title: pullKronk (POST /v1/kronk/models/pull, streamed progress) and unloadKronk (POST /v1/kronk/models/unload) | ||
| 155 | + state: closed | ||
| 156 | + priority: medium | ||
| 157 | + author: | ||
| 158 | + name: k33g | ||
| 159 | + email: ph.charriere@gmail.com | ||
| 160 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 161 | + updatedAt: 2026-11-11T07:00:31.000Z | ||
| 162 | + closedAt: 2026-11-11T07:00:31.000Z | ||
| 163 | + - id: 5 | ||
| 164 | + title: "Tests: Resolve row, probe, pull, unload, Explain against a fake server" | ||
| 165 | + state: closed | ||
| 166 | + priority: high | ||
| 167 | + author: | ||
| 168 | + name: k33g | ||
| 169 | + email: ph.charriere@gmail.com | ||
| 170 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 171 | + updatedAt: 2026-11-11T07:00:31.000Z | ||
| 172 | + closedAt: 2026-11-11T07:00:31.000Z | ||
| 173 | + - id: 6 | ||
| 174 | + title: mm init support (provider list, default URL comment, presets if needed) | ||
| 175 | + state: closed | ||
| 176 | + priority: low | ||
| 177 | + author: | ||
| 178 | + name: k33g | ||
| 179 | + email: ph.charriere@gmail.com | ||
| 180 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 181 | + updatedAt: 2026-11-11T07:00:31.000Z | ||
| 182 | + closedAt: 2026-11-11T07:00:31.000Z | ||
| 183 | + - id: 7 | ||
| 184 | + title: Demo config demos/kronk/ with a small tool-calling model | ||
| 185 | + state: closed | ||
| 186 | + priority: low | ||
| 187 | + author: | ||
| 188 | + name: k33g | ||
| 189 | + email: ph.charriere@gmail.com | ||
| 190 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 191 | + updatedAt: 2026-11-11T07:00:31.000Z | ||
| 192 | + closedAt: 2026-11-11T07:00:31.000Z | ||
| 193 | + - id: 8 | ||
| 194 | + title: Docs EN+FR (how-to incl. sandbox --api-host note, reference, configuration, indexes, diagram) | ||
| 195 | + state: closed | ||
| 196 | + priority: medium | ||
| 197 | + author: | ||
| 198 | + name: k33g | ||
| 199 | + email: ph.charriere@gmail.com | ||
| 200 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 201 | + updatedAt: 2026-11-11T07:00:31.000Z | ||
| 202 | + closedAt: 2026-11-11T07:00:31.000Z | ||
| 203 | + - id: 9 | ||
| 204 | + title: Live check against Kronk on the Mac (tool call, window, compaction, pull, unload) | ||
| 205 | + state: open | ||
| 206 | + priority: high | ||
| 207 | + author: | ||
| 208 | + name: k33g | ||
| 209 | + email: ph.charriere@gmail.com | ||
| 210 | + createdAt: 2026-11-11T06:24:34.000Z | ||
| 211 | +comments: | ||
| 212 | + - id: 1 | ||
| 213 | + author: | ||
| 214 | + name: k33g | ||
| 215 | + email: ph.charriere@gmail.com | ||
| 216 | + createdAt: 2026-11-11T06:46:21.000Z | ||
| 217 | + body: | | ||
| 218 | + ## Measured on the Mac's Kronk from the sandbox (2026-11-11) | ||
| 219 | + | ||
| 220 | + Model: `mradermacher/Qwopus3.5-4B-Coder.Q8_0`. Reached at | ||
| 221 | + `http://host.docker.internal:11435`; `127.0.0.1:11435` does not answer from | ||
| 222 | + the sandbox, so the fallback is needed. | ||
| 223 | + | ||
| 224 | + **Where the manual is wrong or silent** | ||
| 225 | + | ||
| 226 | + - **Error shape is OpenAI's, not the manual's**: `{"error":{"message","type","code"}}`. | ||
| 227 | + - Unknown model at chat: HTTP 404, `type: not_found_error`, `code: not_found`, | ||
| 228 | + message `... model not found: "foo/bar-Q4"`. | ||
| 229 | + - Id without a provider (`nope`): HTTP 400, `invalid_argument`, | ||
| 230 | + `must use provider/modelID or provider/modelID/profile`. | ||
| 231 | + - **Model ids contain a `/`, so the path must be encoded.** | ||
| 232 | + - `GET /v1/models/{id}` and `GET /v1/kronk/models/{id}` need `%2F` | ||
| 233 | + (`url.PathEscape`). A raw `/` gives 404 or 400. | ||
| 234 | + - **`/v1/models` also lists profiles**: `mradermacher/Qwopus3.5-4B-Coder.Q8_0/AGENT`. | ||
| 235 | + - **A model is loaded on the first request.** After an unload, the chat request | ||
| 236 | + answered 200 in 2.3 s. No pull is needed when the model is installed. | ||
| 237 | + | ||
| 238 | + **Measured values for the implementation** | ||
| 239 | + | ||
| 240 | + - **Context window**: `GET /v1/kronk/models/<encoded id>` gives | ||
| 241 | + `model_config.context-window` (131072 here). | ||
| 242 | + - GGUF metadata says `qwen35.context_length` 262144; the configured | ||
| 243 | + value is the one served. | ||
| 244 | + - **Loaded models**: `GET /v1/kronk/models/ps`. | ||
| 245 | + - Returns `[{id, status:"loaded", size, vram_total, kv_cache, ...}]`. | ||
| 246 | + - Returns `[]` when nothing is loaded. | ||
| 247 | + - **Reasoning**: | ||
| 248 | + - streamed as `delta.reasoning_content`; | ||
| 249 | + - `usage.completion_tokens_details.reasoning_tokens` is filled. | ||
| 250 | + - **Thinking off**: | ||
| 251 | + - `chat_template_kwargs: {enable_thinking: false}` works, so the | ||
| 252 | + existing `thinkingOffTemplate` fits; | ||
| 253 | + - top-level `enable_thinking: false` works too; | ||
| 254 | + - `reasoning_effort: "none"` is IGNORED (the model still reasons). | ||
| 255 | + - **`return_progress`: no `prompt_progress` chunk**, so `progress: false`. | ||
| 256 | + - **`stream_options.include_usage`** works: a last chunk with `choices: []` | ||
| 257 | + and the usage. | ||
| 258 | + - Extra fields in the usage: `tokens_per_second`, | ||
| 259 | + `time_to_first_token_ms`, `draft_*` (MTP speculative decoding). | ||
| 260 | + - **Streamed tool call** is standard OpenAI: | ||
| 261 | + - the first delta carries `id`, `name` and `arguments: ""`; | ||
| 262 | + - the next delta carries the arguments; | ||
| 263 | + - the last has `finish_reason: "tool_calls"`. | ||
| 264 | + - **Pull**: `POST /v1/kronk/models/pull {"model_url": "<id>"}`. | ||
| 265 | + - The server answers HTTP 200 with SSE `data: {status, progress?, meta?}`. | ||
| 266 | + - `progress` = `{src, current_bytes, total_bytes, mb_per_sec, complete}`. | ||
| 267 | + - **Success** = the last record has `status: "downloaded"` and `downloaded: true`. | ||
| 268 | + - **Failure** = the last record is only an error `status` (still HTTP 200), | ||
| 269 | + e.g. `download: resolve "nobody/x": ... not found at provider "nobody"`. | ||
| 270 | + - An already-installed model answers `-> already downloaded`, then `downloaded`. | ||
| 271 | + - **Unload**: `POST /v1/kronk/models/unload {"id": "<id>"}`. | ||
| 272 | + - Success: `{"status":"unloaded","id":...}`. | ||
| 273 | + - Not loaded: HTTP 404, `not_found`. | ||
| 274 | + - Streams still running: `failed_precondition`. | ||
| 275 | + | ||
| 276 | + **Not measured**: the 401 and 403 shapes, which need an `authenticated` | ||
| 277 | + mode on the server. | ||
| 278 | + | ||
| 279 | + Source for the pull and unload request types: | ||
| 280 | + `cmd/server/app/domain/toolapp/{model.go,models.go}` in ardanlabs/kronk. | ||
| 281 | + - id: 2 | ||
| 282 | + author: | ||
| 283 | + name: k33g | ||
| 284 | + email: ph.charriere@gmail.com | ||
| 285 | + createdAt: 2026-11-11T07:00:31.000Z | ||
| 286 | + body: | | ||
| 287 | + ## Implemented on branch feature/kronk-provider | ||
| 288 | + | ||
| 289 | + - `internal/engine/kronk.go`: | ||
| 290 | + - `probeKronk`: the key is sent; a 401 or 403 is a warning naming | ||
| 291 | + `$KRONK_TOKEN`; a missing model warns `kronk model pull`; the window | ||
| 292 | + comes from `/v1/kronk/models/<escaped id>`; | ||
| 293 | + - `pullKronk` and `readKronkPullStream`; | ||
| 294 | + - `unloadKronk`: a 404 means "nothing to unload". | ||
| 295 | + - The `kronk` registry entry is in `openai_compat.go`: | ||
| 296 | + - `thinkingOffTemplate`; | ||
| 297 | + - `progress: false`. | ||
| 298 | + - `mm init`: | ||
| 299 | + - `kronk` is in the list of providers and in the local servers it probes; | ||
| 300 | + - `kronkFacts` reads `/v1/kronk/models/<id>`: the metadata as strings, | ||
| 301 | + and `model_config.context-window` (the trained length when it is missing). | ||
| 302 | + - Tests: | ||
| 303 | + - `internal/engine/kronk_test.go`, against a fake Kronk replaying the | ||
| 304 | + measured shapes; | ||
| 305 | + - Resolve rows and DefaultURLs; | ||
| 306 | + - `TestKronkFacts`. | ||
| 307 | + - `go test ./...` passes. | ||
| 308 | + - Demo: `demos/kronk/agent.kronk.yaml` and `README.en.md` / `README.fr.md`. | ||
| 309 | + - Docs EN and FR: | ||
| 310 | + - a new page, how-to `run-with-kronk`; | ||
| 311 | + - updated: configuration (defaults, autoPull, unloadModels, sampling, | ||
| 312 | + summaryMaxTokens, firstTokenTimeout), cli, tools (`unload_model`), | ||
| 313 | + providers, mm-init, thinking-models, turn-reasoning-off, | ||
| 314 | + unload-a-model, run-in-a-docker-sandbox, the indexes. | ||
| 315 | + | ||
| 316 | + ## Checked live from the sandbox (Kronk on the Mac) | ||
| 317 | + | ||
| 318 | + - The banner shows `ctx: 131072 (/v1/kronk/models)`. | ||
| 319 | + - A turn with bash calls works. | ||
| 320 | + - `/unload` works twice: the second call answers "not loaded". | ||
| 321 | + - `mm init --provider kronk --check` works. | ||
| 322 | + | ||
| 323 | + ## Still to check (task 9, on the Mac) | ||
| 324 | + | ||
| 325 | + - A real download with `autoPull: true`. | ||
| 326 | + - A real compaction. | ||
| 327 | + - A protected Kronk (`KRONK_TOKEN`). | ||
| 328 | + | ||
| 329 | + The quality gate (qlty) is not available in the sandbox. | ||
| 330 | + | ||
| 331 | + Seen with Qwopus: a turn ended with the answer only in the reasoning | ||
| 332 | + (`⚠ empty answer`). That comes from the model, not from the provider. | ||
| 333 | + | ||
modified
.tickets/issues/0090-agent-identity.yaml +2 -2 | @@ -6,9 +6,9 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-16T15:37:32.062Z |
| 9 | -updatedAt: 2026-11-01T20:44:45.000Z | |
| 9 | +updatedAt: 2026-11-11T06:57:30.799Z | |
| 10 | 10 | labels: [] |
| 11 | -epic: Questions | |
| 11 | +epic: Agent Identity | |
| 12 | 12 | body: | |
| 13 | 13 | Des idées pour gérer cela ? |
| 14 | 14 | avec l'existant (est ce que un seul useur peut avoir plusieurs identités sur GitHub par exemple) |
| @@ -6,9 +6,9 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-16T15:37:32.062Z | 8 | createdAt: 2026-10-16T15:37:32.062Z |
| 9 | -updatedAt: 2026-11-01T20:44:45.000Z | 9 | +updatedAt: 2026-11-11T06:57:30.799Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | -epic: Questions | 11 | +epic: Agent Identity |
| 12 | body: | | 12 | body: | |
| 13 | Des idées pour gérer cela ? | 13 | Des idées pour gérer cela ? |
| 14 | avec l'existant (est ce que un seul useur peut avoir plusieurs identités sur GitHub par exemple) | 14 | avec l'existant (est ce que un seul useur peut avoir plusieurs identités sur GitHub par exemple) |
modified
.tickets/issues/0111-using-the-settings-guide-create-a-claude-skill.yaml +2 -2 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 111 |
| 3 | 3 | title: Using the settings guide create a Claude skill |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-21T04:27:19.433Z |
| 9 | -updatedAt: 2026-11-01T20:44:45.000Z | |
| 9 | +updatedAt: 2026-11-11T06:52:11.123Z | |
| 10 | 10 | labels: [] |
| 11 | 11 | epic: Models |
| 12 | 12 | body: | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 111 | 2 | id: 111 |
| 3 | title: Using the settings guide create a Claude skill | 3 | title: Using the settings guide create a Claude skill |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-21T04:27:19.433Z | 8 | createdAt: 2026-10-21T04:27:19.433Z |
| 9 | -updatedAt: 2026-11-01T20:44:45.000Z | 9 | +updatedAt: 2026-11-11T06:52:11.123Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | epic: Models | 11 | epic: Models |
| 12 | body: | | 12 | body: | |
modified
.tickets/issues/0113-mini-me-as-a-service-turn-mm-into-a-dedicated-ap.yaml +11 -3 | @@ -1,13 +1,14 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 113 |
| 3 | 3 | title: "Mini Me as a service: turn mm into a dedicated app, or expose it as services — ideas" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-21T13:00:00.000Z |
| 9 | -updatedAt: 2026-10-22T17:09:28.961Z | |
| 10 | -labels: [] | |
| 9 | +updatedAt: 2026-11-11T07:02:05.377Z | |
| 10 | +labels: | |
| 11 | + - wontfix | |
| 11 | 12 | epic: Mini Me as a service |
| 12 | 13 | related: |
| 13 | 14 | - 71 |
| @@ -172,3 +173,10 @@ comments: | ||
| 172 | 173 | user's prompt (like mm -p); structured output; streaming and |
| 173 | 174 | non-streaming; a cancel API. The OpenAI-compatible HTTP façade |
| 174 | 175 | (direction B.2) is the candidate: specified in ticket 114. |
| 176 | + - id: 2 | |
| 177 | + author: | |
| 178 | + name: k33g | |
| 179 | + email: ph.charriere@gmail.com | |
| 180 | + createdAt: 2026-11-11T07:02:01.934Z | |
| 181 | + body: | | |
| 182 | + Use ACP instead | |
| @@ -1,13 +1,14 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 113 | 2 | id: 113 |
| 3 | title: "Mini Me as a service: turn mm into a dedicated app, or expose it as services — ideas" | 3 | title: "Mini Me as a service: turn mm into a dedicated app, or expose it as services — ideas" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-21T13:00:00.000Z | 8 | createdAt: 2026-10-21T13:00:00.000Z |
| 9 | -updatedAt: 2026-10-22T17:09:28.961Z | 9 | +updatedAt: 2026-11-11T07:02:05.377Z |
| 10 | -labels: [] | 10 | +labels: |
| 11 | + - wontfix | ||
| 11 | epic: Mini Me as a service | 12 | epic: Mini Me as a service |
| 12 | related: | 13 | related: |
| 13 | - 71 | 14 | - 71 |
| @@ -172,3 +173,10 @@ comments: | |||
| 172 | user's prompt (like mm -p); structured output; streaming and | 173 | user's prompt (like mm -p); structured output; streaming and |
| 173 | non-streaming; a cancel API. The OpenAI-compatible HTTP façade | 174 | non-streaming; a cancel API. The OpenAI-compatible HTTP façade |
| 174 | (direction B.2) is the candidate: specified in ticket 114. | 175 | (direction B.2) is the candidate: specified in ticket 114. |
| 176 | + - id: 2 | ||
| 177 | + author: | ||
| 178 | + name: k33g | ||
| 179 | + email: ph.charriere@gmail.com | ||
| 180 | + createdAt: 2026-11-11T07:02:01.934Z | ||
| 181 | + body: | | ||
| 182 | + Use ACP instead | ||
modified
.tickets/issues/0140-rephrase-the-question.yaml +2 -2 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 140 |
| 3 | 3 | title: Rephrase the question |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-24T04:11:57.315Z |
| 9 | -updatedAt: 2026-10-24T04:15:54.392Z | |
| 9 | +updatedAt: 2026-11-11T06:49:35.456Z | |
| 10 | 10 | labels: |
| 11 | 11 | - hooks |
| 12 | 12 | epic: Demos |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 140 | 2 | id: 140 |
| 3 | title: Rephrase the question | 3 | title: Rephrase the question |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-24T04:11:57.315Z | 8 | createdAt: 2026-10-24T04:11:57.315Z |
| 9 | -updatedAt: 2026-10-24T04:15:54.392Z | 9 | +updatedAt: 2026-11-11T06:49:35.456Z |
| 10 | labels: | 10 | labels: |
| 11 | - hooks | 11 | - hooks |
| 12 | epic: Demos | 12 | epic: Demos |
modified
.tickets/issues/0151-blog-post-to-explain-how-to-create-a-wasm-declar.yaml +2 -2 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 151 |
| 3 | 3 | title: Blog post to explain how to create a wasm declared tool |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-25T04:23:41.209Z |
| 9 | -updatedAt: 2026-10-25T04:23:41.209Z | |
| 9 | +updatedAt: 2026-11-11T07:03:15.692Z | |
| 10 | 10 | labels: [] |
| 11 | 11 | epic: WASM Module |
| 12 | 12 | body: "" |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 151 | 2 | id: 151 |
| 3 | title: Blog post to explain how to create a wasm declared tool | 3 | title: Blog post to explain how to create a wasm declared tool |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-25T04:23:41.209Z | 8 | createdAt: 2026-10-25T04:23:41.209Z |
| 9 | -updatedAt: 2026-10-25T04:23:41.209Z | 9 | +updatedAt: 2026-11-11T07:03:15.692Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | epic: WASM Module | 11 | epic: WASM Module |
| 12 | body: "" | 12 | body: "" |
modified
.tickets/issues/0152-dev-team.yaml +6 -7 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 152 |
| 3 | 3 | title: Dev team |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-25T04:44:30.351Z |
| 9 | -updatedAt: 2026-10-25T12:30:00.000Z | |
| 9 | +updatedAt: 2026-11-11T06:49:12.500Z | |
| 10 | 10 | labels: [] |
| 11 | 11 | epic: Demos |
| 12 | 12 | body: |+ |
| @@ -64,7 +64,7 @@ tasks: | ||
| 64 | 64 | createdAt: 2026-10-25T07:30:00.000Z |
| 65 | 65 | updatedAt: 2026-10-25T07:30:00.000Z |
| 66 | 66 | - id: 2 |
| 67 | - title: "Mesurer chaque agent seul (mm -p) sur des exemples réels, ajuster prompts et réglages" | |
| 67 | + title: Mesurer chaque agent seul (mm -p) sur des exemples réels, ajuster prompts et réglages | |
| 68 | 68 | state: closed |
| 69 | 69 | priority: none |
| 70 | 70 | author: |
| @@ -73,7 +73,7 @@ tasks: | ||
| 73 | 73 | createdAt: 2026-10-25T07:30:00.000Z |
| 74 | 74 | updatedAt: 2026-10-25T07:30:00.000Z |
| 75 | 75 | - id: 3 |
| 76 | - title: "Mesurer l'équipe de bout en bout via le coordinateur, vérifier le déchargement des modèles (/api/ps)" | |
| 76 | + title: Mesurer l'équipe de bout en bout via le coordinateur, vérifier le déchargement des modèles (/api/ps) | |
| 77 | 77 | state: closed |
| 78 | 78 | priority: none |
| 79 | 79 | author: |
| @@ -82,7 +82,7 @@ tasks: | ||
| 82 | 82 | createdAt: 2026-10-25T07:30:00.000Z |
| 83 | 83 | updatedAt: 2026-10-25T07:30:00.000Z |
| 84 | 84 | - id: 4 |
| 85 | - title: "Répondre à la question du modèle de décision (mesure du routage du coordinateur)" | |
| 85 | + title: Répondre à la question du modèle de décision (mesure du routage du coordinateur) | |
| 86 | 86 | state: closed |
| 87 | 87 | priority: none |
| 88 | 88 | author: |
| @@ -91,7 +91,7 @@ tasks: | ||
| 91 | 91 | createdAt: 2026-10-25T07:30:00.000Z |
| 92 | 92 | updatedAt: 2026-10-25T07:30:00.000Z |
| 93 | 93 | - id: 5 |
| 94 | - title: "README EN + FR avec diagrammes fancy et exemples d'utilisation ; ligne dans le README racine" | |
| 94 | + title: README EN + FR avec diagrammes fancy et exemples d'utilisation ; ligne dans le README racine | |
| 95 | 95 | state: closed |
| 96 | 96 | priority: none |
| 97 | 97 | author: |
| @@ -473,4 +473,3 @@ comments: | ||
| 473 | 473 | |
| 474 | 474 | Remarque : dev.team/go.mod n'était plus là (supprimé de ton côté ?) — |
| 475 | 475 | je ne l'ai pas remis. |
| 476 | - | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 152 | 2 | id: 152 |
| 3 | title: Dev team | 3 | title: Dev team |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-25T04:44:30.351Z | 8 | createdAt: 2026-10-25T04:44:30.351Z |
| 9 | -updatedAt: 2026-10-25T12:30:00.000Z | 9 | +updatedAt: 2026-11-11T06:49:12.500Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | epic: Demos | 11 | epic: Demos |
| 12 | body: |+ | 12 | body: |+ |
| @@ -64,7 +64,7 @@ tasks: | |||
| 64 | createdAt: 2026-10-25T07:30:00.000Z | 64 | createdAt: 2026-10-25T07:30:00.000Z |
| 65 | updatedAt: 2026-10-25T07:30:00.000Z | 65 | updatedAt: 2026-10-25T07:30:00.000Z |
| 66 | - id: 2 | 66 | - id: 2 |
| 67 | - title: "Mesurer chaque agent seul (mm -p) sur des exemples réels, ajuster prompts et réglages" | 67 | + title: Mesurer chaque agent seul (mm -p) sur des exemples réels, ajuster prompts et réglages |
| 68 | state: closed | 68 | state: closed |
| 69 | priority: none | 69 | priority: none |
| 70 | author: | 70 | author: |
| @@ -73,7 +73,7 @@ tasks: | |||
| 73 | createdAt: 2026-10-25T07:30:00.000Z | 73 | createdAt: 2026-10-25T07:30:00.000Z |
| 74 | updatedAt: 2026-10-25T07:30:00.000Z | 74 | updatedAt: 2026-10-25T07:30:00.000Z |
| 75 | - id: 3 | 75 | - id: 3 |
| 76 | - title: "Mesurer l'équipe de bout en bout via le coordinateur, vérifier le déchargement des modèles (/api/ps)" | 76 | + title: Mesurer l'équipe de bout en bout via le coordinateur, vérifier le déchargement des modèles (/api/ps) |
| 77 | state: closed | 77 | state: closed |
| 78 | priority: none | 78 | priority: none |
| 79 | author: | 79 | author: |
| @@ -82,7 +82,7 @@ tasks: | |||
| 82 | createdAt: 2026-10-25T07:30:00.000Z | 82 | createdAt: 2026-10-25T07:30:00.000Z |
| 83 | updatedAt: 2026-10-25T07:30:00.000Z | 83 | updatedAt: 2026-10-25T07:30:00.000Z |
| 84 | - id: 4 | 84 | - id: 4 |
| 85 | - title: "Répondre à la question du modèle de décision (mesure du routage du coordinateur)" | 85 | + title: Répondre à la question du modèle de décision (mesure du routage du coordinateur) |
| 86 | state: closed | 86 | state: closed |
| 87 | priority: none | 87 | priority: none |
| 88 | author: | 88 | author: |
| @@ -91,7 +91,7 @@ tasks: | |||
| 91 | createdAt: 2026-10-25T07:30:00.000Z | 91 | createdAt: 2026-10-25T07:30:00.000Z |
| 92 | updatedAt: 2026-10-25T07:30:00.000Z | 92 | updatedAt: 2026-10-25T07:30:00.000Z |
| 93 | - id: 5 | 93 | - id: 5 |
| 94 | - title: "README EN + FR avec diagrammes fancy et exemples d'utilisation ; ligne dans le README racine" | 94 | + title: README EN + FR avec diagrammes fancy et exemples d'utilisation ; ligne dans le README racine |
| 95 | state: closed | 95 | state: closed |
| 96 | priority: none | 96 | priority: none |
| 97 | author: | 97 | author: |
| @@ -473,4 +473,3 @@ comments: | |||
| 473 | 473 | ||
| 474 | Remarque : dev.team/go.mod n'était plus là (supprimé de ton côté ?) — | 474 | Remarque : dev.team/go.mod n'était plus là (supprimé de ton côté ?) — |
| 475 | je ne l'ai pas remis. | 475 | je ne l'ai pas remis. |
| 476 | - | ||
renamed
.tickets/issues/0172-nushell-script-client-over-acp-mm-from-a-shell-s.yaml +6 -5 | similarity index 91% | ||
| rename from .tickets/issues/0172-nushell-script-client-over-acp.yaml | ||
| rename to .tickets/issues/0172-nushell-script-client-over-acp-mm-from-a-shell-s.yaml | ||
| @@ -6,9 +6,10 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-26T06:30:00.000Z |
| 9 | -updatedAt: 2026-10-26T06:30:00.000Z | |
| 9 | +updatedAt: 2026-11-11T07:00:55.349Z | |
| 10 | 10 | labels: |
| 11 | 11 | - kind::feature |
| 12 | +milestone: v2.0.0 | |
| 12 | 13 | epic: SDK |
| 13 | 14 | related: |
| 14 | 15 | - 167 |
| @@ -42,7 +43,7 @@ tasks: | ||
| 42 | 43 | email: ph.charriere@gmail.com |
| 43 | 44 | createdAt: 2026-10-26T06:30:00.000Z |
| 44 | 45 | - id: 2 |
| 45 | - title: "Get Nushell (sandbox or the user's machine)" | |
| 46 | + title: Get Nushell (sandbox or the user's machine) | |
| 46 | 47 | state: open |
| 47 | 48 | priority: none |
| 48 | 49 | author: |
| @@ -58,7 +59,7 @@ tasks: | ||
| 58 | 59 | email: ph.charriere@gmail.com |
| 59 | 60 | createdAt: 2026-10-26T06:30:00.000Z |
| 60 | 61 | - id: 4 |
| 61 | - title: "Permission callback (session/request_permission), refuse by default" | |
| 62 | + title: Permission callback (session/request_permission), refuse by default | |
| 62 | 63 | state: open |
| 63 | 64 | priority: none |
| 64 | 65 | author: |
| @@ -66,7 +67,7 @@ tasks: | ||
| 66 | 67 | email: ph.charriere@gmail.com |
| 67 | 68 | createdAt: 2026-10-26T06:30:00.000Z |
| 68 | 69 | - id: 5 |
| 69 | - title: "Examples (not streamed, streamed, cancelled, permission) run on llmman" | |
| 70 | + title: Examples (not streamed, streamed, cancelled, permission) run on llmman | |
| 70 | 71 | state: open |
| 71 | 72 | priority: none |
| 72 | 73 | author: |
| @@ -74,7 +75,7 @@ tasks: | ||
| 74 | 75 | email: ph.charriere@gmail.com |
| 75 | 76 | createdAt: 2026-10-26T06:30:00.000Z |
| 76 | 77 | - id: 6 |
| 77 | - title: "README EN + FR with measured results and limits" | |
| 78 | + title: README EN + FR with measured results and limits | |
| 78 | 79 | state: open |
| 79 | 80 | priority: none |
| 80 | 81 | author: |
| similarity index 91% | |||
| rename from .tickets/issues/0172-nushell-script-client-over-acp.yaml | |||
| rename to .tickets/issues/0172-nushell-script-client-over-acp-mm-from-a-shell-s.yaml | |||
| @@ -6,9 +6,10 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-26T06:30:00.000Z | 8 | createdAt: 2026-10-26T06:30:00.000Z |
| 9 | -updatedAt: 2026-10-26T06:30:00.000Z | 9 | +updatedAt: 2026-11-11T07:00:55.349Z |
| 10 | labels: | 10 | labels: |
| 11 | - kind::feature | 11 | - kind::feature |
| 12 | +milestone: v2.0.0 | ||
| 12 | epic: SDK | 13 | epic: SDK |
| 13 | related: | 14 | related: |
| 14 | - 167 | 15 | - 167 |
| @@ -42,7 +43,7 @@ tasks: | |||
| 42 | email: ph.charriere@gmail.com | 43 | email: ph.charriere@gmail.com |
| 43 | createdAt: 2026-10-26T06:30:00.000Z | 44 | createdAt: 2026-10-26T06:30:00.000Z |
| 44 | - id: 2 | 45 | - id: 2 |
| 45 | - title: "Get Nushell (sandbox or the user's machine)" | 46 | + title: Get Nushell (sandbox or the user's machine) |
| 46 | state: open | 47 | state: open |
| 47 | priority: none | 48 | priority: none |
| 48 | author: | 49 | author: |
| @@ -58,7 +59,7 @@ tasks: | |||
| 58 | email: ph.charriere@gmail.com | 59 | email: ph.charriere@gmail.com |
| 59 | createdAt: 2026-10-26T06:30:00.000Z | 60 | createdAt: 2026-10-26T06:30:00.000Z |
| 60 | - id: 4 | 61 | - id: 4 |
| 61 | - title: "Permission callback (session/request_permission), refuse by default" | 62 | + title: Permission callback (session/request_permission), refuse by default |
| 62 | state: open | 63 | state: open |
| 63 | priority: none | 64 | priority: none |
| 64 | author: | 65 | author: |
| @@ -66,7 +67,7 @@ tasks: | |||
| 66 | email: ph.charriere@gmail.com | 67 | email: ph.charriere@gmail.com |
| 67 | createdAt: 2026-10-26T06:30:00.000Z | 68 | createdAt: 2026-10-26T06:30:00.000Z |
| 68 | - id: 5 | 69 | - id: 5 |
| 69 | - title: "Examples (not streamed, streamed, cancelled, permission) run on llmman" | 70 | + title: Examples (not streamed, streamed, cancelled, permission) run on llmman |
| 70 | state: open | 71 | state: open |
| 71 | priority: none | 72 | priority: none |
| 72 | author: | 73 | author: |
| @@ -74,7 +75,7 @@ tasks: | |||
| 74 | email: ph.charriere@gmail.com | 75 | email: ph.charriere@gmail.com |
| 75 | createdAt: 2026-10-26T06:30:00.000Z | 76 | createdAt: 2026-10-26T06:30:00.000Z |
| 76 | - id: 6 | 77 | - id: 6 |
| 77 | - title: "README EN + FR with measured results and limits" | 78 | + title: README EN + FR with measured results and limits |
| 78 | state: open | 79 | state: open |
| 79 | priority: none | 80 | priority: none |
| 80 | author: | 81 | author: |
renamed
.tickets/issues/0178-support-openai-s-responses-api-to-keep-reasoning.yaml +7 -6 | similarity index 90% | ||
| rename from .tickets/issues/0178-support-openai-responses-api.yaml | ||
| rename to .tickets/issues/0178-support-openai-s-responses-api-to-keep-reasoning.yaml | ||
| @@ -1,14 +1,15 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 178 |
| 3 | -title: "Support OpenAI's Responses API, to keep reasoning and tools together (gpt-6-luna)" | |
| 3 | +title: Support OpenAI's Responses API, to keep reasoning and tools together (gpt-6-luna) | |
| 4 | 4 | state: open |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-26T19:30:00.000Z |
| 9 | -updatedAt: 2026-10-26T19:30:00.000Z | |
| 9 | +updatedAt: 2026-11-11T06:48:27.885Z | |
| 10 | 10 | labels: |
| 11 | 11 | - kind::feature |
| 12 | +milestone: v2.0.0 | |
| 12 | 13 | epic: Providers (LLM Engine) |
| 13 | 14 | related: |
| 14 | 15 | - 176 |
| @@ -60,7 +61,7 @@ tasks: | ||
| 60 | 61 | email: ph.charriere@gmail.com |
| 61 | 62 | createdAt: 2026-10-26T19:30:00.000Z |
| 62 | 63 | - id: 2 |
| 63 | - title: "Check which OpenAI-compatible servers serve /v1/responses (vLLM, Ollama, llama-server…)" | |
| 64 | + title: Check which OpenAI-compatible servers serve /v1/responses (vLLM, Ollama, llama-server…) | |
| 64 | 65 | state: open |
| 65 | 66 | priority: none |
| 66 | 67 | author: |
| @@ -76,7 +77,7 @@ tasks: | ||
| 76 | 77 | email: ph.charriere@gmail.com |
| 77 | 78 | createdAt: 2026-10-26T19:30:00.000Z |
| 78 | 79 | - id: 4 |
| 79 | - title: "Reasoning items carried between turns; thoughts, usage, structuredOutput, compaction, max_output_tokens" | |
| 80 | + title: Reasoning items carried between turns; thoughts, usage, structuredOutput, compaction, max_output_tokens | |
| 80 | 81 | state: open |
| 81 | 82 | priority: none |
| 82 | 83 | author: |
| @@ -84,7 +85,7 @@ tasks: | ||
| 84 | 85 | email: ph.charriere@gmail.com |
| 85 | 86 | createdAt: 2026-10-26T19:30:00.000Z |
| 86 | 87 | - id: 5 |
| 87 | - title: "Tests against a fake /v1/responses server; a live check with a reasoning model" | |
| 88 | + title: Tests against a fake /v1/responses server; a live check with a reasoning model | |
| 88 | 89 | state: open |
| 89 | 90 | priority: none |
| 90 | 91 | author: |
| @@ -92,7 +93,7 @@ tasks: | ||
| 92 | 93 | email: ph.charriere@gmail.com |
| 93 | 94 | createdAt: 2026-10-26T19:30:00.000Z |
| 94 | 95 | - id: 6 |
| 95 | - title: "mm init and docs EN + FR" | |
| 96 | + title: mm init and docs EN + FR | |
| 96 | 97 | state: open |
| 97 | 98 | priority: none |
| 98 | 99 | author: |
| similarity index 90% | |||
| rename from .tickets/issues/0178-support-openai-responses-api.yaml | |||
| rename to .tickets/issues/0178-support-openai-s-responses-api-to-keep-reasoning.yaml | |||
| @@ -1,14 +1,15 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 178 | 2 | id: 178 |
| 3 | -title: "Support OpenAI's Responses API, to keep reasoning and tools together (gpt-6-luna)" | 3 | +title: Support OpenAI's Responses API, to keep reasoning and tools together (gpt-6-luna) |
| 4 | state: open | 4 | state: open |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-26T19:30:00.000Z | 8 | createdAt: 2026-10-26T19:30:00.000Z |
| 9 | -updatedAt: 2026-10-26T19:30:00.000Z | 9 | +updatedAt: 2026-11-11T06:48:27.885Z |
| 10 | labels: | 10 | labels: |
| 11 | - kind::feature | 11 | - kind::feature |
| 12 | +milestone: v2.0.0 | ||
| 12 | epic: Providers (LLM Engine) | 13 | epic: Providers (LLM Engine) |
| 13 | related: | 14 | related: |
| 14 | - 176 | 15 | - 176 |
| @@ -60,7 +61,7 @@ tasks: | |||
| 60 | email: ph.charriere@gmail.com | 61 | email: ph.charriere@gmail.com |
| 61 | createdAt: 2026-10-26T19:30:00.000Z | 62 | createdAt: 2026-10-26T19:30:00.000Z |
| 62 | - id: 2 | 63 | - id: 2 |
| 63 | - title: "Check which OpenAI-compatible servers serve /v1/responses (vLLM, Ollama, llama-server…)" | 64 | + title: Check which OpenAI-compatible servers serve /v1/responses (vLLM, Ollama, llama-server…) |
| 64 | state: open | 65 | state: open |
| 65 | priority: none | 66 | priority: none |
| 66 | author: | 67 | author: |
| @@ -76,7 +77,7 @@ tasks: | |||
| 76 | email: ph.charriere@gmail.com | 77 | email: ph.charriere@gmail.com |
| 77 | createdAt: 2026-10-26T19:30:00.000Z | 78 | createdAt: 2026-10-26T19:30:00.000Z |
| 78 | - id: 4 | 79 | - id: 4 |
| 79 | - title: "Reasoning items carried between turns; thoughts, usage, structuredOutput, compaction, max_output_tokens" | 80 | + title: Reasoning items carried between turns; thoughts, usage, structuredOutput, compaction, max_output_tokens |
| 80 | state: open | 81 | state: open |
| 81 | priority: none | 82 | priority: none |
| 82 | author: | 83 | author: |
| @@ -84,7 +85,7 @@ tasks: | |||
| 84 | email: ph.charriere@gmail.com | 85 | email: ph.charriere@gmail.com |
| 85 | createdAt: 2026-10-26T19:30:00.000Z | 86 | createdAt: 2026-10-26T19:30:00.000Z |
| 86 | - id: 5 | 87 | - id: 5 |
| 87 | - title: "Tests against a fake /v1/responses server; a live check with a reasoning model" | 88 | + title: Tests against a fake /v1/responses server; a live check with a reasoning model |
| 88 | state: open | 89 | state: open |
| 89 | priority: none | 90 | priority: none |
| 90 | author: | 91 | author: |
| @@ -92,7 +93,7 @@ tasks: | |||
| 92 | email: ph.charriere@gmail.com | 93 | email: ph.charriere@gmail.com |
| 93 | createdAt: 2026-10-26T19:30:00.000Z | 94 | createdAt: 2026-10-26T19:30:00.000Z |
| 94 | - id: 6 | 95 | - id: 6 |
| 95 | - title: "mm init and docs EN + FR" | 96 | + title: mm init and docs EN + FR |
| 96 | state: open | 97 | state: open |
| 97 | priority: none | 98 | priority: none |
| 98 | author: | 99 | author: |
modified
.tickets/issues/0183-acp-use-the-client-s-fs-and-terminal-services-wh.yaml +2 -2 | @@ -6,12 +6,12 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-31T16:39:23.000Z |
| 9 | -updatedAt: 2026-11-01T20:42:22.000Z | |
| 9 | +updatedAt: 2026-11-11T00:28:50.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - enhancement |
| 12 | 12 | - kind::feature |
| 13 | 13 | - tools |
| 14 | -milestone: v2.0.0 | |
| 14 | +milestone: v1.0.6 | |
| 15 | 15 | epic: ACP integration |
| 16 | 16 | body: | |
| 17 | 17 | ## Context |
| @@ -6,12 +6,12 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-31T16:39:23.000Z | 8 | createdAt: 2026-10-31T16:39:23.000Z |
| 9 | -updatedAt: 2026-11-01T20:42:22.000Z | 9 | +updatedAt: 2026-11-11T00:28:50.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - enhancement | 11 | - enhancement |
| 12 | - kind::feature | 12 | - kind::feature |
| 13 | - tools | 13 | - tools |
| 14 | -milestone: v2.0.0 | 14 | +milestone: v1.0.6 |
| 15 | epic: ACP integration | 15 | epic: ACP integration |
| 16 | body: | | 16 | body: | |
| 17 | ## Context | 17 | ## Context |
modified
.tickets/issues/0194-better-understanding-of-the-code.yaml +2 -1 | @@ -6,9 +6,10 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-11-07T04:16:22.000Z |
| 9 | -updatedAt: 2026-11-07T04:16:44.000Z | |
| 9 | +updatedAt: 2026-11-11T00:29:35.282Z | |
| 10 | 10 | labels: [] |
| 11 | 11 | milestone: v1.0.6 |
| 12 | +epic: Documentation | |
| 12 | 13 | body: "" |
| 13 | 14 | tasks: |
| 14 | 15 | - id: 1 |
| @@ -6,9 +6,10 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-11-07T04:16:22.000Z | 8 | createdAt: 2026-11-07T04:16:22.000Z |
| 9 | -updatedAt: 2026-11-07T04:16:44.000Z | 9 | +updatedAt: 2026-11-11T00:29:35.282Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | milestone: v1.0.6 | 11 | milestone: v1.0.6 |
| 12 | +epic: Documentation | ||
| 12 | body: "" | 13 | body: "" |
| 13 | tasks: | 14 | tasks: |
| 14 | - id: 1 | 15 | - id: 1 |
modified
.tickets/issues/0197-how-to-use-mini-me-to-help-making-suggestions-wh.yaml +2 -1 | @@ -6,9 +6,10 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-11-07T08:02:50.274Z |
| 9 | -updatedAt: 2026-11-07T08:02:50.274Z | |
| 9 | +updatedAt: 2026-11-11T00:30:34.700Z | |
| 10 | 10 | labels: [] |
| 11 | 11 | milestone: v1.0.6 |
| 12 | +epic: Documentation | |
| 12 | 13 | body: "" |
| 13 | 14 | tasks: [] |
| 14 | 15 | comments: [] |
| @@ -6,9 +6,10 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-11-07T08:02:50.274Z | 8 | createdAt: 2026-11-07T08:02:50.274Z |
| 9 | -updatedAt: 2026-11-07T08:02:50.274Z | 9 | +updatedAt: 2026-11-11T00:30:34.700Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | milestone: v1.0.6 | 11 | milestone: v1.0.6 |
| 12 | +epic: Documentation | ||
| 12 | body: "" | 13 | body: "" |
| 13 | tasks: [] | 14 | tasks: [] |
| 14 | comments: [] | 15 | comments: [] |
modified
.tickets/issues/0202-acp-custom-extensions-exposed-by-the-client-as-a.yaml +2 -1 | @@ -6,11 +6,12 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-11-10T21:56:01.000Z |
| 9 | -updatedAt: 2026-11-10T23:30:00.000Z | |
| 9 | +updatedAt: 2026-11-11T00:30:03.268Z | |
| 10 | 10 | labels: |
| 11 | 11 | - kind::feature |
| 12 | 12 | - tools |
| 13 | 13 | milestone: v1.0.6 |
| 14 | +epic: ACP integration | |
| 14 | 15 | body: | |
| 15 | 16 | In ACP mode (`mm -acp`), the agent must **discover** the custom extensions |
| 16 | 17 | the ACP client exposes, and **call them like any other tool**. Discovery |
| @@ -6,11 +6,12 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-11-10T21:56:01.000Z | 8 | createdAt: 2026-11-10T21:56:01.000Z |
| 9 | -updatedAt: 2026-11-10T23:30:00.000Z | 9 | +updatedAt: 2026-11-11T00:30:03.268Z |
| 10 | labels: | 10 | labels: |
| 11 | - kind::feature | 11 | - kind::feature |
| 12 | - tools | 12 | - tools |
| 13 | milestone: v1.0.6 | 13 | milestone: v1.0.6 |
| 14 | +epic: ACP integration | ||
| 14 | body: | | 15 | body: | |
| 15 | In ACP mode (`mm -acp`), the agent must **discover** the custom extensions | 16 | In ACP mode (`mm -acp`), the agent must **discover** the custom extensions |
| 16 | the ACP client exposes, and **call them like any other tool**. Discovery | 17 | the ACP client exposes, and **call them like any other tool**. Discovery |
added
.tickets/issues/0203-how-to-distribute-the-sdks.yaml +16 -0 | new file mode 100644 | ||
| @@ -0,0 +1,16 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 203 | |
| 3 | +title: How to distribute the SDKs? | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-11-11T06:59:37.515Z | |
| 9 | +updatedAt: 2026-11-11T07:00:02.502Z | |
| 10 | +labels: | |
| 11 | + - priority::high | |
| 12 | +milestone: v2.0.0 | |
| 13 | +epic: SDK | |
| 14 | +body: "" | |
| 15 | +tasks: [] | |
| 16 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 203 | ||
| 3 | +title: How to distribute the SDKs? | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-11-11T06:59:37.515Z | ||
| 9 | +updatedAt: 2026-11-11T07:00:02.502Z | ||
| 10 | +labels: | ||
| 11 | + - priority::high | ||
| 12 | +milestone: v2.0.0 | ||
| 13 | +epic: SDK | ||
| 14 | +body: "" | ||
| 15 | +tasks: [] | ||
| 16 | +comments: [] | ||