@gajae-code/coding-agent 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/CHANGELOG.md +34 -8600
  2. package/README.md +1 -1
  3. package/dist/types/async/job-manager.d.ts +61 -0
  4. package/dist/types/cli/update-cli.d.ts +3 -0
  5. package/dist/types/config/settings-schema.d.ts +27 -3
  6. package/dist/types/config/settings.d.ts +1 -1
  7. package/dist/types/defaults/gjc-defaults.d.ts +19 -6
  8. package/dist/types/discovery/helpers.d.ts +1 -0
  9. package/dist/types/exec/bash-executor.d.ts +8 -1
  10. package/dist/types/gjc-runtime/restricted-role-agent-bash.d.ts +2 -0
  11. package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -1
  12. package/dist/types/modes/components/settings-selector.d.ts +4 -0
  13. package/dist/types/modes/components/skill-hud/render.d.ts +1 -1
  14. package/dist/types/modes/controllers/selector-controller.d.ts +1 -0
  15. package/dist/types/modes/interactive-mode.d.ts +2 -0
  16. package/dist/types/modes/theme/defaults/index.d.ts +45 -9351
  17. package/dist/types/modes/theme/theme.d.ts +6 -5
  18. package/dist/types/modes/types.d.ts +2 -0
  19. package/dist/types/sdk.d.ts +2 -0
  20. package/dist/types/session/streaming-output.d.ts +11 -0
  21. package/dist/types/skill-state/active-state.d.ts +1 -0
  22. package/dist/types/task/types.d.ts +1 -0
  23. package/dist/types/tools/bash-allowed-prefixes.d.ts +5 -0
  24. package/dist/types/tools/bash.d.ts +24 -0
  25. package/dist/types/tools/cron.d.ts +110 -0
  26. package/dist/types/tools/index.d.ts +4 -0
  27. package/dist/types/tools/monitor.d.ts +54 -0
  28. package/dist/types/web/search/index.d.ts +1 -0
  29. package/dist/types/web/search/provider.d.ts +11 -4
  30. package/dist/types/web/search/providers/duckduckgo.d.ts +57 -0
  31. package/dist/types/web/search/types.d.ts +1 -1
  32. package/package.json +7 -7
  33. package/src/async/job-manager.ts +224 -0
  34. package/src/cli/agents-cli.ts +3 -0
  35. package/src/cli/update-cli.ts +67 -16
  36. package/src/config/settings-schema.ts +30 -2
  37. package/src/config/settings.ts +44 -7
  38. package/src/defaults/gjc/skills/deep-interview/SKILL.md +48 -6
  39. package/src/defaults/gjc/skills/deep-interview/auto-answer-uncertain.md +37 -0
  40. package/src/defaults/gjc/skills/deep-interview/auto-research-greenfield.md +42 -0
  41. package/src/defaults/gjc/skills/ralplan/SKILL.md +8 -4
  42. package/src/defaults/gjc/skills/ultragoal/SKILL.md +9 -6
  43. package/src/defaults/gjc-defaults.ts +68 -16
  44. package/src/discovery/helpers.ts +5 -0
  45. package/src/eval/js/shared/rewrite-imports.ts +1 -2
  46. package/src/exec/bash-executor.ts +20 -9
  47. package/src/gjc-runtime/deep-interview-runtime.ts +44 -0
  48. package/src/gjc-runtime/ralplan-runtime.ts +2 -0
  49. package/src/gjc-runtime/restricted-role-agent-bash.ts +5 -0
  50. package/src/gjc-runtime/state-runtime.ts +3 -2
  51. package/src/goals/tools/goal-tool.ts +5 -1
  52. package/src/hooks/skill-state.ts +1 -1
  53. package/src/internal-urls/docs-index.generated.ts +8 -4
  54. package/src/lsp/render.ts +1 -1
  55. package/src/memories/index.ts +5 -4
  56. package/src/modes/acp/acp-agent.ts +1 -1
  57. package/src/modes/acp/acp-client-bridge.ts +1 -1
  58. package/src/modes/components/agent-dashboard.ts +1 -1
  59. package/src/modes/components/diff.ts +2 -2
  60. package/src/modes/components/settings-selector.ts +25 -14
  61. package/src/modes/components/skill-hud/render.ts +7 -2
  62. package/src/modes/controllers/command-controller.ts +1 -1
  63. package/src/modes/controllers/input-controller.ts +10 -2
  64. package/src/modes/controllers/selector-controller.ts +67 -0
  65. package/src/modes/interactive-mode.ts +34 -3
  66. package/src/modes/theme/defaults/blue-crab.json +126 -0
  67. package/src/modes/theme/defaults/index.ts +2 -196
  68. package/src/modes/theme/theme.ts +75 -36
  69. package/src/modes/types.ts +2 -0
  70. package/src/prompts/agents/architect.md +5 -1
  71. package/src/prompts/agents/critic.md +5 -1
  72. package/src/prompts/agents/frontmatter.md +1 -0
  73. package/src/prompts/agents/planner.md +5 -1
  74. package/src/prompts/memories/unavailable.md +9 -0
  75. package/src/prompts/tools/bash.md +9 -0
  76. package/src/prompts/tools/cron.md +25 -0
  77. package/src/prompts/tools/monitor.md +30 -0
  78. package/src/runtime-mcp/oauth-flow.ts +4 -2
  79. package/src/sdk.ts +7 -0
  80. package/src/session/agent-session.ts +16 -5
  81. package/src/session/streaming-output.ts +21 -0
  82. package/src/skill-state/active-state.ts +163 -12
  83. package/src/slash-commands/builtin-registry.ts +11 -1
  84. package/src/task/agents.ts +1 -0
  85. package/src/task/executor.ts +1 -0
  86. package/src/task/types.ts +1 -0
  87. package/src/tools/bash-allowed-prefixes.ts +169 -0
  88. package/src/tools/bash.ts +190 -29
  89. package/src/tools/browser/tab-worker.ts +1 -1
  90. package/src/tools/cron.ts +665 -0
  91. package/src/tools/index.ts +20 -2
  92. package/src/tools/monitor.ts +136 -0
  93. package/src/vim/engine.ts +3 -3
  94. package/src/web/search/index.ts +31 -18
  95. package/src/web/search/provider.ts +57 -12
  96. package/src/web/search/providers/duckduckgo.ts +279 -0
  97. package/src/web/search/types.ts +2 -0
  98. package/src/modes/theme/dark.json +0 -95
  99. package/src/modes/theme/defaults/alabaster.json +0 -93
  100. package/src/modes/theme/defaults/amethyst.json +0 -96
  101. package/src/modes/theme/defaults/anthracite.json +0 -93
  102. package/src/modes/theme/defaults/basalt.json +0 -91
  103. package/src/modes/theme/defaults/birch.json +0 -95
  104. package/src/modes/theme/defaults/dark-abyss.json +0 -91
  105. package/src/modes/theme/defaults/dark-arctic.json +0 -104
  106. package/src/modes/theme/defaults/dark-aurora.json +0 -95
  107. package/src/modes/theme/defaults/dark-catppuccin.json +0 -107
  108. package/src/modes/theme/defaults/dark-cavern.json +0 -91
  109. package/src/modes/theme/defaults/dark-copper.json +0 -95
  110. package/src/modes/theme/defaults/dark-cosmos.json +0 -90
  111. package/src/modes/theme/defaults/dark-cyberpunk.json +0 -102
  112. package/src/modes/theme/defaults/dark-dracula.json +0 -98
  113. package/src/modes/theme/defaults/dark-eclipse.json +0 -91
  114. package/src/modes/theme/defaults/dark-ember.json +0 -95
  115. package/src/modes/theme/defaults/dark-equinox.json +0 -90
  116. package/src/modes/theme/defaults/dark-forest.json +0 -96
  117. package/src/modes/theme/defaults/dark-github.json +0 -105
  118. package/src/modes/theme/defaults/dark-gruvbox.json +0 -112
  119. package/src/modes/theme/defaults/dark-lavender.json +0 -95
  120. package/src/modes/theme/defaults/dark-lunar.json +0 -89
  121. package/src/modes/theme/defaults/dark-midnight.json +0 -95
  122. package/src/modes/theme/defaults/dark-monochrome.json +0 -94
  123. package/src/modes/theme/defaults/dark-monokai.json +0 -98
  124. package/src/modes/theme/defaults/dark-nebula.json +0 -90
  125. package/src/modes/theme/defaults/dark-nord.json +0 -97
  126. package/src/modes/theme/defaults/dark-ocean.json +0 -101
  127. package/src/modes/theme/defaults/dark-one.json +0 -100
  128. package/src/modes/theme/defaults/dark-poimandres.json +0 -141
  129. package/src/modes/theme/defaults/dark-rainforest.json +0 -91
  130. package/src/modes/theme/defaults/dark-reef.json +0 -91
  131. package/src/modes/theme/defaults/dark-retro.json +0 -92
  132. package/src/modes/theme/defaults/dark-rose-pine.json +0 -96
  133. package/src/modes/theme/defaults/dark-sakura.json +0 -95
  134. package/src/modes/theme/defaults/dark-slate.json +0 -95
  135. package/src/modes/theme/defaults/dark-solarized.json +0 -97
  136. package/src/modes/theme/defaults/dark-solstice.json +0 -90
  137. package/src/modes/theme/defaults/dark-starfall.json +0 -91
  138. package/src/modes/theme/defaults/dark-sunset.json +0 -99
  139. package/src/modes/theme/defaults/dark-swamp.json +0 -90
  140. package/src/modes/theme/defaults/dark-synthwave.json +0 -103
  141. package/src/modes/theme/defaults/dark-taiga.json +0 -91
  142. package/src/modes/theme/defaults/dark-terminal.json +0 -95
  143. package/src/modes/theme/defaults/dark-tokyo-night.json +0 -101
  144. package/src/modes/theme/defaults/dark-tundra.json +0 -91
  145. package/src/modes/theme/defaults/dark-twilight.json +0 -91
  146. package/src/modes/theme/defaults/dark-volcanic.json +0 -91
  147. package/src/modes/theme/defaults/graphite.json +0 -92
  148. package/src/modes/theme/defaults/light-arctic.json +0 -107
  149. package/src/modes/theme/defaults/light-aurora-day.json +0 -91
  150. package/src/modes/theme/defaults/light-canyon.json +0 -91
  151. package/src/modes/theme/defaults/light-catppuccin.json +0 -106
  152. package/src/modes/theme/defaults/light-cirrus.json +0 -90
  153. package/src/modes/theme/defaults/light-coral.json +0 -95
  154. package/src/modes/theme/defaults/light-cyberpunk.json +0 -96
  155. package/src/modes/theme/defaults/light-dawn.json +0 -90
  156. package/src/modes/theme/defaults/light-dunes.json +0 -91
  157. package/src/modes/theme/defaults/light-eucalyptus.json +0 -95
  158. package/src/modes/theme/defaults/light-forest.json +0 -100
  159. package/src/modes/theme/defaults/light-frost.json +0 -95
  160. package/src/modes/theme/defaults/light-github.json +0 -115
  161. package/src/modes/theme/defaults/light-glacier.json +0 -91
  162. package/src/modes/theme/defaults/light-gruvbox.json +0 -108
  163. package/src/modes/theme/defaults/light-haze.json +0 -90
  164. package/src/modes/theme/defaults/light-honeycomb.json +0 -95
  165. package/src/modes/theme/defaults/light-lagoon.json +0 -91
  166. package/src/modes/theme/defaults/light-lavender.json +0 -95
  167. package/src/modes/theme/defaults/light-meadow.json +0 -91
  168. package/src/modes/theme/defaults/light-mint.json +0 -95
  169. package/src/modes/theme/defaults/light-monochrome.json +0 -101
  170. package/src/modes/theme/defaults/light-ocean.json +0 -99
  171. package/src/modes/theme/defaults/light-one.json +0 -99
  172. package/src/modes/theme/defaults/light-opal.json +0 -91
  173. package/src/modes/theme/defaults/light-orchard.json +0 -91
  174. package/src/modes/theme/defaults/light-paper.json +0 -95
  175. package/src/modes/theme/defaults/light-poimandres.json +0 -141
  176. package/src/modes/theme/defaults/light-prism.json +0 -90
  177. package/src/modes/theme/defaults/light-retro.json +0 -98
  178. package/src/modes/theme/defaults/light-sand.json +0 -95
  179. package/src/modes/theme/defaults/light-savanna.json +0 -91
  180. package/src/modes/theme/defaults/light-solarized.json +0 -102
  181. package/src/modes/theme/defaults/light-soleil.json +0 -90
  182. package/src/modes/theme/defaults/light-sunset.json +0 -99
  183. package/src/modes/theme/defaults/light-synthwave.json +0 -98
  184. package/src/modes/theme/defaults/light-tokyo-night.json +0 -111
  185. package/src/modes/theme/defaults/light-wetland.json +0 -91
  186. package/src/modes/theme/defaults/light-zenith.json +0 -89
  187. package/src/modes/theme/defaults/limestone.json +0 -94
  188. package/src/modes/theme/defaults/mahogany.json +0 -97
  189. package/src/modes/theme/defaults/marble.json +0 -93
  190. package/src/modes/theme/defaults/obsidian.json +0 -91
  191. package/src/modes/theme/defaults/onyx.json +0 -91
  192. package/src/modes/theme/defaults/pearl.json +0 -93
  193. package/src/modes/theme/defaults/porcelain.json +0 -91
  194. package/src/modes/theme/defaults/quartz.json +0 -96
  195. package/src/modes/theme/defaults/sandstone.json +0 -95
  196. package/src/modes/theme/defaults/titanium.json +0 -90
  197. package/src/modes/theme/light.json +0 -93
package/README.md CHANGED
@@ -34,4 +34,4 @@ Switching backends mid-session is honoured on the next system-prompt rebuild and
34
34
 
35
35
  ## Red-claw TUI theme
36
36
 
37
- The interactive TUI defaults to the bundled `red-claw` crustacean theme for dark terminals, with matching welcome/icon assets. Explicit user theme settings still win; set `theme.dark: red-claw` in `~/.gjc/agent/config.yml` to pin it.
37
+ The interactive TUI defaults to the bundled `red-claw` crustacean theme for dark terminals and the bundled `blue-crab` theme for light-appearance terminals, with matching welcome/icon assets. Explicit user theme settings still win; set `theme.dark: red-claw` and `theme.light: blue-crab` in `~/.gjc/agent/config.yml` to pin them.
@@ -54,6 +54,27 @@ export interface AsyncJobRegisterOptions {
54
54
  export interface AsyncJobFilter {
55
55
  ownerId?: string;
56
56
  }
57
+ /**
58
+ * A slice of process-stream output for a background job, as recorded by
59
+ * `appendOutput` / read by `readOutputSince`.
60
+ *
61
+ * The cursor model is monotonic UTF-8 byte offsets. `nextOffset` is the offset
62
+ * to pass to the next read to receive only fresh bytes; `startOffset` is the
63
+ * first byte the manager still retains for this job. When the requested offset
64
+ * is older than `startOffset`, the manager returns the retained tail and sets
65
+ * `truncated: true`.
66
+ */
67
+ export interface AsyncJobOutputSlice {
68
+ jobId: string;
69
+ status: AsyncJob["status"];
70
+ text: string;
71
+ startOffset: number;
72
+ nextOffset: number;
73
+ truncated: boolean;
74
+ }
75
+ /** Default retention cap for per-job captured output. ~512 KiB matches the
76
+ * bash tail-buffer order of magnitude without dominating session memory. */
77
+ export declare const DEFAULT_JOB_OUTPUT_RETENTION_BYTES: number;
57
78
  export declare class AsyncJobManager {
58
79
  #private;
59
80
  /** Process-global instance shared by internal URL protocol handlers and tools. */
@@ -78,6 +99,46 @@ export declare class AsyncJobManager {
78
99
  getRunningJobs(filter?: AsyncJobFilter): AsyncJob[];
79
100
  getRecentJobs(limit?: number, filter?: AsyncJobFilter): AsyncJob[];
80
101
  getAllJobs(filter?: AsyncJobFilter): AsyncJob[];
102
+ /**
103
+ * Append a sanitized process-stream chunk for a background job. Called from
104
+ * the unthrottled bash-executor capture hook (`onRawChunk`) so monitor sees
105
+ * every chunk even when preview/progress callbacks are throttled.
106
+ *
107
+ * Offsets are in UTF-8 bytes. Storing chunk metadata avoids unsafe byte
108
+ * slicing across multibyte characters at read time. The retention window is
109
+ * a per-job rolling cap (`DEFAULT_JOB_OUTPUT_RETENTION_BYTES`); when it
110
+ * overflows, oldest whole chunks are evicted and `startOffset` advances —
111
+ * subsequent reads from a stale offset get `truncated: true`.
112
+ */
113
+ appendOutput(jobId: string, chunk: string): void;
114
+ /**
115
+ * Read fresh process-stream output for a job since `offset` (in UTF-8
116
+ * bytes). Returns `undefined` when the job does not exist or when an
117
+ * `ownerId` filter is set and the job belongs to a different owner — this
118
+ * mirrors the manager-level "not found" pattern used by `cancel`.
119
+ *
120
+ * - `offset < startOffset` returns the retained tail with `truncated: true`.
121
+ * - `offset > nextOffset` clamps to `nextOffset` and returns an empty text
122
+ * slice with `truncated: false`.
123
+ * - Assembled text slices the leading retained chunk at a UTF-8 codepoint
124
+ * boundary when needed, so multibyte characters cannot be split.
125
+ */
126
+ readOutputSince(jobId: string, offset: number, filter?: AsyncJobFilter): AsyncJobOutputSlice | undefined;
127
+ /**
128
+ * Register an owner-scoped cleanup callback. Returns an unregister function.
129
+ *
130
+ * Used by Cron* tools to clear session-scoped timers when the owning agent
131
+ * is torn down. Invoked by `runOwnerCleanups({ ownerId })` before
132
+ * `cancelAll({ ownerId })` so timers cannot register new jobs during
133
+ * teardown.
134
+ */
135
+ registerOwnerCleanup(ownerId: string, cleanup: () => void): () => void;
136
+ /**
137
+ * Run and clear every registered cleanup for the given filter. Idempotent
138
+ * and error-isolated: a throwing cleanup does not prevent siblings from
139
+ * running and never escalates to the caller.
140
+ */
141
+ runOwnerCleanups(filter?: AsyncJobFilter): void;
81
142
  getDeliveryState(filter?: AsyncJobFilter): AsyncJobDeliveryState;
82
143
  hasPendingDeliveries(filter?: AsyncJobFilter): boolean;
83
144
  watchJobs(jobIds: string[]): number;
@@ -21,6 +21,9 @@ export declare function parseUpdateArgs(args: string[]): {
21
21
  check: boolean;
22
22
  } | undefined;
23
23
  export declare function resolveUpdateMethodForTest(ompPath: string, bunBinDir: string | undefined): "bun" | "binary";
24
+ export declare function formatBinaryDownloadFailureMessageForTest(binaryName: string, url: string, status: string | number, platform?: NodeJS.Platform): string;
25
+ export declare function buildReleaseBinaryUrlForTest(version: string, platform?: NodeJS.Platform, arch?: string): string;
26
+ export declare function formatManualUpdateInstructionsForTest(platform?: NodeJS.Platform): string;
24
27
  /**
25
28
  * Atomically replace the installed binary and roll back if version verification fails.
26
29
  */
@@ -212,7 +212,7 @@ export declare const SETTINGS_SCHEMA: {
212
212
  };
213
213
  readonly "theme.light": {
214
214
  readonly type: "string";
215
- readonly default: "light";
215
+ readonly default: "blue-crab";
216
216
  readonly ui: {
217
217
  readonly tab: "appearance";
218
218
  readonly label: "Light Theme";
@@ -982,6 +982,24 @@ export declare const SETTINGS_SCHEMA: {
982
982
  readonly description: "Maximum wait between retries, in ms. When the provider asks us to wait longer than this and no credential or model fallback succeeds, the request fails fast instead of sleeping (e.g. 3-hour Anthropic rate-limit windows).";
983
983
  };
984
984
  };
985
+ readonly "retry.requestMaxRetries": {
986
+ readonly type: "number";
987
+ readonly default: 5;
988
+ readonly ui: {
989
+ readonly tab: "model";
990
+ readonly label: "Provider Request Retries";
991
+ readonly description: "Maximum provider request retries before a stream is established. Counts retries, not the first attempt. Set to 0 to disable provider request retries.";
992
+ };
993
+ };
994
+ readonly "retry.streamMaxRetries": {
995
+ readonly type: "number";
996
+ readonly default: 5;
997
+ readonly ui: {
998
+ readonly tab: "model";
999
+ readonly label: "Provider Stream Retries";
1000
+ readonly description: "Maximum provider stream replay retries for replay-safe transient stream failures. Counts retries, not the first attempt. Set to 0 to disable provider stream retries.";
1001
+ };
1002
+ };
985
1003
  readonly "retry.fallbackChains": {
986
1004
  readonly type: "record";
987
1005
  readonly default: Record<string, string[]>;
@@ -2899,7 +2917,7 @@ export declare const SETTINGS_SCHEMA: {
2899
2917
  };
2900
2918
  readonly "providers.webSearch": {
2901
2919
  readonly type: "enum";
2902
- readonly values: readonly ["auto", "exa", "brave", "jina", "kimi", "zai", "perplexity", "anthropic", "gemini", "codex", "tavily", "kagi", "synthetic", "parallel", "searxng"];
2920
+ readonly values: readonly ["auto", "duckduckgo", "exa", "brave", "jina", "kimi", "zai", "perplexity", "anthropic", "gemini", "codex", "tavily", "kagi", "synthetic", "parallel", "searxng"];
2903
2921
  readonly default: "auto";
2904
2922
  readonly ui: {
2905
2923
  readonly tab: "providers";
@@ -2908,7 +2926,11 @@ export declare const SETTINGS_SCHEMA: {
2908
2926
  readonly options: readonly [{
2909
2927
  readonly value: "auto";
2910
2928
  readonly label: "Auto";
2911
- readonly description: "Preferred web-search provider";
2929
+ readonly description: "Active model's native search if its creds exist, else keyless DuckDuckGo";
2930
+ }, {
2931
+ readonly value: "duckduckgo";
2932
+ readonly label: "DuckDuckGo";
2933
+ readonly description: "Keyless default \u2014 no API key or OAuth required";
2912
2934
  }, {
2913
2935
  readonly value: "exa";
2914
2936
  readonly label: "Exa";
@@ -3240,6 +3262,8 @@ export interface RetrySettings {
3240
3262
  maxRetries: number;
3241
3263
  baseDelayMs: number;
3242
3264
  maxDelayMs: number;
3265
+ requestMaxRetries: number;
3266
+ streamMaxRetries: number;
3243
3267
  }
3244
3268
  export interface MemoriesSettings {
3245
3269
  enabled: boolean;
@@ -5,7 +5,7 @@
5
5
  * import { settings } from "./settings";
6
6
  *
7
7
  * const enabled = settings.get("compaction.enabled"); // sync read
8
- * settings.set("theme.dark", "titanium"); // sync write, saves in background
8
+ * settings.set("theme.dark", "red-claw"); // sync write, saves in background
9
9
  *
10
10
  * For tests:
11
11
  * const isolated = Settings.isolated({ "compaction.enabled": false });
@@ -1,6 +1,6 @@
1
1
  export declare const DEFAULT_GJC_DEFINITION_NAMES: readonly ["deep-interview", "ralplan", "team", "ultragoal"];
2
2
  export type DefaultGjcDefinitionName = (typeof DEFAULT_GJC_DEFINITION_NAMES)[number];
3
- export type DefaultGjcDefinitionKind = "skill";
3
+ export type DefaultGjcDefinitionKind = "skill" | "skill-fragment";
4
4
  export type EmbeddedDefaultGjcSkill = {
5
5
  name: DefaultGjcDefinitionName;
6
6
  description: string;
@@ -11,23 +11,35 @@ export type EmbeddedDefaultGjcSkill = {
11
11
  content: string;
12
12
  };
13
13
  export type DefaultGjcInstallStatus = "different" | "matching" | "missing" | "skipped" | "written";
14
- export interface DefaultGjcDefinition {
15
- kind: DefaultGjcDefinitionKind;
14
+ export interface DefaultGjcSkillDefinition {
15
+ kind: "skill";
16
16
  name: DefaultGjcDefinitionName;
17
17
  relativePath: string;
18
18
  content: string;
19
19
  }
20
+ export interface DefaultGjcSkillFragmentDefinition {
21
+ kind: "skill-fragment";
22
+ parentSkillName: DefaultGjcDefinitionName;
23
+ relativePath: string;
24
+ content: string;
25
+ }
26
+ export type DefaultGjcDefinition = DefaultGjcSkillDefinition | DefaultGjcSkillFragmentDefinition;
20
27
  export interface InstallDefaultGjcDefinitionsOptions {
21
28
  check?: boolean;
22
29
  force?: boolean;
23
30
  targetRoot?: string;
24
31
  }
25
- export interface DefaultGjcDefinitionInstallFile {
26
- kind: DefaultGjcDefinitionKind;
32
+ export type DefaultGjcDefinitionInstallFile = {
33
+ kind: "skill";
27
34
  name: DefaultGjcDefinitionName;
28
35
  path: string;
29
36
  status: DefaultGjcInstallStatus;
30
- }
37
+ } | {
38
+ kind: "skill-fragment";
39
+ parentSkillName: DefaultGjcDefinitionName;
40
+ path: string;
41
+ status: DefaultGjcInstallStatus;
42
+ };
31
43
  export interface DefaultGjcDefinitionInstallResult {
32
44
  targetRoot: string;
33
45
  total: number;
@@ -40,5 +52,6 @@ export interface DefaultGjcDefinitionInstallResult {
40
52
  }
41
53
  export declare function getDefaultGjcDefinitions(): readonly DefaultGjcDefinition[];
42
54
  export declare function getDefaultGjcAgentDefinitions(): readonly DefaultGjcDefinition[];
55
+ export declare function getEmbeddedDefaultGjcSkillFragments(parentSkillName: DefaultGjcDefinitionName): DefaultGjcSkillFragmentDefinition[];
43
56
  export declare function getEmbeddedDefaultGjcSkills(): EmbeddedDefaultGjcSkill[];
44
57
  export declare function installDefaultGjcDefinitions(options?: InstallDefaultGjcDefinitionsOptions): Promise<DefaultGjcDefinitionInstallResult>;
@@ -106,6 +106,7 @@ export interface ParsedAgentFields {
106
106
  blocking?: boolean;
107
107
  hide?: boolean;
108
108
  forkContext?: ForkContextPolicy;
109
+ bashAllowedPrefixes?: string[];
109
110
  }
110
111
  /**
111
112
  * Parse agent fields from frontmatter.
@@ -2,8 +2,15 @@ import { type MinimizerOptions } from "@gajae-code/natives";
2
2
  import { type ShellMinimizerSettings } from "../config/settings";
3
3
  export interface BashExecutorOptions {
4
4
  cwd?: string;
5
- timeout?: number;
5
+ timeout?: number | null;
6
6
  onChunk?: (chunk: string) => void;
7
+ /**
8
+ * Unthrottled per-chunk callback that fires for every sanitized stdout/stderr
9
+ * chunk *before* preview throttling. Background-job substrate uses this to
10
+ * record the complete process stream for the Monitor tool while keeping
11
+ * `onChunk` cheap for UI/progress rendering.
12
+ */
13
+ onRawChunk?: (chunk: string) => void;
7
14
  signal?: AbortSignal;
8
15
  /** Session key suffix to isolate shell sessions per agent */
9
16
  sessionKey?: string;
@@ -0,0 +1,2 @@
1
+ export declare const GJC_RESTRICTED_ROLE_AGENT_BASH_ENV = "GJC_RESTRICTED_ROLE_AGENT_BASH";
2
+ export declare function isRestrictedRoleAgentBash(): boolean;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * ACP-side `ClientBridge` implementation. Wraps `AgentSideConnection` so the
3
- * `read`/`write`/`bash`/`edit` tools (and the permission gate in
3
+ * `read`/`write`/`bash`/`monitor`/`edit` tools (and the permission gate in
4
4
  * `AgentSession`) can route through the client when it advertises the
5
5
  * relevant capabilities at `initialize` time.
6
6
  */
@@ -29,6 +29,10 @@ export interface StatusLinePreviewSettings {
29
29
  export interface SettingsCallbacks {
30
30
  /** Called when any setting value changes */
31
31
  onChange: (path: SettingPath, newValue: unknown) => void;
32
+ /** Called for theme preview while browsing theme settings */
33
+ onThemePreview?: (theme: string) => void | Promise<void>;
34
+ /** Called to restore the rendered theme when theme settings preview is cancelled */
35
+ onThemePreviewCancel?: (theme: string) => void | Promise<void>;
32
36
  /** Called for status line preview while configuring */
33
37
  onStatusLinePreview?: (settings: StatusLinePreviewSettings) => void;
34
38
  /** Get current rendered status line for inline preview */
@@ -1,2 +1,2 @@
1
- import type { SkillActiveEntry } from "../../../skill-state/active-state";
1
+ import { type SkillActiveEntry } from "../../../skill-state/active-state";
2
2
  export declare function renderSkillHudBar(entries: readonly SkillActiveEntry[], width: number): string | null;
@@ -15,6 +15,7 @@ export declare class SelectorController {
15
15
  }): void;
16
16
  showProviderOnboarding(): void;
17
17
  showSettingsSelector(): void;
18
+ showThemeSelector(): void;
18
19
  showHistorySearch(): void;
19
20
  /**
20
21
  * Show the Extension Control Center dashboard.
@@ -61,6 +61,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
61
61
  isInitialized: boolean;
62
62
  isBackgrounded: boolean;
63
63
  isBashMode: boolean;
64
+ isBashNoContext: boolean;
64
65
  toolOutputExpanded: boolean;
65
66
  todoExpanded: boolean;
66
67
  planModeEnabled: boolean;
@@ -200,6 +201,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
200
201
  executeCompaction(customInstructionsOrOptions?: string | CompactOptions, isAuto?: boolean): Promise<CompactionOutcome>;
201
202
  openInBrowser(urlOrPath: string): void;
202
203
  showSettingsSelector(): void;
204
+ showThemeSelector(): void;
203
205
  showHistorySearch(): void;
204
206
  showExtensionsDashboard(): void;
205
207
  showAgentsDashboard(): void;