@sayknow-cli/coding-agent 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/README.md +76 -0
  2. package/dist/types/capability/mcp.d.ts +2 -0
  3. package/dist/types/cli/local-provider-smoke.d.ts +59 -0
  4. package/dist/types/cli/notify-cli.d.ts +1 -1
  5. package/dist/types/cli/telegram-cli.d.ts +13 -0
  6. package/dist/types/cli/update-cli.d.ts +24 -1
  7. package/dist/types/commands/local-provider.d.ts +34 -0
  8. package/dist/types/commands/telegram.d.ts +22 -0
  9. package/dist/types/config/keybindings.d.ts +12 -6
  10. package/dist/types/config/model-registry.d.ts +5 -0
  11. package/dist/types/config/models-config-schema.d.ts +5 -0
  12. package/dist/types/config/settings-schema.d.ts +284 -4
  13. package/dist/types/config/settings.d.ts +7 -0
  14. package/dist/types/config/telegram-autostart.d.ts +14 -0
  15. package/dist/types/config/telegram-env-bridge.d.ts +18 -0
  16. package/dist/types/coordinator-mcp/server.d.ts +8 -0
  17. package/dist/types/defaults/skc-defaults.d.ts +7 -0
  18. package/dist/types/discovery/cursor.d.ts +4 -1
  19. package/dist/types/discovery/index.d.ts +0 -1
  20. package/dist/types/discovery/windsurf.d.ts +3 -1
  21. package/dist/types/extensibility/extensions/types.d.ts +11 -0
  22. package/dist/types/i18n/messages/en.d.ts +1 -0
  23. package/dist/types/modes/components/custom-editor.d.ts +6 -1
  24. package/dist/types/modes/components/custom-model-preset-wizard.d.ts +1 -1
  25. package/dist/types/modes/components/hook-selector.d.ts +5 -0
  26. package/dist/types/modes/components/model-selector.d.ts +2 -0
  27. package/dist/types/modes/components/settings-selector.d.ts +5 -1
  28. package/dist/types/modes/components/skill-message.d.ts +1 -0
  29. package/dist/types/modes/components/status-line/types.d.ts +5 -7
  30. package/dist/types/modes/components/status-line.d.ts +15 -3
  31. package/dist/types/modes/components/two-column-body.d.ts +9 -0
  32. package/dist/types/modes/components/welcome.d.ts +9 -1
  33. package/dist/types/modes/controllers/command-controller.d.ts +1 -0
  34. package/dist/types/modes/controllers/input-controller.d.ts +6 -1
  35. package/dist/types/modes/controllers/selector-controller.d.ts +10 -1
  36. package/dist/types/modes/interactive-mode.d.ts +2 -0
  37. package/dist/types/modes/prompt-action-autocomplete.d.ts +3 -0
  38. package/dist/types/modes/rpc/rpc-types.d.ts +1 -0
  39. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +41 -7
  40. package/dist/types/modes/slash-command-visibility.d.ts +1 -0
  41. package/dist/types/modes/theme/theme.d.ts +1 -1
  42. package/dist/types/modes/tmux-scroll.d.ts +18 -0
  43. package/dist/types/modes/types.d.ts +5 -1
  44. package/dist/types/modes/utils/terminal-bell.d.ts +3 -0
  45. package/dist/types/notifications/daemon-paths.d.ts +9 -0
  46. package/dist/types/notifications/html-format.d.ts +2 -0
  47. package/dist/types/notifications/recent-activity.d.ts +5 -1
  48. package/dist/types/notifications/telegram-daemon-cli.d.ts +21 -4
  49. package/dist/types/notifications/telegram-daemon-control.d.ts +8 -0
  50. package/dist/types/notifications/telegram-daemon.d.ts +4 -10
  51. package/dist/types/notifications/telegram-reference.d.ts +4 -0
  52. package/dist/types/notifications/threaded-render.d.ts +1 -0
  53. package/dist/types/runtime-mcp/config-writer.d.ts +9 -0
  54. package/dist/types/runtime-mcp/config.d.ts +2 -0
  55. package/dist/types/runtime-mcp/loader.d.ts +2 -0
  56. package/dist/types/runtime-mcp/manager.d.ts +2 -0
  57. package/dist/types/runtime-mcp/types.d.ts +6 -0
  58. package/dist/types/sdk.d.ts +1 -1
  59. package/dist/types/skc-runtime/launch-tmux.d.ts +2 -2
  60. package/dist/types/skc-runtime/ralplan-runtime.d.ts +3 -2
  61. package/dist/types/skc-runtime/restricted-role-agent-bash.d.ts +1 -0
  62. package/dist/types/skc-runtime/session-state-sidecar.d.ts +5 -0
  63. package/dist/types/skc-runtime/state-writer.d.ts +1 -0
  64. package/dist/types/skc-runtime/team-runtime.d.ts +1 -1
  65. package/dist/types/skc-runtime/tmux-common.d.ts +12 -0
  66. package/dist/types/skc-runtime/ultragoal-guard.d.ts +7 -1
  67. package/dist/types/skc-runtime/ultragoal-runtime.d.ts +0 -4
  68. package/dist/types/slash-commands/types.d.ts +2 -0
  69. package/dist/types/system-prompt.d.ts +7 -0
  70. package/dist/types/tools/skill.d.ts +1 -1
  71. package/dist/types/utils/cmux-workspace.d.ts +52 -0
  72. package/dist/types/web/search/index.d.ts +4 -2
  73. package/dist/types/web/search/provider.d.ts +14 -0
  74. package/dist/types/web/search/providers/utils.d.ts +42 -13
  75. package/dist/types/web/search/render.d.ts +1 -0
  76. package/dist/types/workflow/workflow-intent-diff.d.ts +19 -0
  77. package/package.json +8 -8
  78. package/scripts/build-binary.ts +3 -0
  79. package/scripts/verify-insane-vendor.ts +0 -5
  80. package/src/capability/mcp.ts +2 -0
  81. package/src/cli/local-provider-smoke.ts +632 -0
  82. package/src/cli/notify-cli.ts +4 -2
  83. package/src/cli/telegram-cli.ts +156 -0
  84. package/src/cli/update-cli.ts +179 -13
  85. package/src/cli/web-search-cli.ts +5 -7
  86. package/src/cli.ts +20 -1
  87. package/src/commands/launch.ts +47 -2
  88. package/src/commands/local-provider.ts +62 -0
  89. package/src/commands/notify.ts +1 -1
  90. package/src/commands/ralplan.ts +1 -0
  91. package/src/commands/telegram.ts +47 -0
  92. package/src/config/keybindings.ts +15 -6
  93. package/src/config/mcp-schema.json +4 -0
  94. package/src/config/model-registry.ts +55 -1
  95. package/src/config/models-config-schema.ts +9 -0
  96. package/src/config/settings-schema.ts +256 -4
  97. package/src/config/settings.ts +11 -0
  98. package/src/config/telegram-autostart.ts +107 -0
  99. package/src/config/telegram-env-bridge.ts +92 -0
  100. package/src/coordinator-mcp/server.ts +276 -34
  101. package/src/defaults/skc/skills/ralplan/SKILL.md +29 -20
  102. package/src/defaults/skc/skills/ultragoal/SKILL.md +37 -112
  103. package/src/defaults/skc-defaults.ts +16 -0
  104. package/src/discovery/builtin.ts +12 -0
  105. package/src/discovery/cursor.ts +5 -84
  106. package/src/discovery/gemini.ts +3 -89
  107. package/src/discovery/index.ts +4 -1
  108. package/src/discovery/mcp-json.ts +11 -0
  109. package/src/discovery/opencode.ts +5 -122
  110. package/src/discovery/windsurf.ts +4 -82
  111. package/src/edit/read-file.ts +9 -1
  112. package/src/extensibility/extensions/runner.ts +2 -1
  113. package/src/extensibility/extensions/types.ts +11 -0
  114. package/src/extensibility/skills.ts +30 -2
  115. package/src/hooks/skill-state.ts +33 -73
  116. package/src/i18n/messages/de.ts +1 -0
  117. package/src/i18n/messages/en.ts +1 -0
  118. package/src/i18n/messages/es.ts +1 -0
  119. package/src/i18n/messages/fr.ts +1 -0
  120. package/src/i18n/messages/ja.settings.ts +28 -0
  121. package/src/i18n/messages/ja.ts +1 -0
  122. package/src/i18n/messages/ko.settings.ts +28 -0
  123. package/src/i18n/messages/ko.ts +1 -0
  124. package/src/i18n/messages/zh.settings.ts +28 -0
  125. package/src/i18n/messages/zh.ts +1 -0
  126. package/src/internal-urls/docs-index.generated.ts +12 -7
  127. package/src/main.ts +5 -2
  128. package/src/migrate/executor.ts +23 -6
  129. package/src/modes/acp/acp-agent.ts +7 -6
  130. package/src/modes/components/agent-dashboard.ts +3 -35
  131. package/src/modes/components/custom-editor.ts +26 -0
  132. package/src/modes/components/custom-model-preset-wizard.ts +30 -189
  133. package/src/modes/components/extensions/extension-dashboard.ts +2 -48
  134. package/src/modes/components/hook-selector.ts +21 -3
  135. package/src/modes/components/model-selector.ts +246 -11
  136. package/src/modes/components/session-observer-overlay.ts +3 -3
  137. package/src/modes/components/session-selector.ts +19 -9
  138. package/src/modes/components/settings-selector.ts +551 -11
  139. package/src/modes/components/skill-message.ts +18 -10
  140. package/src/modes/components/status-line/presets.ts +11 -0
  141. package/src/modes/components/status-line/segments.ts +16 -19
  142. package/src/modes/components/status-line/types.ts +6 -2
  143. package/src/modes/components/status-line.ts +281 -117
  144. package/src/modes/components/tree-selector.ts +28 -8
  145. package/src/modes/components/two-column-body.ts +36 -0
  146. package/src/modes/components/welcome.ts +165 -30
  147. package/src/modes/controllers/command-controller.ts +26 -2
  148. package/src/modes/controllers/event-controller.ts +102 -4
  149. package/src/modes/controllers/extension-ui-controller.ts +21 -2
  150. package/src/modes/controllers/input-controller.ts +214 -47
  151. package/src/modes/controllers/selector-controller.ts +35 -33
  152. package/src/modes/interactive-mode.ts +36 -30
  153. package/src/modes/prompt-action-autocomplete.ts +48 -8
  154. package/src/modes/rpc/rpc-types.ts +1 -0
  155. package/src/modes/shared/agent-wire/deep-interview-gate.ts +72 -15
  156. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +20 -0
  157. package/src/modes/slash-command-visibility.ts +9 -0
  158. package/src/modes/theme/theme.ts +5 -1
  159. package/src/modes/tmux-scroll.ts +92 -0
  160. package/src/modes/types.ts +8 -1
  161. package/src/modes/utils/hotkeys-markdown.ts +5 -2
  162. package/src/modes/utils/terminal-bell.ts +48 -0
  163. package/src/modes/utils/ui-helpers.ts +76 -3
  164. package/src/notifications/daemon-paths.ts +22 -0
  165. package/src/notifications/html-format.ts +75 -1
  166. package/src/notifications/index.ts +32 -2
  167. package/src/notifications/lifecycle-control-runtime.ts +12 -3
  168. package/src/notifications/recent-activity.ts +32 -8
  169. package/src/notifications/telegram-daemon-cli.ts +125 -13
  170. package/src/notifications/telegram-daemon-control.ts +9 -0
  171. package/src/notifications/telegram-daemon.ts +88 -46
  172. package/src/notifications/telegram-reference.ts +36 -14
  173. package/src/notifications/threaded-render.ts +14 -6
  174. package/src/prompts/agents/architect.md +7 -4
  175. package/src/prompts/agents/critic.md +15 -6
  176. package/src/prompts/agents/planner.md +8 -3
  177. package/src/prompts/system/system-prompt.md +20 -2
  178. package/src/prompts/tools/bash.md +1 -1
  179. package/src/runtime-mcp/config-writer.ts +28 -0
  180. package/src/runtime-mcp/config.ts +7 -0
  181. package/src/runtime-mcp/loader.ts +3 -0
  182. package/src/runtime-mcp/manager.ts +3 -0
  183. package/src/runtime-mcp/types.ts +6 -0
  184. package/src/sdk.ts +10 -11
  185. package/src/session/agent-session.ts +103 -13
  186. package/src/session/session-manager.ts +58 -18
  187. package/src/skc-runtime/launch-tmux.ts +34 -8
  188. package/src/skc-runtime/launch-worktree.ts +16 -2
  189. package/src/skc-runtime/ralplan-runtime.ts +22 -6
  190. package/src/skc-runtime/restricted-role-agent-bash.ts +1 -0
  191. package/src/skc-runtime/session-state-sidecar.ts +167 -24
  192. package/src/skc-runtime/state-runtime.ts +8 -5
  193. package/src/skc-runtime/state-writer.ts +5 -5
  194. package/src/skc-runtime/team-runtime.ts +21 -6
  195. package/src/skc-runtime/tmux-common.ts +16 -0
  196. package/src/skc-runtime/tmux-sessions.ts +13 -9
  197. package/src/skc-runtime/ultragoal-guard.ts +150 -24
  198. package/src/skc-runtime/ultragoal-runtime.ts +16 -124
  199. package/src/skc-runtime/workflow-manifest.generated.json +0 -8
  200. package/src/skc-runtime/workflow-manifest.ts +0 -1
  201. package/src/slash-commands/builtin-registry.ts +136 -23
  202. package/src/slash-commands/types.ts +2 -0
  203. package/src/system-prompt.ts +8 -0
  204. package/src/task/executor.ts +5 -0
  205. package/src/tools/ast-grep.ts +10 -7
  206. package/src/tools/bash.ts +39 -14
  207. package/src/tools/index.ts +8 -1
  208. package/src/tools/skill.ts +1 -1
  209. package/src/utils/cmux-workspace.ts +233 -0
  210. package/src/utils/title-generator.ts +2 -0
  211. package/src/web/kagi.ts +1 -1
  212. package/src/web/parallel.ts +2 -2
  213. package/src/web/search/index.ts +137 -52
  214. package/src/web/search/provider.ts +80 -0
  215. package/src/web/search/providers/anthropic.ts +1 -1
  216. package/src/web/search/providers/brave.ts +1 -1
  217. package/src/web/search/providers/codex.ts +1 -1
  218. package/src/web/search/providers/duckduckgo.ts +1 -1
  219. package/src/web/search/providers/exa.ts +1 -1
  220. package/src/web/search/providers/gemini.ts +7 -3
  221. package/src/web/search/providers/jina.ts +1 -1
  222. package/src/web/search/providers/kimi.ts +6 -1
  223. package/src/web/search/providers/openai-compatible.ts +1 -1
  224. package/src/web/search/providers/parallel.ts +1 -1
  225. package/src/web/search/providers/perplexity.ts +2 -2
  226. package/src/web/search/providers/searxng.ts +1 -1
  227. package/src/web/search/providers/synthetic.ts +1 -1
  228. package/src/web/search/providers/tavily.ts +1 -1
  229. package/src/web/search/providers/utils.ts +67 -17
  230. package/src/web/search/providers/xai.ts +1 -1
  231. package/src/web/search/providers/zai.ts +1 -1
  232. package/src/web/search/render.ts +3 -0
  233. package/src/workflow/workflow-intent-diff.ts +199 -0
  234. package/vendor/insane-search/MANIFEST.json +1 -3
  235. package/vendor/insane-search/engine/tests/test_u1.py +0 -28
  236. package/vendor/insane-search/engine/transport.py +2 -3
  237. package/vendor/insane-search/engine/validators.py +0 -14
  238. package/src/defaults/skc/rules/ponytail.md +0 -68
@@ -10,7 +10,7 @@ import { type SkillDiscoverySettings } from "./skill-settings-defaults";
10
10
  * settings.get("compaction.enabled") // => boolean
11
11
  * settings.set("theme.dark", "red-octopus") // sync, saves in background
12
12
  */
13
- export type SettingTab = "appearance" | "model" | "interaction" | "context" | "memory" | "editing" | "tools" | "tasks" | "providers";
13
+ export type SettingTab = "appearance" | "model" | "interaction" | "context" | "memory" | "editing" | "tools" | "tasks" | "providers" | "integrations";
14
14
  /** Tab display metadata - icon is resolved via theme.symbol() */
15
15
  export type TabMetadata = {
16
16
  label: string;
@@ -160,6 +160,42 @@ export declare const SETTINGS_SCHEMA: {
160
160
  readonly default: 60000;
161
161
  readonly validate: (value: number) => boolean;
162
162
  };
163
+ readonly "notifications.terminalBell": {
164
+ readonly type: "boolean";
165
+ readonly default: false;
166
+ readonly ui: {
167
+ readonly tab: "interaction";
168
+ readonly label: "Terminal Bell";
169
+ readonly description: "Emit a BEL character for local terminal notifications. Windows Terminal may keep BEL silent depending on profile/system sound settings; use completion.notifyCommand for a PowerShell Console.Beep workaround.";
170
+ };
171
+ };
172
+ readonly "notifications.bellOnComplete": {
173
+ readonly type: "boolean";
174
+ readonly default: true;
175
+ readonly ui: {
176
+ readonly tab: "interaction";
177
+ readonly label: "Bell on Completion";
178
+ readonly description: "Ring the terminal bell when an agent turn completes";
179
+ };
180
+ };
181
+ readonly "notifications.bellOnApproval": {
182
+ readonly type: "boolean";
183
+ readonly default: true;
184
+ readonly ui: {
185
+ readonly tab: "interaction";
186
+ readonly label: "Bell on Approval";
187
+ readonly description: "Ring the terminal bell when a plan or approval prompt needs attention";
188
+ };
189
+ };
190
+ readonly "notifications.bellOnAsk": {
191
+ readonly type: "boolean";
192
+ readonly default: true;
193
+ readonly ui: {
194
+ readonly tab: "interaction";
195
+ readonly label: "Bell on Ask";
196
+ readonly description: "Ring the terminal bell when an ask/user-input prompt needs attention";
197
+ };
198
+ };
163
199
  readonly autoResume: {
164
200
  readonly type: "boolean";
165
201
  readonly default: false;
@@ -358,7 +394,7 @@ export declare const SETTINGS_SCHEMA: {
358
394
  };
359
395
  readonly "statusLine.preset": {
360
396
  readonly type: "enum";
361
- readonly values: readonly ["default", "minimal", "compact", "full", "nerd", "ascii", "custom"];
397
+ readonly values: readonly ["default", "default-usage", "minimal", "compact", "full", "nerd", "ascii", "custom"];
362
398
  readonly default: "default";
363
399
  readonly ui: {
364
400
  readonly tab: "appearance";
@@ -368,6 +404,10 @@ export declare const SETTINGS_SCHEMA: {
368
404
  readonly value: "default";
369
405
  readonly label: "Default";
370
406
  readonly description: "Model, path, git, context, tokens, cost";
407
+ }, {
408
+ readonly value: "default-usage";
409
+ readonly label: "Default + Usage";
410
+ readonly description: "Default layout with provider usage quota";
371
411
  }, {
372
412
  readonly value: "minimal";
373
413
  readonly label: "Minimal";
@@ -443,6 +483,28 @@ export declare const SETTINGS_SCHEMA: {
443
483
  readonly description: "Use the session name color for the editor border and status line gap";
444
484
  };
445
485
  };
486
+ readonly "statusLine.maxRows": {
487
+ readonly type: "number";
488
+ readonly default: 1;
489
+ readonly ui: {
490
+ readonly tab: "appearance";
491
+ readonly label: "Status Line Rows";
492
+ readonly description: "Maximum rows for the status line. When greater than 1, overflowing segments wrap onto additional rows instead of being dropped.";
493
+ readonly options: readonly [{
494
+ readonly value: "1";
495
+ readonly label: "1 row";
496
+ readonly description: "Single line; overflow is truncated (default)";
497
+ }, {
498
+ readonly value: "2";
499
+ readonly label: "2 rows";
500
+ readonly description: "Wrap overflow onto a second row";
501
+ }, {
502
+ readonly value: "3";
503
+ readonly label: "3 rows";
504
+ readonly description: "Wrap overflow across up to three rows";
505
+ }];
506
+ };
507
+ };
446
508
  readonly "tools.artifactSpillThreshold": {
447
509
  readonly type: "number";
448
510
  readonly default: 50;
@@ -1344,6 +1406,15 @@ export declare const SETTINGS_SCHEMA: {
1344
1406
  readonly description: "Notify when the agent completes";
1345
1407
  };
1346
1408
  };
1409
+ readonly "completion.notifyCommand": {
1410
+ readonly type: "string";
1411
+ readonly default: "";
1412
+ readonly ui: {
1413
+ readonly tab: "interaction";
1414
+ readonly label: "Completion Notification Command";
1415
+ readonly description: "Optional user-level shell command to run when an agent turn completes; receives SKC_NOTIFICATION_* environment variables. On Windows, this can call PowerShell [Console]::Beep when terminal BEL is silent.";
1416
+ };
1417
+ };
1347
1418
  readonly "ask.timeout": {
1348
1419
  readonly type: "number";
1349
1420
  readonly default: 0;
@@ -2573,6 +2644,11 @@ export declare const SETTINGS_SCHEMA: {
2573
2644
  readonly description: "Enable the web_search tool for web searching";
2574
2645
  };
2575
2646
  };
2647
+ readonly "web_search.provider": {
2648
+ readonly type: "enum";
2649
+ readonly values: readonly ["auto", "duckduckgo", "insane", "exa", "brave", "jina", "kimi", "zai", "anthropic", "perplexity", "gemini", "codex", "xai", "tavily", "parallel", "kagi", "synthetic", "searxng"];
2650
+ readonly default: "auto";
2651
+ };
2576
2652
  readonly "web_search.fallback": {
2577
2653
  readonly type: "array";
2578
2654
  readonly default: string[];
@@ -2837,7 +2913,7 @@ export declare const SETTINGS_SCHEMA: {
2837
2913
  readonly "tools.discoveryMode": {
2838
2914
  readonly type: "enum";
2839
2915
  readonly values: readonly ["off", "all"];
2840
- readonly default: "off";
2916
+ readonly default: "all";
2841
2917
  readonly ui: {
2842
2918
  readonly tab: "tools";
2843
2919
  readonly label: "Tool Discovery";
@@ -2850,7 +2926,7 @@ export declare const SETTINGS_SCHEMA: {
2850
2926
  readonly ui: {
2851
2927
  readonly tab: "tools";
2852
2928
  readonly label: "Essential Tools Override";
2853
- readonly description: "Override the always-loaded built-in tools (default: read, bash, edit). Leave empty to use defaults.";
2929
+ readonly description: "Override the always-loaded built-in tools (default: read, bash, edit, write, search, find). Leave empty to use defaults.";
2854
2930
  };
2855
2931
  };
2856
2932
  readonly "mcp.enableProjectConfig": {
@@ -3590,6 +3666,180 @@ export declare const SETTINGS_SCHEMA: {
3590
3666
  readonly description: "Score threshold (0\u2013100) above which block mode denies install. Default 60.";
3591
3667
  };
3592
3668
  };
3669
+ readonly "telegram.enabled": {
3670
+ readonly type: "boolean";
3671
+ readonly default: false;
3672
+ readonly ui: {
3673
+ readonly tab: "integrations";
3674
+ readonly label: "Telegram Remote";
3675
+ readonly description: "Enable two-way Telegram bot control of skc sessions";
3676
+ };
3677
+ };
3678
+ readonly "telegram.botToken": {
3679
+ readonly type: "string";
3680
+ readonly default: undefined;
3681
+ readonly ui: {
3682
+ readonly tab: "integrations";
3683
+ readonly label: "Bot Token";
3684
+ readonly description: "Telegram bot token from @BotFather (required when enabled)";
3685
+ };
3686
+ };
3687
+ readonly "telegram.allowedUserIds": {
3688
+ readonly type: "string";
3689
+ readonly default: undefined;
3690
+ readonly ui: {
3691
+ readonly tab: "integrations";
3692
+ readonly label: "Allowed User IDs";
3693
+ readonly description: "Comma-separated Telegram user IDs permitted to send commands";
3694
+ };
3695
+ };
3696
+ readonly "telegram.allowedChatIds": {
3697
+ readonly type: "string";
3698
+ readonly default: undefined;
3699
+ readonly ui: {
3700
+ readonly tab: "integrations";
3701
+ readonly label: "Allowed Chat IDs";
3702
+ readonly description: "Comma-separated Telegram chat IDs permitted to send commands";
3703
+ };
3704
+ };
3705
+ readonly "telegram.backend": {
3706
+ readonly type: "enum";
3707
+ readonly values: readonly ["coordinator", "rpc"];
3708
+ readonly default: "coordinator";
3709
+ readonly ui: {
3710
+ readonly tab: "integrations";
3711
+ readonly label: "Backend";
3712
+ readonly description: "Coordinator (multi-session lifecycle) or RPC (single persistent session)";
3713
+ readonly options: readonly [{
3714
+ readonly value: "coordinator";
3715
+ readonly label: "Coordinator";
3716
+ readonly description: "Multi-session lifecycle + observation";
3717
+ }, {
3718
+ readonly value: "rpc";
3719
+ readonly label: "RPC";
3720
+ readonly description: "Attach/detach to one persistent session socket";
3721
+ }];
3722
+ };
3723
+ };
3724
+ readonly "telegram.enableStop": {
3725
+ readonly type: "boolean";
3726
+ readonly default: false;
3727
+ readonly ui: {
3728
+ readonly tab: "integrations";
3729
+ readonly label: "Enable /stop";
3730
+ readonly description: "Allow graceful stop requests (adds the reports mutation class)";
3731
+ };
3732
+ };
3733
+ readonly "telegram.enableRich": {
3734
+ readonly type: "boolean";
3735
+ readonly default: true;
3736
+ readonly ui: {
3737
+ readonly tab: "integrations";
3738
+ readonly label: "Rich Messages";
3739
+ readonly description: "HTML formatting + inline keyboards";
3740
+ };
3741
+ };
3742
+ readonly "telegram.enablePush": {
3743
+ readonly type: "boolean";
3744
+ readonly default: false;
3745
+ readonly ui: {
3746
+ readonly tab: "integrations";
3747
+ readonly label: "Push Notifications";
3748
+ readonly description: "Follow/Mute subscriptions via coordinator event watch";
3749
+ };
3750
+ };
3751
+ readonly "telegram.registerCommands": {
3752
+ readonly type: "boolean";
3753
+ readonly default: true;
3754
+ readonly ui: {
3755
+ readonly tab: "integrations";
3756
+ readonly label: "Register Bot Menu";
3757
+ readonly description: "Register the Bot command menu at startup";
3758
+ };
3759
+ };
3760
+ readonly "telegram.presets": {
3761
+ readonly type: "string";
3762
+ readonly default: undefined;
3763
+ readonly ui: {
3764
+ readonly tab: "integrations";
3765
+ readonly label: "Session Presets";
3766
+ readonly description: "JSON array of {id, workdir, sessionCommand, taskTemplate?, taskMaxLen?}";
3767
+ };
3768
+ };
3769
+ readonly "telegram.rpcSocket": {
3770
+ readonly type: "string";
3771
+ readonly default: undefined;
3772
+ readonly ui: {
3773
+ readonly tab: "integrations";
3774
+ readonly label: "RPC Socket";
3775
+ readonly description: "Path to the skc launch --output rpc UNIX socket (RPC backend only)";
3776
+ };
3777
+ };
3778
+ readonly "telegram.stateDir": {
3779
+ readonly type: "string";
3780
+ readonly default: undefined;
3781
+ readonly ui: {
3782
+ readonly tab: "integrations";
3783
+ readonly label: "State Directory";
3784
+ readonly description: "Gateway state dir for reconnect/resync (required for RPC backend)";
3785
+ };
3786
+ };
3787
+ readonly "telegram.pollTimeoutSec": {
3788
+ readonly type: "number";
3789
+ readonly default: 30;
3790
+ };
3791
+ readonly "telegram.apiBase": {
3792
+ readonly type: "string";
3793
+ readonly default: undefined;
3794
+ };
3795
+ readonly "telegram.coordinatorCommand": {
3796
+ readonly type: "string";
3797
+ readonly default: "skc";
3798
+ };
3799
+ readonly "telegram.coordinatorArgs": {
3800
+ readonly type: "string";
3801
+ readonly default: "mcp-serve,coordinator";
3802
+ };
3803
+ readonly "telegram.enableEditMessageText": {
3804
+ readonly type: "boolean";
3805
+ readonly default: false;
3806
+ };
3807
+ readonly "telegram.richCallbackTtlMs": {
3808
+ readonly type: "number";
3809
+ readonly default: 600000;
3810
+ };
3811
+ readonly "telegram.richCallbackMaxTokens": {
3812
+ readonly type: "number";
3813
+ readonly default: 500;
3814
+ };
3815
+ readonly "telegram.defaultTaskMaxLen": {
3816
+ readonly type: "number";
3817
+ readonly default: 2000;
3818
+ };
3819
+ readonly "telegram.livenessMs": {
3820
+ readonly type: "number";
3821
+ readonly default: 60000;
3822
+ };
3823
+ readonly "telegram.followTtlMs": {
3824
+ readonly type: "number";
3825
+ readonly default: 86400000;
3826
+ };
3827
+ readonly "telegram.subscriptionsMax": {
3828
+ readonly type: "number";
3829
+ readonly default: 1000;
3830
+ };
3831
+ readonly "telegram.longPollMs": {
3832
+ readonly type: "number";
3833
+ readonly default: 25000;
3834
+ };
3835
+ readonly "telegram.digestThreshold": {
3836
+ readonly type: "number";
3837
+ readonly default: 5;
3838
+ };
3839
+ readonly "telegram.allowAttachSocketArg": {
3840
+ readonly type: "boolean";
3841
+ readonly default: false;
3842
+ };
3593
3843
  };
3594
3844
  type Schema = typeof SETTINGS_SCHEMA;
3595
3845
  /** All valid setting paths */
@@ -3707,6 +3957,7 @@ export interface ExaSettings {
3707
3957
  export interface StatusLineSettings {
3708
3958
  preset: StatusLinePreset;
3709
3959
  separator: StatusLineSeparatorStyle;
3960
+ maxRows: number;
3710
3961
  showHookStatus: boolean;
3711
3962
  showSkillHud: boolean;
3712
3963
  leftSegments: StatusLineSegmentId[];
@@ -3761,6 +4012,34 @@ export interface NotificationsSettings {
3761
4012
  idleTimeoutMs: number;
3762
4013
  };
3763
4014
  }
4015
+ export interface TelegramSettings {
4016
+ enabled: boolean;
4017
+ botToken: string | undefined;
4018
+ allowedUserIds: string | undefined;
4019
+ allowedChatIds: string | undefined;
4020
+ backend: "coordinator" | "rpc";
4021
+ enableStop: boolean;
4022
+ enableRich: boolean;
4023
+ enablePush: boolean;
4024
+ registerCommands: boolean;
4025
+ presets: string | undefined;
4026
+ rpcSocket: string | undefined;
4027
+ stateDir: string | undefined;
4028
+ pollTimeoutSec: number;
4029
+ apiBase: string | undefined;
4030
+ coordinatorCommand: string;
4031
+ coordinatorArgs: string;
4032
+ enableEditMessageText: boolean;
4033
+ richCallbackTtlMs: number;
4034
+ richCallbackMaxTokens: number;
4035
+ defaultTaskMaxLen: number;
4036
+ livenessMs: number;
4037
+ followTtlMs: number;
4038
+ subscriptionsMax: number;
4039
+ longPollMs: number;
4040
+ digestThreshold: number;
4041
+ allowAttachSocketArg: boolean;
4042
+ }
3764
4043
  /** Map group prefix -> typed settings interface */
3765
4044
  export interface GroupTypeMap {
3766
4045
  compaction: CompactionSettings;
@@ -3779,6 +4058,7 @@ export interface GroupTypeMap {
3779
4058
  modelTags: ModelTagsSettings;
3780
4059
  cycleOrder: string[];
3781
4060
  shellMinimizer: ShellMinimizerSettings;
4061
+ telegram: TelegramSettings;
3782
4062
  notifications: NotificationsSettings;
3783
4063
  }
3784
4064
  export type GroupPrefix = keyof GroupTypeMap;
@@ -54,6 +54,13 @@ export declare class Settings {
54
54
  * Returns the merged value from global + project + overrides, or the default.
55
55
  */
56
56
  get<P extends SettingPath>(path: P): SettingValue<P>;
57
+ /**
58
+ * Get a setting value from the user/global config only.
59
+ *
60
+ * Use for machine-local command hooks and other settings that must not be
61
+ * activated by project-scoped config files.
62
+ */
63
+ getGlobal<P extends SettingPath>(path: P): SettingValue<P> | undefined;
57
64
  /** Check whether a setting is present in loaded settings/overrides rather than coming from schema defaults. */
58
65
  has(path: SettingPath): boolean;
59
66
  /**
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Auto-start the Telegram Remote gateway when `telegram.enabled` is on.
3
+ *
4
+ * Called once during skc startup (interactive / persistent modes only — not
5
+ * `-p` print or auto-print). Spawns the gateway as a detached background
6
+ * process, tracks its PID so repeated skc invocations don't double-spawn,
7
+ * and redirects output to a log file under the config root.
8
+ */
9
+ /**
10
+ * If `telegram.enabled` is true and the gateway is not already running, spawn
11
+ * it in the background. Never throws — failures are logged as warnings so the
12
+ * main skc session is unaffected.
13
+ */
14
+ export declare function maybeAutostartTelegramRemote(): Promise<void>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Bridge between skc settings (`telegram.*`) and the
3
+ * `@sayknow-cli/telegram-remote` gateway's environment-driven config
4
+ * (`loadConfigFromEnv` in packages/telegram-remote/src/config.ts).
5
+ *
6
+ * The gateway is a standalone process (`skc-telegram-remote`) that reads all
7
+ * configuration from `SKC_TELEGRAM_REMOTE_*` env vars. This module converts the
8
+ * typed settings group into those env vars so skc can spawn the gateway with a
9
+ * consistent, settings-page-driven configuration.
10
+ */
11
+ import type { TelegramSettings } from "./settings-schema";
12
+ /** Convert telegram settings into the env-var map the gateway expects. */
13
+ export declare function telegramSettingsToEnv(s: TelegramSettings): Record<string, string>;
14
+ /**
15
+ * Validate telegram settings before spawning the gateway.
16
+ * Returns a list of human-readable error strings (empty when valid).
17
+ */
18
+ export declare function validateTelegramSettings(s: TelegramSettings): string[];
@@ -45,6 +45,14 @@ interface LegacyHandlerOptions {
45
45
  env?: NodeJS.ProcessEnv;
46
46
  createSession?: () => unknown;
47
47
  }
48
+ export declare const COORDINATOR_AWAIT_TURN_TIMEOUT_MAX_MS: number;
49
+ export declare const COORDINATOR_RUNTIME_PROMPT_ACK_TIMEOUT_MAX_MS: number;
50
+ export declare const COORDINATOR_EVENT_WATCH_TIMEOUT_MAX_MS = 30000;
51
+ export declare const COORDINATOR_POLL_INTERVAL_MAX_MS = 10000;
52
+ export declare function boundedAwaitTurnTimeoutMs(value: unknown): number;
53
+ export declare function boundedRuntimePromptAckTimeoutMs(value: unknown): number;
54
+ export declare function boundedEventWatchTimeoutMs(value: unknown): number;
55
+ export declare function boundedPollIntervalMs(value: unknown): number;
48
56
  export declare function readCoordinatorArtifact(config: CoordinatorMcpConfig, args: {
49
57
  path: unknown;
50
58
  }): Promise<Record<string, unknown>>;
@@ -27,6 +27,13 @@ export type DefaultSkcDefinition = DefaultSkcSkillDefinition | DefaultSkcSkillFr
27
27
  export interface InstallDefaultSkcDefinitionsOptions {
28
28
  check?: boolean;
29
29
  force?: boolean;
30
+ /**
31
+ * Only rewrite default definition files that already exist on disk but whose
32
+ * content differs from the embedded defaults. Files that are absent are left
33
+ * absent (status "missing"). Used by `skc update` to refresh opted-in copies
34
+ * without materializing new on-disk copies for users who never installed them.
35
+ */
36
+ refreshOnly?: boolean;
30
37
  targetRoot?: string;
31
38
  }
32
39
  export type DefaultSkcDefinitionInstallFile = {
@@ -9,8 +9,11 @@
9
9
  * - Project: .cursor/ (cwd only)
10
10
  *
11
11
  * Capabilities:
12
- * - mcps: From mcp.json with mcpServers key
13
12
  * - rules: From rules/*.mdc files with MDC frontmatter (description, globs, alwaysApply)
14
13
  * - settings: From settings.json if present
14
+ *
15
+ * MCP servers are intentionally NOT inherited live from Cursor config: SKC owns
16
+ * MCP runtime execution. Use `skc mcp import cursor` to copy definitions into
17
+ * SKC's own mcp.json instead.
15
18
  */
16
19
  export {};
@@ -28,7 +28,6 @@ import "./opencode";
28
28
  import "./github";
29
29
  import "./mcp-json";
30
30
  import "./ssh";
31
- import "./vscode";
32
31
  import "./windsurf";
33
32
  export { cacheStats, disableProvider, enableProvider, getAllCapabilitiesInfo, getAllProvidersInfo, getCapability, getCapabilityInfo, getDisabledProviders, getProviderInfo, initializeWithSettings, invalidate, isProviderEnabled, listCapabilities, loadCapability, reset, setDisabledProviders, } from "../capability";
34
33
  export type { ContextFile } from "../capability/context-file";
@@ -6,8 +6,10 @@
6
6
  * - Project: .windsurf
7
7
  *
8
8
  * Supports:
9
- * - MCP servers from mcp_config.json
10
9
  * - Rules from .windsurf/rules/*.md and ~/.codeium/windsurf/memories/global_rules.md
11
10
  * - Legacy .windsurfrules file
11
+ *
12
+ * MCP servers are intentionally NOT inherited live from Windsurf config: SKC
13
+ * owns MCP runtime execution. Copy definitions into SKC's own mcp.json instead.
12
14
  */
13
15
  export {};
@@ -76,6 +76,17 @@ export interface ExtensionUIDialogOptions {
76
76
  optionLabel: string;
77
77
  onSubmit: (text: string) => void;
78
78
  };
79
+ /**
80
+ * Inline free-text input for a non-answer clarification action. It is
81
+ * separate from `customInput` so callers can distinguish "ask about these
82
+ * choices" from "provide my own answer". Empty/whitespace-only submissions
83
+ * may be rejected by the selector when `allowEmpty` is false.
84
+ */
85
+ clarificationInput?: {
86
+ optionLabel: string;
87
+ onSubmit: (text: string) => void;
88
+ allowEmpty?: boolean;
89
+ };
79
90
  }
80
91
  /** Raw terminal input listener for extensions. */
81
92
  export type TerminalInputHandler = (data: string) => {
@@ -36,6 +36,7 @@ export declare const en: {
36
36
  readonly "settings.tab.tools": "Tools";
37
37
  readonly "settings.tab.tasks": "Tasks";
38
38
  readonly "settings.tab.providers": "Providers";
39
+ readonly "settings.tab.integrations": "Integrations";
39
40
  readonly "settings.language.label": "Language";
40
41
  readonly "settings.language.desc": "Interface language. Auto follows your system locale.";
41
42
  readonly "help.usage": "USAGE";
@@ -1,6 +1,6 @@
1
1
  import { Editor, type KeyId } from "@sayknow-cli/tui";
2
2
  import { type AppKeybinding } from "../../config/keybindings";
3
- type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.thinking.cycle" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.tools.expand" | "app.thinking.toggle" | "app.editor.external" | "app.history.search" | "app.message.dequeue" | "app.message.followUp" | "app.message.queue" | "app.clipboard.pasteImage" | "app.clipboard.copyPrompt">;
3
+ type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.thinking.cycle" | "app.commandPalette.open" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.tools.expand" | "app.thinking.toggle" | "app.editor.external" | "app.history.search" | "app.message.dequeue" | "app.message.followUp" | "app.message.queue" | "app.clipboard.pasteImage" | "app.clipboard.copyPrompt">;
4
4
  type PastePendingClearReason = "timeout" | "queue-limit";
5
5
  /**
6
6
  * Custom editor that handles configurable app-level shortcuts for coding-agent.
@@ -19,6 +19,7 @@ export declare class CustomEditor extends Editor {
19
19
  onClear?: () => void;
20
20
  onExit?: () => void;
21
21
  onCycleThinkingLevel?: () => void;
22
+ onOpenCommandPalette?: () => void;
22
23
  onCycleModelForward?: () => void;
23
24
  onCycleModelBackward?: () => void;
24
25
  onSelectModel?: () => void;
@@ -43,6 +44,10 @@ export declare class CustomEditor extends Editor {
43
44
  onQueue?: () => void;
44
45
  /** Called when Caps Lock is pressed. */
45
46
  onCapsLock?: () => void;
47
+ /** Called when PageUp/PageDown should scroll the transcript viewport instead of prompt history. */
48
+ onViewportPageScroll?: (direction: -1 | 1) => void;
49
+ /** Called before regular composer input should return the transcript viewport to the live bottom. */
50
+ onViewportFollowLive?: () => void;
46
51
  setActionKeys(action: ConfigurableEditorAction, keys: KeyId[]): void;
47
52
  /**
48
53
  * Register a custom key handler. Extensions use this for shortcuts.
@@ -6,7 +6,7 @@ export interface CustomModelPresetWizardSubmit {
6
6
  }
7
7
  export declare class CustomModelPresetWizardComponent extends Container {
8
8
  #private;
9
- constructor(onSubmit: (input: CustomModelPresetWizardSubmit) => void, onCancel: () => void, onRender?: () => void);
9
+ constructor(snapshot: ModelProfileConfig, onSubmit: (input: CustomModelPresetWizardSubmit) => void, onCancel: () => void, onRender?: () => void);
10
10
  setSubmitError(error: string): void;
11
11
  handleInput(keyData: string): void;
12
12
  }
@@ -33,6 +33,11 @@ export interface HookSelectorOptions {
33
33
  optionLabel: string;
34
34
  onSubmit: (text: string) => void;
35
35
  };
36
+ clarificationInput?: {
37
+ optionLabel: string;
38
+ onSubmit: (text: string) => void;
39
+ allowEmpty?: boolean;
40
+ };
36
41
  /**
37
42
  * Autocomplete provider for the inline custom-input editor. When present,
38
43
  * the "Other (type your own)" editor gains the same `@` file-link and `/`
@@ -3,6 +3,7 @@ import { type Model } from "@sayknow-cli/ai";
3
3
  import { Container, Input, type TUI } from "@sayknow-cli/tui";
4
4
  import type { ModelRegistry, SkcModelAssignmentTargetId } from "../../config/model-registry";
5
5
  import { type ScopedModelSelection } from "../../config/model-resolver";
6
+ import type { ModelProfileConfig } from "../../config/models-config-schema";
6
7
  import type { Settings } from "../../config/settings";
7
8
  type ScopedModelItem = ScopedModelSelection;
8
9
  export type ModelSelectorSelection = {
@@ -17,6 +18,7 @@ export type ModelSelectorSelection = {
17
18
  setDefault: boolean;
18
19
  } | {
19
20
  kind: "createProfile";
21
+ profile: ModelProfileConfig;
20
22
  } | {
21
23
  kind: "login";
22
24
  providerId: string;
@@ -4,6 +4,7 @@ import { Container, SettingsList } from "@sayknow-cli/tui";
4
4
  import { type SettingPath } from "../../config/settings";
5
5
  import type { StatusLinePreset, StatusLineSegmentId, StatusLineSeparatorStyle } from "../../config/settings-schema";
6
6
  import { PluginSettingsComponent } from "./plugin-settings";
7
+ import type { StatusLineSegmentOptions } from "./status-line";
7
8
  /**
8
9
  * Dynamic context for settings that need runtime data.
9
10
  * Some settings (like thinking level) are managed by the session, not Settings.
@@ -24,7 +25,10 @@ export interface StatusLinePreviewSettings {
24
25
  leftSegments?: StatusLineSegmentId[];
25
26
  rightSegments?: StatusLineSegmentId[];
26
27
  separator?: StatusLineSeparatorStyle;
28
+ segmentOptions?: StatusLineSegmentOptions;
29
+ previewHighlightSegment?: StatusLineSegmentId;
27
30
  sessionAccent?: boolean;
31
+ maxRows?: number;
28
32
  }
29
33
  export interface SettingsCallbacks {
30
34
  /** Called when any setting value changes */
@@ -36,7 +40,7 @@ export interface SettingsCallbacks {
36
40
  /** Called for status line preview while configuring */
37
41
  onStatusLinePreview?: (settings: StatusLinePreviewSettings) => void;
38
42
  /** Get current rendered status line for inline preview */
39
- getStatusLinePreview?: () => string;
43
+ getStatusLinePreview?: (width?: number) => string;
40
44
  /** Called when plugins change */
41
45
  onPluginsChanged?: () => void;
42
46
  /** Called when settings panel is closed */
@@ -6,4 +6,5 @@ export declare class SkillMessageComponent extends Container {
6
6
  constructor(message: CustomMessage<SkillPromptDetails>);
7
7
  setExpanded(expanded: boolean): void;
8
8
  invalidate(): void;
9
+ render(width: number): string[];
9
10
  }
@@ -44,14 +44,12 @@ export interface SegmentContext {
44
44
  } | null;
45
45
  };
46
46
  usage: {
47
- fiveHour?: {
47
+ windows: Array<{
48
+ label: string;
48
49
  percent: number;
49
- resetMinutes?: number;
50
- };
51
- sevenDay?: {
52
- percent: number;
53
- resetHours?: number;
54
- };
50
+ resetValue?: number;
51
+ resetUnit?: "m" | "h";
52
+ }>;
55
53
  } | null;
56
54
  }
57
55
  export interface RenderedSegment {