@gajae-code/coding-agent 0.2.5 → 0.3.1

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 (234) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/types/async/job-manager.d.ts +91 -2
  3. package/dist/types/cli/args.d.ts +1 -1
  4. package/dist/types/commands/deep-interview.d.ts +3 -0
  5. package/dist/types/commands/harness.d.ts +37 -0
  6. package/dist/types/config/keybindings.d.ts +5 -0
  7. package/dist/types/config/settings-schema.d.ts +10 -4
  8. package/dist/types/config/settings.d.ts +2 -0
  9. package/dist/types/debug/crash-diagnostics.d.ts +45 -0
  10. package/dist/types/debug/runtime-gauges.d.ts +6 -0
  11. package/dist/types/deep-interview/render-middleware.d.ts +6 -0
  12. package/dist/types/eval/py/executor.d.ts +2 -0
  13. package/dist/types/eval/py/kernel.d.ts +2 -0
  14. package/dist/types/exec/bash-executor.d.ts +10 -0
  15. package/dist/types/extensibility/custom-tools/types.d.ts +1 -0
  16. package/dist/types/extensibility/extensions/types.d.ts +6 -0
  17. package/dist/types/extensibility/shared-events.d.ts +1 -0
  18. package/dist/types/gjc-runtime/cli-write-receipt.d.ts +24 -0
  19. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +1 -0
  20. package/dist/types/gjc-runtime/state-graph.d.ts +4 -0
  21. package/dist/types/gjc-runtime/state-migrations.d.ts +33 -0
  22. package/dist/types/gjc-runtime/state-renderer.d.ts +65 -0
  23. package/dist/types/gjc-runtime/state-runtime.d.ts +2 -0
  24. package/dist/types/gjc-runtime/state-schema.d.ts +317 -0
  25. package/dist/types/gjc-runtime/state-validation.d.ts +6 -0
  26. package/dist/types/gjc-runtime/state-writer.d.ts +147 -0
  27. package/dist/types/gjc-runtime/team-runtime.d.ts +81 -7
  28. package/dist/types/gjc-runtime/workflow-command-ref.d.ts +43 -0
  29. package/dist/types/gjc-runtime/workflow-manifest.d.ts +54 -0
  30. package/dist/types/harness-control-plane/classifier.d.ts +13 -0
  31. package/dist/types/harness-control-plane/control-endpoint.d.ts +31 -0
  32. package/dist/types/harness-control-plane/finalize.d.ts +47 -0
  33. package/dist/types/harness-control-plane/frame-mapper.d.ts +29 -0
  34. package/dist/types/harness-control-plane/operate.d.ts +35 -0
  35. package/dist/types/harness-control-plane/owner.d.ts +46 -0
  36. package/dist/types/harness-control-plane/preserve.d.ts +19 -0
  37. package/dist/types/harness-control-plane/receipts.d.ts +88 -0
  38. package/dist/types/harness-control-plane/rpc-adapter.d.ts +66 -0
  39. package/dist/types/harness-control-plane/seams.d.ts +21 -0
  40. package/dist/types/harness-control-plane/session-lease.d.ts +65 -0
  41. package/dist/types/harness-control-plane/state-machine.d.ts +19 -0
  42. package/dist/types/harness-control-plane/storage.d.ts +53 -0
  43. package/dist/types/harness-control-plane/types.d.ts +162 -0
  44. package/dist/types/hooks/skill-keywords.d.ts +2 -1
  45. package/dist/types/hooks/skill-state.d.ts +23 -29
  46. package/dist/types/internal-urls/agent-protocol.d.ts +2 -2
  47. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  48. package/dist/types/internal-urls/registry-helpers.d.ts +8 -7
  49. package/dist/types/internal-urls/types.d.ts +4 -0
  50. package/dist/types/lsp/index.d.ts +10 -10
  51. package/dist/types/modes/bridge/auth.d.ts +12 -0
  52. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +9 -0
  53. package/dist/types/modes/bridge/bridge-mode.d.ts +44 -0
  54. package/dist/types/modes/bridge/bridge-ui-context.d.ts +88 -0
  55. package/dist/types/modes/bridge/event-stream.d.ts +8 -0
  56. package/dist/types/modes/components/custom-editor.d.ts +6 -0
  57. package/dist/types/modes/components/hook-selector.d.ts +1 -0
  58. package/dist/types/modes/components/jobs-overlay-model.d.ts +31 -0
  59. package/dist/types/modes/components/jobs-overlay.d.ts +30 -0
  60. package/dist/types/modes/components/status-line/types.d.ts +2 -0
  61. package/dist/types/modes/components/status-line.d.ts +2 -0
  62. package/dist/types/modes/controllers/input-controller.d.ts +1 -0
  63. package/dist/types/modes/controllers/selector-controller.d.ts +8 -0
  64. package/dist/types/modes/index.d.ts +1 -0
  65. package/dist/types/modes/interactive-mode.d.ts +2 -0
  66. package/dist/types/modes/jobs-observer.d.ts +57 -0
  67. package/dist/types/modes/rpc/host-tools.d.ts +1 -16
  68. package/dist/types/modes/rpc/host-uris.d.ts +1 -38
  69. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +20 -0
  70. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +2 -0
  71. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +24 -0
  72. package/dist/types/modes/shared/agent-wire/handshake.d.ts +46 -0
  73. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +16 -0
  74. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +17 -0
  75. package/dist/types/modes/shared/agent-wire/protocol.d.ts +44 -0
  76. package/dist/types/modes/shared/agent-wire/responses.d.ts +4 -0
  77. package/dist/types/modes/shared/agent-wire/scopes.d.ts +18 -0
  78. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +42 -0
  79. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +27 -0
  80. package/dist/types/modes/types.d.ts +2 -0
  81. package/dist/types/sdk.d.ts +4 -0
  82. package/dist/types/session/agent-session.d.ts +19 -1
  83. package/dist/types/skill-state/active-state.d.ts +2 -0
  84. package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +1 -1
  85. package/dist/types/skill-state/workflow-state-contract.d.ts +25 -2
  86. package/dist/types/skill-state/workflow-state-version.d.ts +3 -0
  87. package/dist/types/task/executor.d.ts +3 -0
  88. package/dist/types/task/id.d.ts +7 -0
  89. package/dist/types/task/index.d.ts +5 -0
  90. package/dist/types/task/receipt.d.ts +85 -0
  91. package/dist/types/task/spawn-gate.d.ts +38 -0
  92. package/dist/types/task/types.d.ts +198 -14
  93. package/dist/types/tools/cron.d.ts +6 -0
  94. package/dist/types/tools/index.d.ts +2 -0
  95. package/dist/types/tools/path-utils.d.ts +1 -0
  96. package/dist/types/tools/subagent.d.ts +26 -1
  97. package/package.json +7 -7
  98. package/scripts/build-binary.ts +7 -0
  99. package/src/async/job-manager.ts +334 -6
  100. package/src/cli/args.ts +9 -2
  101. package/src/cli/auth-broker-cli.ts +1 -0
  102. package/src/cli/config-cli.ts +10 -2
  103. package/src/cli.ts +2 -0
  104. package/src/commands/deep-interview.ts +1 -0
  105. package/src/commands/harness.ts +862 -0
  106. package/src/commands/launch.ts +2 -2
  107. package/src/commands/state.ts +2 -1
  108. package/src/commands/team.ts +54 -39
  109. package/src/config/keybindings.ts +6 -0
  110. package/src/config/settings-schema.ts +13 -3
  111. package/src/config/settings.ts +5 -0
  112. package/src/dap/client.ts +17 -3
  113. package/src/debug/crash-diagnostics.ts +223 -0
  114. package/src/debug/runtime-gauges.ts +20 -0
  115. package/src/deep-interview/render-middleware.ts +372 -0
  116. package/src/defaults/gjc/skills/deep-interview/SKILL.md +1 -1
  117. package/src/defaults/gjc/skills/ralplan/SKILL.md +31 -2
  118. package/src/defaults/gjc/skills/team/SKILL.md +47 -21
  119. package/src/defaults/gjc/skills/ultragoal/SKILL.md +106 -13
  120. package/src/eval/py/executor.ts +21 -1
  121. package/src/eval/py/kernel.ts +15 -0
  122. package/src/exec/bash-executor.ts +41 -0
  123. package/src/extensibility/custom-tools/types.ts +1 -0
  124. package/src/extensibility/extensions/types.ts +6 -0
  125. package/src/extensibility/shared-events.ts +1 -0
  126. package/src/gjc-runtime/cli-write-receipt.ts +31 -0
  127. package/src/gjc-runtime/deep-interview-runtime.ts +98 -42
  128. package/src/gjc-runtime/goal-mode-request.ts +11 -3
  129. package/src/gjc-runtime/ralplan-runtime.ts +235 -43
  130. package/src/gjc-runtime/state-graph.ts +86 -0
  131. package/src/gjc-runtime/state-migrations.ts +179 -0
  132. package/src/gjc-runtime/state-renderer.ts +345 -0
  133. package/src/gjc-runtime/state-runtime.ts +1155 -46
  134. package/src/gjc-runtime/state-schema.ts +192 -0
  135. package/src/gjc-runtime/state-validation.ts +49 -0
  136. package/src/gjc-runtime/state-writer.ts +749 -0
  137. package/src/gjc-runtime/team-runtime.ts +1255 -189
  138. package/src/gjc-runtime/ultragoal-runtime.ts +460 -43
  139. package/src/gjc-runtime/workflow-command-ref.ts +239 -0
  140. package/src/gjc-runtime/workflow-manifest.generated.json +1601 -0
  141. package/src/gjc-runtime/workflow-manifest.ts +427 -0
  142. package/src/harness-control-plane/classifier.ts +128 -0
  143. package/src/harness-control-plane/control-endpoint.ts +148 -0
  144. package/src/harness-control-plane/finalize.ts +222 -0
  145. package/src/harness-control-plane/frame-mapper.ts +286 -0
  146. package/src/harness-control-plane/operate.ts +225 -0
  147. package/src/harness-control-plane/owner.ts +600 -0
  148. package/src/harness-control-plane/preserve.ts +102 -0
  149. package/src/harness-control-plane/receipts.ts +216 -0
  150. package/src/harness-control-plane/rpc-adapter.ts +276 -0
  151. package/src/harness-control-plane/seams.ts +39 -0
  152. package/src/harness-control-plane/session-lease.ts +388 -0
  153. package/src/harness-control-plane/state-machine.ts +98 -0
  154. package/src/harness-control-plane/storage.ts +257 -0
  155. package/src/harness-control-plane/types.ts +214 -0
  156. package/src/hooks/skill-keywords.ts +4 -2
  157. package/src/hooks/skill-state.ts +197 -64
  158. package/src/internal-urls/agent-protocol.ts +68 -21
  159. package/src/internal-urls/artifact-protocol.ts +12 -17
  160. package/src/internal-urls/docs-index.generated.ts +3 -2
  161. package/src/internal-urls/registry-helpers.ts +19 -16
  162. package/src/internal-urls/types.ts +4 -0
  163. package/src/lsp/client.ts +18 -2
  164. package/src/main.ts +21 -5
  165. package/src/modes/bridge/auth.ts +41 -0
  166. package/src/modes/bridge/bridge-client-bridge.ts +47 -0
  167. package/src/modes/bridge/bridge-mode.ts +520 -0
  168. package/src/modes/bridge/bridge-ui-context.ts +200 -0
  169. package/src/modes/bridge/event-stream.ts +70 -0
  170. package/src/modes/components/assistant-message.ts +5 -1
  171. package/src/modes/components/custom-editor.ts +101 -0
  172. package/src/modes/components/hook-selector.ts +133 -20
  173. package/src/modes/components/jobs-overlay-model.ts +109 -0
  174. package/src/modes/components/jobs-overlay.ts +172 -0
  175. package/src/modes/components/status-line/presets.ts +7 -5
  176. package/src/modes/components/status-line/segments.ts +25 -0
  177. package/src/modes/components/status-line/types.ts +2 -0
  178. package/src/modes/components/status-line.ts +9 -1
  179. package/src/modes/controllers/event-controller.ts +71 -6
  180. package/src/modes/controllers/extension-ui-controller.ts +43 -1
  181. package/src/modes/controllers/input-controller.ts +105 -9
  182. package/src/modes/controllers/selector-controller.ts +31 -1
  183. package/src/modes/index.ts +1 -0
  184. package/src/modes/interactive-mode.ts +28 -0
  185. package/src/modes/jobs-observer.ts +204 -0
  186. package/src/modes/rpc/host-tools.ts +1 -186
  187. package/src/modes/rpc/host-uris.ts +1 -235
  188. package/src/modes/rpc/rpc-client.ts +25 -10
  189. package/src/modes/rpc/rpc-mode.ts +12 -381
  190. package/src/modes/shared/agent-wire/command-dispatch.ts +341 -0
  191. package/src/modes/shared/agent-wire/command-validation.ts +131 -0
  192. package/src/modes/shared/agent-wire/event-envelope.ts +108 -0
  193. package/src/modes/shared/agent-wire/handshake.ts +117 -0
  194. package/src/modes/shared/agent-wire/host-tool-bridge.ts +194 -0
  195. package/src/modes/shared/agent-wire/host-uri-bridge.ts +236 -0
  196. package/src/modes/shared/agent-wire/protocol.ts +96 -0
  197. package/src/modes/shared/agent-wire/responses.ts +17 -0
  198. package/src/modes/shared/agent-wire/scopes.ts +89 -0
  199. package/src/modes/shared/agent-wire/ui-request-broker.ts +150 -0
  200. package/src/modes/shared/agent-wire/ui-result.ts +48 -0
  201. package/src/modes/types.ts +2 -0
  202. package/src/prompts/agents/executor.md +13 -0
  203. package/src/prompts/tools/subagent.md +39 -4
  204. package/src/prompts/tools/task-summary.md +3 -9
  205. package/src/prompts/tools/task.md +5 -1
  206. package/src/sdk.ts +8 -0
  207. package/src/session/agent-session.ts +445 -71
  208. package/src/session/session-manager.ts +13 -1
  209. package/src/skill-state/active-state.ts +58 -65
  210. package/src/skill-state/deep-interview-mutation-guard.ts +114 -17
  211. package/src/skill-state/initial-phase.ts +2 -0
  212. package/src/skill-state/workflow-state-contract.ts +33 -4
  213. package/src/skill-state/workflow-state-version.ts +3 -0
  214. package/src/slash-commands/builtin-registry.ts +8 -0
  215. package/src/task/executor.ts +79 -13
  216. package/src/task/id.ts +33 -0
  217. package/src/task/index.ts +376 -74
  218. package/src/task/output-manager.ts +5 -4
  219. package/src/task/receipt.ts +297 -0
  220. package/src/task/render.ts +54 -134
  221. package/src/task/spawn-gate.ts +132 -0
  222. package/src/task/types.ts +104 -10
  223. package/src/tools/ask.ts +88 -27
  224. package/src/tools/ast-edit.ts +1 -0
  225. package/src/tools/ast-grep.ts +1 -0
  226. package/src/tools/bash.ts +1 -1
  227. package/src/tools/cron.ts +48 -0
  228. package/src/tools/find.ts +4 -1
  229. package/src/tools/index.ts +2 -0
  230. package/src/tools/path-utils.ts +3 -2
  231. package/src/tools/read.ts +1 -0
  232. package/src/tools/search.ts +1 -0
  233. package/src/tools/skill.ts +6 -1
  234. package/src/tools/subagent.ts +423 -79
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Core types for the gajae-code-native coding-harness operations control plane (v1).
3
+ *
4
+ * See the approved consensus plan at
5
+ * `.gjc/plans/ralplan/2026-06-02-0853-3e33/stage-02-revision.md` and the spec at
6
+ * `.gjc/specs/deep-interview-harness-control-plane.md`.
7
+ *
8
+ * v1 implements the gajae-code adapter only. omx/codex/remote/auth are deferred seams.
9
+ */
10
+ /** Harnesses the control plane can operate. v1 implements `gajae-code` only. */
11
+ export type Harness = "gajae-code" | "codex" | "omx";
12
+ /** Lifecycle states of an operated session. */
13
+ export type HarnessLifecycle = "new" | "started" | "submitted" | "observing" | "recovering" | "validating" | "finalizing" | "completed" | "blocked" | "retired";
14
+ /** Event severities emitted by the owner. */
15
+ export type Severity = "info" | "warn" | "critical";
16
+ /** Bounded git delta classification surfaced by `observe`. */
17
+ export type GitDelta = "clean" | "dirty" | "zero-delta" | "unknown";
18
+ /** Risk classification surfaced by `observe`. */
19
+ export type RiskKind = "normal" | "prompt-not-accepted" | "deleted-worktree" | "vanished-dirty";
20
+ /** Deterministic recovery classifications. */
21
+ export type RecoveryClassification = "continue" | "send-enter" | "reinject-prompt" | "restart-clean" | "restart-preserve-delta" | "fallback-codex-exec" | "human-check";
22
+ /** Receipt families persisted under the session storage dir. */
23
+ export type ReceiptFamily = "vanish" | "prompt-acceptance" | "validation" | "completion";
24
+ /** The CLI verbs / primitives exposed by `gjc harness <verb>`. */
25
+ export type HarnessVerb = "start" | "submit" | "observe" | "classify" | "recover" | "validate" | "finalize" | "retire" | "events" | "monitor" | "operate";
26
+ /** Submission transports. */
27
+ export type SubmitMode = "paste-buffer" | "stdin" | "file";
28
+ /** A single entry in the forcing-function `nextAllowedActions` list. */
29
+ export interface NextAllowedAction {
30
+ verb: HarnessVerb;
31
+ available: boolean;
32
+ /** Present when `available` is false; explains why the verb is currently disallowed. */
33
+ reason?: string;
34
+ }
35
+ /** Compact, model-facing view of session state included in every response. */
36
+ export interface SessionStateView {
37
+ sessionId: string;
38
+ lifecycle: HarnessLifecycle;
39
+ harness: Harness;
40
+ ownerLive: boolean;
41
+ blockers: string[];
42
+ }
43
+ /**
44
+ * The universal contract: EVERY primitive response carries `{state, evidence, nextAllowedActions}`.
45
+ * `ok` is a transport-level convenience; semantic blocking is expressed via state + nextAllowedActions.
46
+ */
47
+ export interface PrimitiveResponse<E = Record<string, unknown>> {
48
+ ok: boolean;
49
+ state: SessionStateView;
50
+ evidence: E;
51
+ nextAllowedActions: NextAllowedAction[];
52
+ }
53
+ /** Re-grabbable session handle returned by `start` / `operate`. */
54
+ export interface SessionHandle {
55
+ sessionId: string;
56
+ harness: Harness;
57
+ repo: string | null;
58
+ workspace: string;
59
+ branch: string | null;
60
+ base: string | null;
61
+ issueOrPr: string | null;
62
+ processHandle: {
63
+ kind: "runtime-owner";
64
+ ownerId: string | null;
65
+ pid: number | null;
66
+ };
67
+ rpcHandle: {
68
+ kind: "rpc-subprocess";
69
+ pid: number | null;
70
+ sessionDir: string;
71
+ };
72
+ ownerHandle: {
73
+ leasePath: string;
74
+ endpoint: string | null;
75
+ heartbeatAt: string | null;
76
+ };
77
+ routerHandle: {
78
+ kind: "default-in-owner";
79
+ policy: string;
80
+ eventsPath: string;
81
+ };
82
+ viewportHandle: {
83
+ kind: "event-monitor";
84
+ tmuxSessionName: string | null;
85
+ viewOnly: true;
86
+ };
87
+ startedAt: string;
88
+ updatedAt: string;
89
+ }
90
+ /** Persisted per-session record (state.json). */
91
+ export interface SessionState {
92
+ schemaVersion: number;
93
+ sessionId: string;
94
+ lifecycle: HarnessLifecycle;
95
+ harness: Harness;
96
+ handle: SessionHandle;
97
+ /** Per-classification retry counters consumed by the recovery policy. */
98
+ retries: Record<string, number>;
99
+ blockers: string[];
100
+ createdAt: string;
101
+ updatedAt: string;
102
+ }
103
+ /** Bounded observed-signal vocabulary surfaced by `observe` (the owner only ever emits these). */
104
+ export type ObservedSignal = "SessionStart" | "prompt-accepted" | "tool-call" | "test-running" | "commit-created" | "completed" | "error" | "streaming" | "idle";
105
+ export declare const OBSERVED_SIGNALS: readonly ObservedSignal[];
106
+ /** Bounded observation surfaced by `observe` — never a raw pane/transcript dump. */
107
+ export interface Observation {
108
+ lifecycle: HarnessLifecycle;
109
+ ownerLive: boolean;
110
+ cwd: string;
111
+ branch: string | null;
112
+ gitDelta: GitDelta;
113
+ lastActivityAt: string | null;
114
+ observedSignals: string[];
115
+ risk: RiskKind;
116
+ /** RPC subprocess liveness, distinct from owner-process/lease liveness. Optional for back-compat. */
117
+ rpcLive?: boolean;
118
+ /** ISO timestamp of the most recent RPC frame the owner observed, if any. */
119
+ rpcLastFrameAt?: string | null;
120
+ }
121
+ /** Input to the deterministic recovery classifier. */
122
+ export interface ClassifyInput {
123
+ observation: Observation;
124
+ /** Remaining retry budget per classification family. */
125
+ retryBudget: RetryBudget;
126
+ /** Whether an accepted prompt was in flight when the owner/RPC was last seen. */
127
+ acceptedPromptActive?: boolean;
128
+ }
129
+ /** Default and supplied retry budgets. */
130
+ export interface RetryBudget {
131
+ reinjectPrompt: number;
132
+ zeroDeltaVanish: number;
133
+ dirtyVanishPreserve: number;
134
+ validationRepair: number;
135
+ }
136
+ /** Result of the deterministic recovery classifier. */
137
+ export interface RecoveryDecision {
138
+ classification: RecoveryClassification;
139
+ reason: string;
140
+ severity: Severity;
141
+ /** Whether executing the recommended action requires a live owner. */
142
+ ownerRequired: boolean;
143
+ /** Receipt family that MUST be valid before the action may proceed (e.g. `vanish`). */
144
+ requiredReceiptFamily: ReceiptFamily | null;
145
+ }
146
+ /** Severity-tagged event envelope written exclusively by the owner. */
147
+ export interface EventEnvelope<E = Record<string, unknown>> {
148
+ eventId: string;
149
+ cursor: number;
150
+ createdAt: string;
151
+ severity: Severity;
152
+ kind: string;
153
+ state: SessionStateView;
154
+ evidence: E;
155
+ nextAllowedActions: NextAllowedAction[];
156
+ writer: {
157
+ ownerId: string;
158
+ leaseEpoch: number;
159
+ };
160
+ }
161
+ export declare const SESSION_SCHEMA_VERSION: 1;
162
+ export declare const DEFAULT_RETRY_BUDGET: RetryBudget;
@@ -1,3 +1,4 @@
1
+ import { type CanonicalGjcWorkflowSkill } from "../skill-state/active-state";
1
2
  export interface SkillKeywordDefinition {
2
3
  keyword: string;
3
4
  skill: GjcWorkflowSkill;
@@ -5,7 +6,7 @@ export interface SkillKeywordDefinition {
5
6
  guidance: string;
6
7
  }
7
8
  export declare const GJC_WORKFLOW_SKILLS: readonly ["deep-interview", "ralplan", "ultragoal", "team"];
8
- export type GjcWorkflowSkill = (typeof GJC_WORKFLOW_SKILLS)[number];
9
+ export type GjcWorkflowSkill = CanonicalGjcWorkflowSkill;
9
10
  export declare const GJC_SKILL_KEYWORD_DEFINITIONS: readonly SkillKeywordDefinition[];
10
11
  export declare function isGjcWorkflowSkill(value: string): value is GjcWorkflowSkill;
11
12
  export declare function compareSkillKeywordMatches(a: {
@@ -1,5 +1,5 @@
1
1
  import type { SkillDiscoverySettings } from "../config/skill-settings-defaults";
2
- import type { SkillActiveEntry as CanonicalSkillActiveEntry, WorkflowHudSummary } from "../skill-state/active-state";
2
+ import { type SkillActiveState } from "../skill-state/active-state";
3
3
  import { type GjcWorkflowSkill } from "./skill-keywords";
4
4
  export declare const GJC_STATE_DIR = ".gjc/state";
5
5
  export declare const SKILL_ACTIVE_STATE_FILE = "skill-active-state.json";
@@ -14,34 +14,7 @@ export interface SkillKeywordMatch {
14
14
  skill: GjcWorkflowSkill;
15
15
  priority: number;
16
16
  }
17
- export interface SkillActiveEntry extends Omit<CanonicalSkillActiveEntry, "skill"> {
18
- skill: GjcWorkflowSkill;
19
- phase?: string;
20
- active?: boolean;
21
- activated_at?: string;
22
- updated_at?: string;
23
- session_id?: string;
24
- thread_id?: string;
25
- turn_id?: string;
26
- hud?: WorkflowHudSummary;
27
- stale?: boolean;
28
- }
29
- export interface SkillActiveState {
30
- version: number;
31
- active: boolean;
32
- skill: GjcWorkflowSkill;
33
- keyword: string;
34
- phase: string;
35
- activated_at: string;
36
- updated_at: string;
37
- source: "gjc-skill-state-hook";
38
- session_id?: string;
39
- thread_id?: string;
40
- turn_id?: string;
41
- initialized_mode?: GjcWorkflowSkill;
42
- initialized_state_path?: string;
43
- active_skills: SkillActiveEntry[];
44
- }
17
+ export type { SkillActiveEntry, SkillActiveState } from "../skill-state/active-state";
45
18
  export interface ModeState {
46
19
  active?: boolean;
47
20
  current_phase?: string;
@@ -86,6 +59,27 @@ import { initialPhaseForSkill } from "../skill-state/initial-phase";
86
59
  export { initialPhaseForSkill };
87
60
  export declare function readVisibleSkillActiveState(cwd: string, sessionId?: string, stateDir?: string): Promise<SkillActiveState | null>;
88
61
  export declare function recordSkillActivation(input: RecordSkillActivationInput): Promise<SkillActiveState | null>;
62
+ export interface EnsureWorkflowSkillActivationInput {
63
+ cwd: string;
64
+ skill: string;
65
+ sessionId?: string;
66
+ threadId?: string;
67
+ turnId?: string;
68
+ nowIso?: string;
69
+ stateDir?: string;
70
+ }
71
+ /**
72
+ * Idempotently seed `.gjc/state` for a workflow skill that was invoked directly
73
+ * (e.g. via `/skill:<name>`) rather than through keyword detection. This ensures
74
+ * the mutation guard and Stop hook engage the moment a workflow skill becomes
75
+ * active, instead of relying on the skill prompt to run its own state-init steps.
76
+ *
77
+ * The seed is non-destructive: if an active entry for this skill already exists
78
+ * (for example after a `gjc state handoff` promotion that carries
79
+ * `handoff_from`/`handoff_at` lineage), nothing is written so lineage is
80
+ * preserved. Non-workflow skills are ignored.
81
+ */
82
+ export declare function ensureWorkflowSkillActivationState(input: EnsureWorkflowSkillActivationInput): Promise<SkillActiveState | null>;
89
83
  export declare function buildActiveUltragoalPromptContext(input: UserPromptSubmitStateInput): Promise<string | null>;
90
84
  export declare function buildSkillStopOutput(input: StopHookInput): Promise<Record<string, unknown> | null>;
91
85
  export declare function buildSkillActivationAdditionalContext(state: SkillActiveState, effectiveSkillConfig?: EffectiveSkillConfigInput): string;
@@ -1,4 +1,4 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, ResolveContext } from "./types";
2
2
  /**
3
3
  * Handler for agent:// URLs.
4
4
  *
@@ -8,5 +8,5 @@ import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
8
8
  export declare class AgentProtocolHandler implements ProtocolHandler {
9
9
  readonly scheme = "agent";
10
10
  readonly immutable = true;
11
- resolve(url: InternalUrl): Promise<InternalResource>;
11
+ resolve(url: InternalUrl, context?: ResolveContext): Promise<InternalResource>;
12
12
  }
@@ -1,6 +1,6 @@
1
- import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
1
+ import type { InternalResource, InternalUrl, ProtocolHandler, ResolveContext } from "./types";
2
2
  export declare class ArtifactProtocolHandler implements ProtocolHandler {
3
3
  readonly scheme = "artifact";
4
4
  readonly immutable = true;
5
- resolve(url: InternalUrl): Promise<InternalResource>;
5
+ resolve(url: InternalUrl, context?: ResolveContext): Promise<InternalResource>;
6
6
  }
@@ -1,10 +1,11 @@
1
+ import type { ResolveContext } from "./types";
1
2
  /**
2
- * Snapshot of artifacts dirs for every registered session, deduped.
3
+ * Snapshot of artifacts dirs explicitly authorized for the calling session.
3
4
  *
4
- * Prefers `sessionManager.getArtifactsDir()` because subagents adopt their
5
- * parent's `ArtifactManager` and report the parent's dir there; dedup then
6
- * collapses parent + N subagents (the whole agent tree) to one entry. Falls
7
- * back to the raw session file (with the `.jsonl` suffix stripped) when no
8
- * live session reference is attached.
5
+ * Normal reads are scoped to the caller's artifacts directory. Parent/child
6
+ * agent tree sharing is allowed only when the caller supplies explicit
7
+ * authorized directories at the ResolveContext boundary. This intentionally
8
+ * does not enumerate AgentRegistry.global(); live but unrelated sessions are
9
+ * not an authorization source.
9
10
  */
10
- export declare function artifactsDirsFromRegistry(): string[];
11
+ export declare function authorizedArtifactsDirsFromContext(context?: ResolveContext): string[];
@@ -56,6 +56,10 @@ export interface ResolveContext {
56
56
  cwd?: string;
57
57
  /** Settings of the calling session (used by `issue://`/`pr://` for cache TTLs). */
58
58
  settings?: unknown;
59
+ /** Artifacts directory of the calling session. */
60
+ getArtifactsDir?: () => string | null;
61
+ /** Additional artifacts directories explicitly authorized for this caller (for parent/child agent trees). */
62
+ getAuthorizedArtifactsDirs?: () => readonly string[];
59
63
  /** Caller's abort signal. */
60
64
  signal?: AbortSignal;
61
65
  }
@@ -93,8 +93,8 @@ export declare class LspTool implements AgentTool<typeof lspSchema, LspToolDetai
93
93
  readonly loadMode = "discoverable";
94
94
  readonly summary = "Query LSP (language server) for diagnostics, hover info, and references";
95
95
  readonly description: string;
96
- readonly parameters: import("zod/v4").ZodObject<{
97
- action: import("zod/v4").ZodEnum<{
96
+ readonly parameters: import("zod").ZodObject<{
97
+ action: import("zod").ZodEnum<{
98
98
  capabilities: "capabilities";
99
99
  code_actions: "code_actions";
100
100
  definition: "definition";
@@ -110,14 +110,14 @@ export declare class LspTool implements AgentTool<typeof lspSchema, LspToolDetai
110
110
  symbols: "symbols";
111
111
  type_definition: "type_definition";
112
112
  }>;
113
- file: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
114
- line: import("zod/v4").ZodOptional<import("zod/v4").ZodNumber>;
115
- symbol: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
116
- query: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
117
- new_name: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
118
- apply: import("zod/v4").ZodOptional<import("zod/v4").ZodBoolean>;
119
- timeout: import("zod/v4").ZodOptional<import("zod/v4").ZodNumber>;
120
- payload: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
113
+ file: import("zod").ZodOptional<import("zod").ZodString>;
114
+ line: import("zod").ZodOptional<import("zod").ZodNumber>;
115
+ symbol: import("zod").ZodOptional<import("zod").ZodString>;
116
+ query: import("zod").ZodOptional<import("zod").ZodString>;
117
+ new_name: import("zod").ZodOptional<import("zod").ZodString>;
118
+ apply: import("zod").ZodOptional<import("zod").ZodBoolean>;
119
+ timeout: import("zod").ZodOptional<import("zod").ZodNumber>;
120
+ payload: import("zod").ZodOptional<import("zod").ZodString>;
121
121
  }, import("zod/v4/core").$strip>;
122
122
  readonly renderCall: typeof renderCall;
123
123
  readonly renderResult: typeof renderResult;
@@ -0,0 +1,12 @@
1
+ export interface BridgeAuthConfig {
2
+ token: string;
3
+ }
4
+ export interface BridgeBindConfig {
5
+ hostname: string;
6
+ port: number;
7
+ tlsConfigured: boolean;
8
+ }
9
+ export declare function extractBearerToken(authorization: string | null | undefined): string | undefined;
10
+ export declare function isBridgeTokenAuthorized(authorization: string | null | undefined, config: BridgeAuthConfig): boolean;
11
+ export declare function isLoopbackHost(hostname: string): boolean;
12
+ export declare function assertSafeBridgeBind(config: BridgeBindConfig): void;
@@ -0,0 +1,9 @@
1
+ import type { ClientBridge, ClientBridgePermissionOption, ClientBridgePermissionOutcome, ClientBridgePermissionToolCall } from "../../session/client-bridge";
2
+ import type { UiRequestBroker } from "../shared/agent-wire/ui-request-broker";
3
+ export interface BridgePermissionRequestPayload {
4
+ kind: "permission";
5
+ toolCall: ClientBridgePermissionToolCall;
6
+ options: ClientBridgePermissionOption[];
7
+ }
8
+ export type BridgePermissionBroker = UiRequestBroker<BridgePermissionRequestPayload, ClientBridgePermissionOutcome>;
9
+ export declare function createBridgeClientBridge(broker: BridgePermissionBroker): ClientBridge;
@@ -0,0 +1,44 @@
1
+ import type { ExtensionUIContext } from "../../extensibility/extensions";
2
+ import type { AgentSession } from "../../session/agent-session";
3
+ import type { ClientBridgePermissionOutcome } from "../../session/client-bridge";
4
+ import type { RpcCommand, RpcResponse } from "../rpc/rpc-types";
5
+ import { RpcHostToolBridge } from "../shared/agent-wire/host-tool-bridge";
6
+ import { RpcHostUriBridge } from "../shared/agent-wire/host-uri-bridge";
7
+ import { type BridgeCommandScope } from "../shared/agent-wire/scopes";
8
+ import { UiRequestBroker } from "../shared/agent-wire/ui-request-broker";
9
+ import type { BridgeUiResult } from "../shared/agent-wire/ui-result";
10
+ import { type BridgePermissionRequestPayload } from "./bridge-client-bridge";
11
+ import { type BridgeUiRequestPayload } from "./bridge-ui-context";
12
+ import { BridgeEventStream } from "./event-stream";
13
+ interface BridgeEndpointMatrix {
14
+ events: boolean;
15
+ commands: boolean;
16
+ control: boolean;
17
+ uiResponses: boolean;
18
+ hostToolResults: boolean;
19
+ hostUriResults: boolean;
20
+ }
21
+ interface BridgeFetchHandlerOptions {
22
+ sessionId: string;
23
+ token: string;
24
+ eventStream?: BridgeEventStream;
25
+ commandDispatcher?: (command: RpcCommand) => Promise<RpcResponse>;
26
+ commandScopes?: readonly BridgeCommandScope[];
27
+ idempotencyCache?: BridgeIdempotencyCache;
28
+ permissionBroker?: UiRequestBroker<BridgePermissionRequestPayload, ClientBridgePermissionOutcome>;
29
+ uiBroker?: UiRequestBroker<BridgeUiRequestPayload, BridgeUiResult<unknown>>;
30
+ hostToolBridge?: RpcHostToolBridge;
31
+ hostUriBridge?: RpcHostUriBridge;
32
+ endpointMatrix?: Partial<BridgeEndpointMatrix>;
33
+ }
34
+ interface BridgeIdempotencyRecord {
35
+ route: string;
36
+ ownerToken?: string;
37
+ body: string | Promise<string>;
38
+ response: unknown | Promise<unknown>;
39
+ pending?: boolean;
40
+ }
41
+ type BridgeIdempotencyCache = Map<string, BridgeIdempotencyRecord>;
42
+ export declare function createBridgeFetchHandler(options: BridgeFetchHandlerOptions): (request: Request) => Promise<Response>;
43
+ export declare function runBridgeMode(session: AgentSession, setToolUIContext?: (uiContext: ExtensionUIContext, hasUI: boolean) => void): Promise<never>;
44
+ export {};
@@ -0,0 +1,88 @@
1
+ import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetContent, ExtensionWidgetOptions, TerminalInputHandler } from "../../extensibility/extensions";
2
+ import type { UiRequestBroker } from "../shared/agent-wire/ui-request-broker";
3
+ import type { BridgeUiResult } from "../shared/agent-wire/ui-result";
4
+ import { type Theme } from "../theme/theme";
5
+ export type BridgeUiRequestPayload = {
6
+ kind: "select";
7
+ title: string;
8
+ options: string[];
9
+ timeout?: number;
10
+ } | {
11
+ kind: "confirm";
12
+ title: string;
13
+ message: string;
14
+ timeout?: number;
15
+ } | {
16
+ kind: "input";
17
+ title: string;
18
+ placeholder?: string;
19
+ timeout?: number;
20
+ } | {
21
+ kind: "editor";
22
+ title: string;
23
+ prefill?: string;
24
+ promptStyle?: boolean;
25
+ } | {
26
+ kind: "notify";
27
+ message: string;
28
+ type?: "info" | "warning" | "error";
29
+ } | {
30
+ kind: "status";
31
+ key: string;
32
+ text: string | undefined;
33
+ } | {
34
+ kind: "widget";
35
+ key: string;
36
+ lines: string[] | undefined;
37
+ placement?: "aboveEditor" | "belowEditor";
38
+ } | {
39
+ kind: "title";
40
+ title: string;
41
+ } | {
42
+ kind: "set_editor_text";
43
+ text: string;
44
+ } | {
45
+ kind: "unsupported";
46
+ capability: string;
47
+ reason: string;
48
+ };
49
+ export type BridgeUiBroker = UiRequestBroker<BridgeUiRequestPayload, BridgeUiResult<unknown>>;
50
+ export type BridgeUiEmitter = (payload: BridgeUiRequestPayload) => void;
51
+ export declare class BridgeExtensionUIContext implements ExtensionUIContext {
52
+ #private;
53
+ constructor(options: {
54
+ broker: BridgeUiBroker;
55
+ emit: BridgeUiEmitter;
56
+ });
57
+ select(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
58
+ confirm(title: string, message: string, dialogOptions?: ExtensionUIDialogOptions): Promise<boolean>;
59
+ input(title: string, placeholder?: string, dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
60
+ notify(message: string, type?: "info" | "warning" | "error"): void;
61
+ onTerminalInput(_handler: TerminalInputHandler): () => void;
62
+ setStatus(key: string, text: string | undefined): void;
63
+ setWorkingMessage(message?: string): void;
64
+ setWidget(key: string, content: ExtensionWidgetContent, options?: ExtensionWidgetOptions): void;
65
+ setFooter(_factory?: unknown): void;
66
+ setHeader(_factory?: unknown): void;
67
+ setTitle(title: string): void;
68
+ custom<T>(): Promise<T>;
69
+ setEditorText(text: string): void;
70
+ pasteToEditor(text: string): void;
71
+ getEditorText(): string;
72
+ editor(title: string, prefill?: string, dialogOptions?: ExtensionUIDialogOptions, editorOptions?: {
73
+ promptStyle?: boolean;
74
+ }): Promise<string | undefined>;
75
+ setEditorComponent(_factory?: unknown): void;
76
+ get theme(): Theme;
77
+ getAllThemes(): Promise<{
78
+ name: string;
79
+ path: string | undefined;
80
+ }[]>;
81
+ getTheme(_name: string): Promise<Theme | undefined>;
82
+ setTheme(_theme: string | Theme): Promise<{
83
+ success: boolean;
84
+ error?: string;
85
+ }>;
86
+ getToolsExpanded(): boolean;
87
+ setToolsExpanded(_expanded: boolean): void;
88
+ }
@@ -0,0 +1,8 @@
1
+ import type { BridgeFrameEnvelope } from "../shared/agent-wire/protocol";
2
+ export declare class BridgeEventStream {
3
+ #private;
4
+ constructor(replayLimit?: number);
5
+ get frameCount(): number;
6
+ publish(frame: BridgeFrameEnvelope): void;
7
+ response(lastSeq?: number): Response;
8
+ }
@@ -1,6 +1,7 @@
1
1
  import { Editor, type KeyId } from "@gajae-code/tui";
2
2
  import type { AppKeybinding } from "../../config/keybindings";
3
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.clipboard.pasteImage" | "app.clipboard.copyPrompt">;
4
+ type PastePendingClearReason = "timeout" | "queue-limit";
4
5
  /**
5
6
  * Custom editor that handles configurable app-level shortcuts for coding-agent.
6
7
  */
@@ -25,6 +26,10 @@ export declare class CustomEditor extends Editor {
25
26
  onCopyPrompt?: () => void;
26
27
  /** Called when the configured image-paste shortcut is pressed. */
27
28
  onPasteImage?: () => Promise<boolean>;
29
+ /** Called before bracketed paste content is inserted. Return true to consume it. */
30
+ onPasteText?: (text: string) => boolean | Promise<boolean>;
31
+ /** Called when async paste handling drops queued input instead of replaying it. */
32
+ onPastePendingInputCleared?: (reason: PastePendingClearReason, droppedInputCount: number) => void;
28
33
  /** Called when the configured dequeue shortcut is pressed. */
29
34
  onDequeue?: () => void;
30
35
  /** Called when Caps Lock is pressed. */
@@ -42,6 +47,7 @@ export declare class CustomEditor extends Editor {
42
47
  * Clear all custom key handlers.
43
48
  */
44
49
  clearCustomKeyHandlers(): void;
50
+ dispose(): void;
45
51
  handleInput(data: string): void;
46
52
  }
47
53
  export {};
@@ -21,6 +21,7 @@ export interface HookSelectorOptions {
21
21
  * byte-identical to the previous implementation for all consumers.
22
22
  */
23
23
  wrapFocused?: boolean;
24
+ scrollTitleRows?: number;
24
25
  }
25
26
  export declare class HookSelectorComponent extends Container {
26
27
  #private;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Pure model helpers for the jobs overlay.
3
+ *
4
+ * Kept free of UI/Component dependencies so the grouping/ordering and
5
+ * detail-formatting logic is unit-testable. The selector controller wires these
6
+ * SelectItem lists into nested SelectLists (list -> detail -> confirm).
7
+ */
8
+ import type { SelectItem } from "@gajae-code/tui";
9
+ import type { JobsSnapshot } from "../jobs-observer";
10
+ export type JobRefKind = "monitor" | "cron";
11
+ export interface JobRef {
12
+ kind: JobRefKind;
13
+ id: string;
14
+ }
15
+ /** Compact relative time, e.g. "in 5m", "2m ago", "now". */
16
+ export declare function formatRelative(targetMs: number | undefined, nowMs?: number): string;
17
+ /** Parse a list item value back into a job reference. */
18
+ export declare function parseJobRef(value: string): JobRef | null;
19
+ /**
20
+ * Build the grouped jobs list: monitors first (newest-first), then crons
21
+ * (newest-first). The snapshot arrays are already sorted newest-first.
22
+ */
23
+ export declare function buildJobsListItems(snapshot: JobsSnapshot): SelectItem[];
24
+ /**
25
+ * Build the detail-level items for a job: read-only info rows (value "noop"),
26
+ * then the destructive action, then a back row. `output` is the bounded monitor
27
+ * output tail (ignored for cron jobs).
28
+ */
29
+ export declare function buildJobDetailItems(snapshot: JobsSnapshot, ref: JobRef, output?: string): SelectItem[];
30
+ /** Yes/No confirm items for a destructive action. */
31
+ export declare function buildConfirmItems(actionLabel: string): SelectItem[];
@@ -0,0 +1,30 @@
1
+ import { Container, type SelectItem, SelectList } from "@gajae-code/tui";
2
+ import type { JobsSnapshot } from "../jobs-observer";
3
+ /**
4
+ * Generic single-level selector used by the jobs overlay. The selector
5
+ * controller mounts a fresh instance per navigation level (list -> detail ->
6
+ * confirm); focus is placed on the inner SelectList, matching the existing
7
+ * selector components (e.g. ThemeSelectorComponent).
8
+ */
9
+ export declare class JobsSelectorComponent extends Container {
10
+ #private;
11
+ constructor(items: SelectItem[], onSelect: (item: SelectItem) => void, onCancel: () => void, maxVisible?: number);
12
+ getSelectList(): SelectList;
13
+ }
14
+ export interface JobsOverlayController {
15
+ acknowledgeFailures(): void;
16
+ getSnapshot(): JobsSnapshot;
17
+ getMonitorOutput(id: string): string;
18
+ cancelMonitor(id: string): boolean;
19
+ deleteCron(id: string): boolean;
20
+ }
21
+ export interface JobsOverlayCallbacks {
22
+ close(): void;
23
+ requestRender(): void;
24
+ }
25
+ export declare class JobsOverlayComponent extends Container {
26
+ #private;
27
+ constructor(controller: JobsOverlayController, callbacks: JobsOverlayCallbacks);
28
+ getFocus(): SelectList;
29
+ handleInput(data: string): void;
30
+ }
@@ -1,5 +1,6 @@
1
1
  import type { StatusLinePreset, StatusLineSegmentId, StatusLineSeparatorStyle } from "../../../config/settings-schema";
2
2
  import type { AgentSession } from "../../../session/agent-session";
3
+ import type { JobsSnapshot } from "../../jobs-observer";
3
4
  import type { StatusLineSegmentOptions, StatusLineSettings } from "../status-line";
4
5
  export type { StatusLinePreset, StatusLineSegmentId, StatusLineSegmentOptions, StatusLineSeparatorStyle, StatusLineSettings, };
5
6
  export type RGB = readonly [number, number, number];
@@ -28,6 +29,7 @@ export interface SegmentContext {
28
29
  contextWindow: number;
29
30
  autoCompactEnabled: boolean;
30
31
  subagentCount: number;
32
+ jobs: JobsSnapshot;
31
33
  sessionStartTime: number;
32
34
  git: {
33
35
  branch: string | null;
@@ -2,6 +2,7 @@ import { type Component } from "@gajae-code/tui";
2
2
  import type { StatusLinePreset, StatusLineSegmentId, StatusLineSeparatorStyle } from "../../config/settings-schema";
3
3
  import type { AgentSession } from "../../session/agent-session";
4
4
  import { type SkillActiveEntry } from "../../skill-state/active-state";
5
+ import { type JobsSnapshot } from "../jobs-observer";
5
6
  export interface StatusLineSegmentOptions {
6
7
  model?: {
7
8
  showThinkingLevel?: boolean;
@@ -39,6 +40,7 @@ export declare class StatusLineComponent implements Component {
39
40
  updateSettings(settings: StatusLineSettings): void;
40
41
  setAutoCompactEnabled(enabled: boolean): void;
41
42
  setSubagentCount(count: number): void;
43
+ setJobs(jobs: JobsSnapshot): void;
42
44
  setSessionStartTime(time: number): void;
43
45
  setPlanModeStatus(status: {
44
46
  enabled: boolean;
@@ -17,6 +17,7 @@ export declare class InputController {
17
17
  currentText?: string;
18
18
  }): number;
19
19
  handleBackgroundCommand(): void;
20
+ handleTextPaste(text: string): boolean | Promise<boolean>;
20
21
  handleImagePaste(): Promise<boolean>;
21
22
  createAutocompleteProvider(commands: SlashCommand[], basePath: string): AutocompleteProvider;
22
23
  /** Copy the current editor line to the system clipboard. */