@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
@@ -13,18 +13,20 @@ import {
13
13
  import { getMarkdownTheme, theme } from "../../modes/theme/theme";
14
14
  import type { CustomMessage, SkillPromptDetails } from "../../session/messages";
15
15
 
16
- const COLLAPSED_ARGS_PREVIEW_WIDTH = 96;
16
+ const DEFAULT_COLLAPSED_ARGS_PREVIEW_WIDTH = 96;
17
17
  const COLLAPSED_ARGS_PREVIEW_LINES = 6;
18
+ const SKILL_BOX_HORIZONTAL_PADDING = 1;
18
19
  export class SkillMessageComponent extends Container {
19
20
  #box: Box;
20
21
  #contentComponent?: Component;
21
22
  #expanded = false;
23
+ #argsPreviewWidth = DEFAULT_COLLAPSED_ARGS_PREVIEW_WIDTH;
22
24
 
23
25
  constructor(private readonly message: CustomMessage<SkillPromptDetails>) {
24
26
  super();
25
27
  this.addChild(new Spacer(1));
26
28
 
27
- this.#box = new Box(1, 1, t => theme.bg("customMessageBg", t));
29
+ this.#box = new Box(SKILL_BOX_HORIZONTAL_PADDING, 1, t => theme.bg("customMessageBg", t));
28
30
  this.#rebuild();
29
31
  }
30
32
 
@@ -40,6 +42,15 @@ export class SkillMessageComponent extends Container {
40
42
  this.#rebuild();
41
43
  }
42
44
 
45
+ override render(width: number): string[] {
46
+ const contentWidth = Math.max(1, width - SKILL_BOX_HORIZONTAL_PADDING * 2);
47
+ if (this.#argsPreviewWidth !== contentWidth) {
48
+ this.#argsPreviewWidth = contentWidth;
49
+ this.#rebuild();
50
+ }
51
+ return super.render(width);
52
+ }
53
+
43
54
  #rebuild(): void {
44
55
  if (this.#contentComponent) {
45
56
  this.removeChild(this.#contentComponent);
@@ -57,7 +68,7 @@ export class SkillMessageComponent extends Container {
57
68
  // Collapsed view keeps args readable without exposing the full prompt body.
58
69
  // Each visual line is bounded, but multi-line arguments remain multi-line so
59
70
  // the invocation context is not mistaken for a one-line truncated payload.
60
- const argsPreview = args ? this.#formatArgsPreview(args) : [];
71
+ const argsPreview = args ? this.#formatArgsPreview(args, this.#argsPreviewWidth) : [];
61
72
  const header = `${theme.fg("customMessageLabel", theme.bold("[skill]"))} ${theme.fg("customMessageText", name)}`;
62
73
  this.#box.addChild(new Text(header, 0, 0));
63
74
  if (argsPreview.length > 0) {
@@ -111,19 +122,19 @@ export class SkillMessageComponent extends Container {
111
122
  this.#box.addChild(this.#contentComponent);
112
123
  }
113
124
 
114
- #formatArgsPreview(args: string): string[] {
125
+ #formatArgsPreview(args: string, width: number): string[] {
115
126
  const preview: string[] = [];
116
127
  let omitted = false;
117
128
  const sourceLines = replaceTabs(args).split(/\r?\n/);
118
129
  for (let index = 0; index < sourceLines.length; index += 1) {
119
130
  const sourceLine = sourceLines[index]?.trimEnd() ?? "";
120
- const wrapped = wrapTextWithAnsi(sourceLine.length > 0 ? sourceLine : " ", COLLAPSED_ARGS_PREVIEW_WIDTH);
131
+ const wrapped = wrapTextWithAnsi(sourceLine.length > 0 ? sourceLine : " ", width);
121
132
  for (const line of wrapped.length > 0 ? wrapped : [""]) {
122
133
  if (preview.length >= COLLAPSED_ARGS_PREVIEW_LINES) {
123
134
  omitted = true;
124
135
  break;
125
136
  }
126
- preview.push(truncateToWidth(line, COLLAPSED_ARGS_PREVIEW_WIDTH));
137
+ preview.push(truncateToWidth(line, width));
127
138
  }
128
139
  if (omitted) break;
129
140
  }
@@ -132,10 +143,7 @@ export class SkillMessageComponent extends Container {
132
143
  omitted ||= replaceTabs(args).trimEnd().length > visibleSource.trimEnd().length;
133
144
  }
134
145
  if (omitted && preview.length > 0) {
135
- preview[preview.length - 1] = truncateToWidth(
136
- `${preview[preview.length - 1]} …`,
137
- COLLAPSED_ARGS_PREVIEW_WIDTH,
138
- );
146
+ preview[preview.length - 1] = truncateToWidth(`${preview[preview.length - 1]} …`, width);
139
147
  }
140
148
  return preview;
141
149
  }
@@ -24,6 +24,17 @@ export const STATUS_LINE_PRESETS: Record<StatusLinePreset, PresetDef> = {
24
24
  },
25
25
  },
26
26
 
27
+ "default-usage": {
28
+ leftSegments: ["model", "mode", "git", "pr", "path"],
29
+ rightSegments: ["session_name", "jobs", "token_rate", "usage", "context_pct", "cost"],
30
+ separator: "slash",
31
+ segmentOptions: {
32
+ model: { showThinkingLevel: true },
33
+ path: { abbreviate: true, maxLength: 32, stripWorkPrefix: true },
34
+ git: { showBranch: true, showStaged: true, showUnstaged: true, showUntracked: true },
35
+ },
36
+ },
37
+
27
38
  minimal: {
28
39
  leftSegments: ["path", "git"],
29
40
  rightSegments: ["session_name", "jobs", "mode", "context_pct"],
@@ -495,7 +495,12 @@ const sessionNameSegment: StatusLineSegment = {
495
495
  },
496
496
  };
497
497
 
498
- function pickUsageColor(percent: number): "muted" | "warning" | "error" {
498
+ function pickUsageColor(percent: number, mode: "used" | "remaining"): "muted" | "warning" | "error" {
499
+ if (mode === "remaining") {
500
+ if (percent <= 20) return "error";
501
+ if (percent <= 50) return "warning";
502
+ return "muted";
503
+ }
499
504
  if (percent >= 80) return "error";
500
505
  if (percent >= 50) return "warning";
501
506
  return "muted";
@@ -520,28 +525,20 @@ const usageSegment: StatusLineSegment = {
520
525
  id: "usage",
521
526
  render(ctx) {
522
527
  const u = ctx.usage;
523
- if (!u || (!u.fiveHour && !u.sevenDay)) {
528
+ if (!u || u.windows.length === 0) {
524
529
  return { content: "", visible: false };
525
530
  }
526
- const parts: string[] = [];
527
- if (u.fiveHour) {
528
- const pct = u.fiveHour.percent;
529
- const pctText = theme.fg(pickUsageColor(pct), `${Math.round(pct)}%`);
530
- const reset =
531
- u.fiveHour.resetMinutes !== undefined
532
- ? theme.fg("muted", ` (${formatUsageReset(u.fiveHour.resetMinutes, "m")})`)
533
- : "";
534
- parts.push(`5h ${pctText}${reset}`);
535
- }
536
- if (u.sevenDay) {
537
- const pct = u.sevenDay.percent;
538
- const pctText = theme.fg(pickUsageColor(pct), `${Math.round(pct)}%`);
531
+ const mode = ctx.options.usage?.mode === "remaining" ? "remaining" : "used";
532
+ const parts = u.windows.map(window => {
533
+ const displayPercent =
534
+ mode === "remaining" ? Math.max(0, Math.min(100, 100 - window.percent)) : window.percent;
535
+ const pctText = theme.fg(pickUsageColor(displayPercent, mode), `${Math.round(displayPercent)}%`);
539
536
  const reset =
540
- u.sevenDay.resetHours !== undefined
541
- ? theme.fg("muted", ` (${formatUsageReset(u.sevenDay.resetHours, "h")})`)
537
+ window.resetValue !== undefined && window.resetUnit !== undefined
538
+ ? theme.fg("muted", ` (${formatUsageReset(window.resetValue, window.resetUnit)})`)
542
539
  : "";
543
- parts.push(`7d ${pctText}${reset}`);
544
- }
540
+ return `${window.label} ${pctText}${reset}`;
541
+ });
545
542
  const content = withIcon(theme.icon.time, parts.join(theme.sep.dot));
546
543
  return { content, visible: true };
547
544
  },
@@ -51,8 +51,12 @@ export interface SegmentContext {
51
51
  pr: { number: number; url: string } | null;
52
52
  };
53
53
  usage: {
54
- fiveHour?: { percent: number; resetMinutes?: number };
55
- sevenDay?: { percent: number; resetHours?: number };
54
+ windows: Array<{
55
+ label: string;
56
+ percent: number;
57
+ resetValue?: number;
58
+ resetUnit?: "m" | "h";
59
+ }>;
56
60
  } | null;
57
61
  }
58
62