@loicngr/kobo 1.11.44 → 2.1.0
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/AGENTS.md +57 -4
- package/CHANGELOG.md +13 -0
- package/CODE_OF_CONDUCT.md +16 -0
- package/CONFIGURATION.md +1968 -0
- package/CONTRIBUTING.md +83 -0
- package/DESIGN.md +296 -0
- package/README.md +48 -8
- package/SECURITY.md +54 -0
- package/THIRD_PARTY_NOTICES.md +20 -0
- package/dist/mcp-server/kobo-tasks-handlers.js +2 -1
- package/dist/mcp-server/kobo-tasks-server.js +31 -5
- package/dist/server/db/migrations.js +37 -0
- package/dist/server/db/schema.js +6 -1
- package/dist/server/db/session-handoff-schema.js +24 -0
- package/dist/server/index.js +8 -0
- package/dist/server/routes/documents.js +1 -1
- package/dist/server/routes/environment.js +18 -0
- package/dist/server/routes/health.js +17 -2
- package/dist/server/routes/integrations.js +29 -0
- package/dist/server/routes/settings.js +5 -0
- package/dist/server/routes/sounds.js +60 -0
- package/dist/server/routes/workspaces.js +118 -20
- package/dist/server/services/agent/engines/claude-code/engine.js +15 -0
- package/dist/server/services/agent/engines/codex/engine.js +1 -0
- package/dist/server/services/agent/engines/codex/options-builder.js +1 -0
- package/dist/server/services/agent/engines/codex/spawn.js +2 -2
- package/dist/server/services/agent/integration-mcp.js +49 -0
- package/dist/server/services/agent/orchestrator.js +68 -11
- package/dist/server/services/auto-loop-service.js +45 -25
- package/dist/server/services/custom-sound-service.js +0 -0
- package/dist/server/services/engine-handoff-service.js +5 -5
- package/dist/server/services/environment-check-service.js +125 -0
- package/dist/server/services/initial-prompt-template-service.js +8 -21
- package/dist/server/services/integration-config-service.js +65 -0
- package/dist/server/services/legacy-public-prompts.js +112 -0
- package/dist/server/services/notion-service.js +25 -61
- package/dist/server/services/sentry-service.js +17 -12
- package/dist/server/services/session-activity-service.js +17 -0
- package/dist/server/services/session-handoff-runtime.js +26 -0
- package/dist/server/services/session-handoff-service.js +479 -0
- package/dist/server/services/settings-defaults.js +5 -0
- package/dist/server/services/settings-service.js +112 -23
- package/dist/server/services/skill-suite-prompts.js +29 -22
- package/dist/server/services/templates-service.js +31 -8
- package/dist/server/services/terminal-service.js +16 -0
- package/dist/server/services/wakeup-service.js +15 -5
- package/dist/server/services/workspace-service.js +30 -6
- package/dist/server/services/worktree-service.js +3 -1
- package/dist/server/utils/git-repo-lock.js +7 -3
- package/dist/server/utils/mcp-client.js +26 -12
- package/dist/server/utils/mcp-process.js +25 -0
- package/dist/server/utils/node-pty-spawn-helper.js +31 -0
- package/dist/server/utils/paths.js +7 -0
- package/dist/server/utils/workspace-lifecycle-guard.js +35 -20
- package/dist/shared/auto-loop-prompts.js +6 -2
- package/dist/shared/automatic-admission.js +1 -0
- package/dist/shared/document-roots.js +2 -0
- package/dist/shared/environment.js +1 -0
- package/dist/shared/notification-assets.js +73 -0
- package/dist/shared/session-handoff.js +4 -0
- package/dist/shared/skill-suite-prompts.js +6 -3
- package/dist/shared/workflow-policy.js +25 -0
- package/docs/getting-started.md +47 -0
- package/docs/troubleshooting.md +49 -0
- package/package.json +19 -7
- package/src/client/dist/pwa/assets/ActivityFeed-DRgetl1M.js +8 -0
- package/src/client/dist/pwa/assets/{ChangelogPage-DSKCvpr2.js → ChangelogPage-BJdICFvz.js} +1 -1
- package/src/client/dist/pwa/assets/{ComparisonPanel-DDxcsxyC.js → ComparisonPanel-2GLd8KIy.js} +1 -1
- package/src/client/dist/pwa/assets/CreatePage-B9AdNJZj.js +2 -0
- package/src/client/dist/pwa/assets/CreatePage-B9C9J9Pw.css +1 -0
- package/src/client/dist/pwa/assets/DashboardPage-CzVOvjSP.js +1 -0
- package/src/client/dist/pwa/assets/DiffViewer-X25vuf83.js +8 -0
- package/src/client/dist/pwa/assets/{DocumentsPanel-DfEoI_f7.js → DocumentsPanel-BastjrEm.js} +1 -1
- package/src/client/dist/pwa/assets/{DrawerToggleButton-D85PwhKb.js → DrawerToggleButton-DbipGmBL.js} +1 -1
- package/src/client/dist/pwa/assets/{GitPanel-BFCnyhE2.css → GitPanel-C4wOcZV2.css} +1 -1
- package/src/client/dist/pwa/assets/GitPanel-CnW4iVao.js +3 -0
- package/src/client/dist/pwa/assets/{HealthPage-CaLCpejR.js → HealthPage-aieNQly-.js} +1 -1
- package/src/client/dist/pwa/assets/MainLayout-Cc4XzCAy.css +1 -0
- package/src/client/dist/pwa/assets/MainLayout-DqBbE8o4.js +2 -0
- package/src/client/dist/pwa/assets/{QBtnDropdown-qJWGcZpC.js → QBtnDropdown-BWy-rh45.js} +1 -1
- package/src/client/dist/pwa/assets/QExpansionItem-DfmdBGuW.js +1 -0
- package/src/client/dist/pwa/assets/QSelect-BfqaWakg.js +1 -0
- package/src/client/dist/pwa/assets/{QTooltip-cDK5AOQ5.js → QTooltip-Cy0T0vk2.js} +1 -1
- package/src/client/dist/pwa/assets/SchedulePanel-BYKSFoFj.css +1 -0
- package/src/client/dist/pwa/assets/SchedulePanel-YQPObRR3.js +1 -0
- package/src/client/dist/pwa/assets/{SearchPage-BO-J4aNc.js → SearchPage-BoBjmItc.js} +1 -1
- package/src/client/dist/pwa/assets/SettingsPage-0GtDcXRC.js +9 -0
- package/src/client/dist/pwa/assets/{SettingsPage-W6N01tGz.css → SettingsPage-BYdLXJEJ.css} +1 -1
- package/src/client/dist/pwa/assets/SplitWorkspacePage-4wFh65Lh.js +1 -0
- package/src/client/dist/pwa/assets/{TerminalPanel-DitOCad1.js → TerminalPanel-b70x_jqH.js} +9 -9
- package/src/client/dist/pwa/assets/{TouchPan-DvPAhZsa.js → TouchPan-CcTVcxwd.js} +1 -1
- package/src/client/dist/pwa/assets/{TourReplayButton-CJYdH3Jf.js → TourReplayButton-CpEMnQS8.js} +1 -1
- package/src/client/dist/pwa/assets/WorkspaceAttentionLabels-C5lTHTp2.js +1 -0
- package/src/client/dist/pwa/assets/{WorkspacePage-DAVo-E4p.css → WorkspacePage--5HsnMQ1.css} +1 -1
- package/src/client/dist/pwa/assets/WorkspacePage-D_V9gNON.js +4 -0
- package/src/client/dist/pwa/assets/{browser-BsB6cFv4.js → browser-LBbxVwWf.js} +1 -1
- package/src/client/dist/pwa/assets/build-path-tree-DyvtWxb0.js +1 -0
- package/src/client/dist/pwa/assets/custom-sounds-BpeLZUDW.js +1 -0
- package/src/client/dist/pwa/assets/de-v6i2HlE2.js +17 -0
- package/src/client/dist/pwa/assets/{documents-SCd3w8xV.js → documents-Bjx8lz-h.js} +1 -1
- package/src/client/dist/pwa/assets/{editor.api-BUdM7I6y.js → editor.api-BC3PbJkx.js} +1 -1
- package/src/client/dist/pwa/assets/efforts-BDHAnNUs.js +9 -0
- package/src/client/dist/pwa/assets/engineFeatures-hlEiwqt-.js +1 -0
- package/src/client/dist/pwa/assets/es-Bc1KgkAT.js +17 -0
- package/src/client/dist/pwa/assets/expand-template-DLDl1qPx.js +1 -0
- package/src/client/dist/pwa/assets/{format-BjQxf4pe.js → format-Q94deO3I.js} +7 -7
- package/src/client/dist/pwa/assets/{formatters-BejhmNTV.js → formatters-CWxRHuUu.js} +1 -1
- package/src/client/dist/pwa/assets/fr-ByYPK5vr.js +17 -0
- package/src/client/dist/pwa/assets/{freemarker2-5d5GhyRp.js → freemarker2-MPhk0eTh.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-DaafEsDK.js → handlebars-C60ru5gR.js} +1 -1
- package/src/client/dist/pwa/assets/{html-CwHBDd2A.js → html-ClzchR9j.js} +1 -1
- package/src/client/dist/pwa/assets/i18n-Sy42tm-V.js +1 -0
- package/src/client/dist/pwa/assets/index-CqZ7sDcM.js +20 -0
- package/src/client/dist/pwa/assets/it-BYF_88z6.js +17 -0
- package/src/client/dist/pwa/assets/{javascript-DSNIEEH5.js → javascript-C43UJmMx.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-Dma1UpA1.js → liquid-CYTrvTKF.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-D8rqEAws.js → mdx-CxsXOvkQ.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco-contributions-2E7O2zoi.js → monaco-contributions-Cl4-iVpK.js} +1 -1
- package/src/client/dist/pwa/assets/monaco.contribution-DkjLUmyA.js +2 -0
- package/src/client/dist/pwa/assets/network-auth-CXQn2wO7.js +1 -0
- package/src/client/dist/pwa/assets/notify-theme-BrueBr2j.js +1 -0
- package/src/client/dist/pwa/assets/{pending-diff-open-CeiVIFZn.js → pending-diff-open-B4POItbR.js} +1 -1
- package/src/client/dist/pwa/assets/permissionModes-B-ciuUbz.js +36 -0
- package/src/client/dist/pwa/assets/{project-color-BCp9SWoI.js → project-color-CM3hflLH.js} +1 -1
- package/src/client/dist/pwa/assets/{python-f-9NqRlI.js → python-s2IMpsoV.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-DsCmoX0h.js → razor-DVNXiVBh.js} +1 -1
- package/src/client/dist/pwa/assets/render-chat-markdown-TU6CDfD8.js +69 -0
- package/src/client/dist/pwa/assets/{typescript-cEHg4L10.js → typescript-BYT_8ABE.js} +1 -1
- package/src/client/dist/pwa/assets/use-slide-transition-CiaDm-tR.js +1 -0
- package/src/client/dist/pwa/assets/use-tours-CNe8qb1q.js +2 -0
- package/src/client/dist/pwa/assets/workspace-templates-tBxXE52A.js +1 -0
- package/src/client/dist/pwa/assets/{xml-Plt-Y7we.js → xml-BIG-fmxk.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-ScEmaAeN.js → yaml-D7gu2CQh.js} +1 -1
- package/src/client/dist/pwa/index.html +1 -1
- package/src/client/dist/pwa/sounds/neutral.wav +0 -0
- package/src/client/dist/pwa/sounds/ready.wav +0 -0
- package/src/client/dist/pwa/sw.js +1 -1
- package/src/mcp-server/README.md +8 -1
- package/src/mcp-server/kobo-tasks-handlers.ts +4 -1
- package/src/mcp-server/kobo-tasks-server.ts +38 -5
- package/src/client/dist/pwa/assets/ActivityFeed-D_y4aikp.js +0 -8
- package/src/client/dist/pwa/assets/CreatePage-DKVEknbL.js +0 -2
- package/src/client/dist/pwa/assets/CreatePage-TY9g3hZb.css +0 -1
- package/src/client/dist/pwa/assets/DashboardPage-Dg2s9nnv.js +0 -1
- package/src/client/dist/pwa/assets/DiffViewer-BSzNScIr.js +0 -8
- package/src/client/dist/pwa/assets/GitPanel-CuG8MlgF.js +0 -3
- package/src/client/dist/pwa/assets/MainLayout-CDxYIJ_s.js +0 -2
- package/src/client/dist/pwa/assets/MainLayout-DTLNunOi.css +0 -1
- package/src/client/dist/pwa/assets/QDrawer-DX3PhMqC.js +0 -1
- package/src/client/dist/pwa/assets/QSelect-CY4TWW_j.js +0 -1
- package/src/client/dist/pwa/assets/SchedulePanel-BAA4Aajn.css +0 -1
- package/src/client/dist/pwa/assets/SchedulePanel-LvHiZ6ZH.js +0 -1
- package/src/client/dist/pwa/assets/SettingsPage-Aw89fRSq.js +0 -9
- package/src/client/dist/pwa/assets/SplitWorkspacePage-BIEceNwH.js +0 -1
- package/src/client/dist/pwa/assets/WorkspaceAttentionLabels-CY-9z9nw.js +0 -1
- package/src/client/dist/pwa/assets/WorkspacePage-xH_OyA3r.js +0 -4
- package/src/client/dist/pwa/assets/build-path-tree-CW-ER1Mt.js +0 -1
- package/src/client/dist/pwa/assets/de-Mu7biceO.js +0 -17
- package/src/client/dist/pwa/assets/efforts-DTJQP9or.js +0 -9
- package/src/client/dist/pwa/assets/engineFeatures-Bj6Ob41d.js +0 -1
- package/src/client/dist/pwa/assets/es-BY5IfNI2.js +0 -17
- package/src/client/dist/pwa/assets/expand-template-SM8vvYyO.js +0 -1
- package/src/client/dist/pwa/assets/fouet-ahh-DdxrUXRj.mp3 +0 -0
- package/src/client/dist/pwa/assets/fr-BMXCzFCM.js +0 -17
- package/src/client/dist/pwa/assets/i18n-CgWW5vfb.js +0 -1
- package/src/client/dist/pwa/assets/index-Di9Sz5E8.js +0 -20
- package/src/client/dist/pwa/assets/it-ByPZQK_K.js +0 -17
- package/src/client/dist/pwa/assets/monaco.contribution-DqOgo72G.js +0 -2
- package/src/client/dist/pwa/assets/network-auth-DNmhJTZn.js +0 -1
- package/src/client/dist/pwa/assets/notify-theme-B6Hiwvwb.js +0 -1
- package/src/client/dist/pwa/assets/permissionModes-DWdtf81n.js +0 -36
- package/src/client/dist/pwa/assets/render-chat-markdown-DK5BD9mU.js +0 -67
- package/src/client/dist/pwa/assets/use-tours-BmTbosmB.js +0 -2
- package/src/client/dist/pwa/assets/workspace-templates-DUWDLMIX.js +0 -1
- package/src/client/dist/pwa/sounds/7eme-compagnie-03.mp3 +0 -0
- package/src/client/dist/pwa/sounds/aller-ftg.mp3 +0 -0
- package/src/client/dist/pwa/sounds/arrete-de-mentir.mp3 +0 -0
- package/src/client/dist/pwa/sounds/arretez-les-messages.mp3 +0 -0
- package/src/client/dist/pwa/sounds/bah-alors-on-est-nul.mp3 +0 -0
- package/src/client/dist/pwa/sounds/basic-notification.mp3 +0 -0
- package/src/client/dist/pwa/sounds/ca_va_peter.mp3 +0 -0
- package/src/client/dist/pwa/sounds/dry-fart.mp3 +0 -0
- package/src/client/dist/pwa/sounds/faaah.mp3 +0 -0
- package/src/client/dist/pwa/sounds/for-shure.mp3 +0 -0
- package/src/client/dist/pwa/sounds/gta-v-death.mp3 +0 -0
- package/src/client/dist/pwa/sounds/hey.mp3 +0 -0
- package/src/client/dist/pwa/sounds/mais-laisse-moi-dormir-zebi.mp3 +0 -0
- package/src/client/dist/pwa/sounds/nan-tu-degages.mp3 +0 -0
- package/src/client/dist/pwa/sounds/nan-wallah-pardon.mp3 +0 -0
- package/src/client/dist/pwa/sounds/ouais-cest-greg.mp3 +0 -0
- package/src/client/dist/pwa/sounds/pas-ca-zinedine.mp3 +0 -0
- package/src/client/dist/pwa/sounds/ta-gueule.mp3 +0 -0
- package/src/client/dist/pwa/sounds/travail_termine.mp3 +0 -0
- package/src/client/dist/pwa/sounds/tu-vas-la-fermer.mp3 +0 -0
- package/src/client/dist/pwa/sounds/warcraft-3-humain-travail.mp3 +0 -0
- package/src/client/dist/pwa/sounds/yaaa.mp3 +0 -0
package/AGENTS.md
CHANGED
|
@@ -225,7 +225,8 @@ Two emit flavors in `websocket-service.ts`:
|
|
|
225
225
|
|
|
226
226
|
1. `NOTION_API_TOKEN` env var
|
|
227
227
|
2. `NOTION_TOKEN` env var
|
|
228
|
-
3.
|
|
228
|
+
3. Direct Notion configuration in `KOBO_HOME/integrations.json`, when saved in Settings
|
|
229
|
+
4. Otherwise `~/.claude.json` → `mcpServers.notion.env.NOTION_TOKEN` / `NOTION_API_TOKEN` (legacy shared Claude MCP config)
|
|
229
230
|
|
|
230
231
|
The selected Claude config entry defaults to the enabled key named exactly `notion`; `global.notionMcpKey` selects another exact key. Its command/args are reused unless `NOTION_MCP_COMMAND` / `NOTION_MCP_ARGS` override them; otherwise the fallback is `npx -y @notionhq/notion-mcp-server`. Existing `OPENAPI_MCP_HEADERS` are preserved; when absent, the resolved token is used to construct them.
|
|
231
232
|
|
|
@@ -264,10 +265,48 @@ Background: the engine was migrated from `@openai/codex-sdk` (one-shot `codex ex
|
|
|
264
265
|
|
|
265
266
|
## Workspace operations
|
|
266
267
|
|
|
268
|
+
### Fresh sessions and LLM handoffs
|
|
269
|
+
|
|
270
|
+
`session-handoff-service.ts` owns manual transfers within a workspace, including
|
|
271
|
+
same-engine model changes. `session_handoffs` (migration v46) preserves the source,
|
|
272
|
+
target, request idempotency, report and operation state. Lifecycle reservations
|
|
273
|
+
permit only launches carrying their owner token; ordinary chat, reviews and
|
|
274
|
+
automatic writers remain excluded until completion or explicit cancellation.
|
|
275
|
+
|
|
276
|
+
Stop the source immediately and confirm closure before resuming its exact native
|
|
277
|
+
conversation for the optional report-only turn. The final destination always uses
|
|
278
|
+
a fresh conversation. Generation uses a scoped `submit_session_handoff` MCP tool;
|
|
279
|
+
the backend persists the report, publishes `.ai/handoffs/` documents and owns the
|
|
280
|
+
transition. Never treat this generation as auto-loop progress or settle uncertain
|
|
281
|
+
instructions through it. Pending instruction contents stay with the loop dispatcher.
|
|
282
|
+
|
|
283
|
+
`EngineProcess.ready`, when provided, confirms initial native session/turn
|
|
284
|
+
acceptance. A returned process handle alone is insufficient evidence that a
|
|
285
|
+
transfer started successfully. Startup reconciliation retains interrupted transfers
|
|
286
|
+
for an explicit retry/skip/cancel decision and never replays them automatically.
|
|
287
|
+
Stop cancels pending transfers, including while no engine is running. Preserve
|
|
288
|
+
source selection by last use after a review return; loading a historical completed
|
|
289
|
+
transfer must not change the user's currently selected conversation.
|
|
290
|
+
Failed, interrupted and cancelled transfers restore the source conversation as well
|
|
291
|
+
as its configuration once the engine is stopped. `agent_sessions.activation_order`
|
|
292
|
+
(migration v47) records starts, resumes and source restoration independently of real
|
|
293
|
+
start/end timestamps. Backend current-session and implicit-resume selection, and the
|
|
294
|
+
client's current-session helper, use this order with the legacy timestamp fallback.
|
|
295
|
+
Keep failed target sessions in history and do not force a historical handoff's
|
|
296
|
+
selection over a later conversation after reload.
|
|
297
|
+
Rolled-back targets have `activation_order = -1`: exclude them from default
|
|
298
|
+
selection and implicit resume, but retain their native id and execution history.
|
|
299
|
+
An explicit start/resume activates them again. Without a source conversation,
|
|
300
|
+
rollback clears the client selection, including stale persisted preferences,
|
|
301
|
+
so the next ordinary message starts a fresh conversation on the restored engine.
|
|
302
|
+
Pending wakeups pinned to the source move to the destination only after confirmed
|
|
303
|
+
startup, in the same transaction as handoff completion. Preserve their prompt and
|
|
304
|
+
deadline, and never rebind a wakeup belonging to another conversation.
|
|
305
|
+
|
|
267
306
|
### Review LLM and return to the original session
|
|
268
307
|
|
|
269
|
-
The current conversation is the running session, or the last
|
|
270
|
-
`max(startedAt, endedAt)`
|
|
308
|
+
The current conversation is the running session, or the last activated session,
|
|
309
|
+
falling back to `max(startedAt, endedAt)` for legacy rows. Keep the session list in creation order,
|
|
271
310
|
but do not use its first entry to identify the current conversation: a temporary
|
|
272
311
|
review can return to an older session. The stale-session banner and the next
|
|
273
312
|
review's return target must recognize that original session, including on reload.
|
|
@@ -475,7 +514,7 @@ These rules are the source of truth and are also written to `.ai/.git-convention
|
|
|
475
514
|
- Subject: imperative mood, lowercase, no trailing period, max 72 chars
|
|
476
515
|
- Body: wrap at 72 chars, explain *why* not *what*
|
|
477
516
|
- Reference issues with `Refs #123` or `Closes #123`
|
|
478
|
-
-
|
|
517
|
+
- Add a `Co-Authored-By:` trailer for an LLM only when it materially contributed to the code included in that commit. Do not add one automatically when the LLM did not contribute to the code.
|
|
479
518
|
|
|
480
519
|
**Branches**
|
|
481
520
|
- Feature: `feature/<short-kebab-case>`
|
|
@@ -536,3 +575,17 @@ deviate from the documented system without explicit user approval.
|
|
|
536
575
|
- Conversation loading indicators follow outstanding session/history/sync requests only while no content is available. Background refreshes must preserve the displayed conversation, component state and reading position, including feeds containing only user messages.
|
|
537
576
|
- PR diagnosis fingerprints are asynchronous and include binary staged/unstaged diffs and untracked file contents (symlink targets, not their destinations). Untracked nested Git repositories are fingerprinted recursively, including HEAD and index changes; ignored files and Git internals are excluded. Await them at every callsite. Workspace matching always includes normalized project identity.
|
|
538
577
|
- Daily DB backups are checked at startup and hourly, with the existing 24-hour minimum age and retention. Stop the scheduler and await its active backup before closing SQLite.
|
|
578
|
+
|
|
579
|
+
## Public-use defaults and release checks
|
|
580
|
+
|
|
581
|
+
Fresh installs use the `standard` skill suite, model `auto`, Plan permissions, manual commit/push/publish workflow preferences, two unattended slots, and disabled optional integrations/audio. Do not rewrite custom settings while updating shipped defaults. Historical migrations must keep their original semantic defaults; shipped prompt constants needed by old migrations are frozen in `legacy-public-prompts.ts`.
|
|
582
|
+
|
|
583
|
+
Settings migration v59 updates only exact known shipped prompts, v60 marks existing installs onboarded, v61 maps retired sounds to the original neutral asset, and v62 preserves the legacy workflow policy. SQLite v48 snapshots workspace policies; v49 separates wakeup `retry_at` from the original `target_at`. Never mutate a wakeup deadline just to wait for capacity. Admission status shares the existing gate; manual starts remain exempt while their controllers count against unattended capacity.
|
|
584
|
+
|
|
585
|
+
Workflow preferences do not replace engine permissions. Never promote Plan to Bypass because of grooming, auto-loop or an `ExitPlanMode` tool event. Global/project policy edits apply to future workspace snapshots. Explicit narrower user constraints always prevail.
|
|
586
|
+
|
|
587
|
+
Notion/Sentry direct configurations live in `KOBO_HOME/integrations.json`, atomically written with mode 0600, separate from settings exports. Legacy Claude configuration remains a fallback. Read APIs return configured status only; never include raw MCP errors, command arguments or stderr in public responses/logs. Do not execute provider connection checks at UI mount.
|
|
588
|
+
|
|
589
|
+
Users import their own notification sounds through `custom-sound-service.ts` into `<KOBO_HOME>/sounds/`, referenced in settings as `custom:<id>`. Identifiers are generated server-side; an uploaded filename is a display label and never a path. `normalizePublicNotificationSound` keeps a well-formed reference on its shape alone, because settings migrations run before the catalogue is readable. A reference whose file is gone must fall back to `neutral.wav` rather than fail, so deletion never needs to inspect the eleven sound settings.
|
|
590
|
+
|
|
591
|
+
`npm run test:package` after build installs the actual tarball in a disposable home and checks native dependencies, real PWA assets and HTTP/stdio MCP. `npm run security:scan` requires Gitleaks 8.30.1 and scans all local refs plus current nonignored source with redacted output. Public docs use a narrow `.gitignore` allowlist; internal plans and captures remain excluded. Read `docs/release/public-opening-checklist.md` before releasing; CI configuration alone is not platform validation evidence.
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,19 @@ All notable changes to Kōbō are documented here. The format is based on
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/). Each release is an `## <version>`
|
|
5
5
|
section — the in-app "What's new" dialog reads this file.
|
|
6
6
|
|
|
7
|
+
## 2.1.0
|
|
8
|
+
|
|
9
|
+
- chore(deps): update dependencies
|
|
10
|
+
|
|
11
|
+
## 2.0.0
|
|
12
|
+
|
|
13
|
+
- feat(public-readiness): prepare Kobo for public use
|
|
14
|
+
|
|
15
|
+
## 1.11.45
|
|
16
|
+
|
|
17
|
+
- fix(sessions): harden handoff recovery and highlight transfer progress
|
|
18
|
+
- feat(sessions): add fresh sessions with optional handoffs
|
|
19
|
+
|
|
7
20
|
## 1.11.44
|
|
8
21
|
|
|
9
22
|
- chore(deps): update packages and node to 24.21.0
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Community conduct
|
|
2
|
+
|
|
3
|
+
Be respectful, describe technical disagreements with evidence, and welcome users
|
|
4
|
+
with different tools, experience and working habits. Harassment, threats,
|
|
5
|
+
discriminatory remarks and disclosure of another person's private information
|
|
6
|
+
are not acceptable in issues, pull requests or other project spaces.
|
|
7
|
+
|
|
8
|
+
For private conduct reports, contact the maintainer at the email listed in
|
|
9
|
+
`package.json` (`loicnogier@ik.me`). Include links and relevant context, avoiding
|
|
10
|
+
unnecessary personal data. Security vulnerabilities belong in the private channel
|
|
11
|
+
described in `SECURITY.md`.
|
|
12
|
+
|
|
13
|
+
The maintainer may edit or remove content, close a thread, or restrict participation
|
|
14
|
+
to protect contributors and users. Decisions should be proportionate to the
|
|
15
|
+
behavior and context. Reports are handled privately as far as practical; no
|
|
16
|
+
response-time commitment is offered.
|