hoomanjs 1.37.1 → 1.37.3

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.
@@ -1,20 +1 @@
1
- import { InterventionActions } from "@strands-agents/sdk";
2
- import type { AfterModelCallEvent, BeforeToolCallEvent } from "@strands-agents/sdk";
3
- import { SteeringHandler } from "@strands-agents/sdk/vended-interventions/steering";
4
- import type { PromptSubmission } from "./components/prompt-input/hooks/usePromptInputController.js";
5
- type QueuedSteeringPrompt = PromptSubmission;
6
- export declare class ChatTurnSteeringController {
7
- private readonly queued;
8
- queue(prompts: readonly QueuedSteeringPrompt[]): boolean;
9
- get hasPending(): boolean;
10
- drainFeedback(): string | null;
11
- }
12
- export declare class ChatTurnSteeringIntervention extends SteeringHandler {
13
- private readonly controller;
14
- readonly name = "hooman:chat-turn-steering";
15
- constructor(controller: ChatTurnSteeringController);
16
- beforeToolCall(_event: BeforeToolCallEvent): ReturnType<typeof InterventionActions.proceed> | ReturnType<typeof InterventionActions.guide>;
17
- afterModelCall(event: AfterModelCallEvent): ReturnType<typeof InterventionActions.proceed> | ReturnType<typeof InterventionActions.guide>;
18
- }
19
- export declare function createChatTurnSteeringIntervention(controller: ChatTurnSteeringController): ChatTurnSteeringIntervention;
20
- export {};
1
+ export { ChatTurnSteeringController, ChatTurnSteeringIntervention, createChatTurnSteeringIntervention, type QueuedSteeringPrompt, } from "../core/agent/turn-steering.js";
@@ -1,67 +1,4 @@
1
- import { InterventionActions } from "@strands-agents/sdk";
2
- import { SteeringHandler } from "@strands-agents/sdk/vended-interventions/steering";
3
- function formatPrompt(prompt) {
4
- const text = prompt.text.trim();
5
- if (prompt.attachments.length === 0) {
6
- return text || "[empty prompt]";
7
- }
8
- const attachmentLines = prompt.attachments.map((attachmentPath) => `[attachment] ${attachmentPath}`);
9
- return [text || "[attachments only]", ...attachmentLines].join("\n");
10
- }
11
- function buildFeedback(prompts) {
12
- const guidance = prompts
13
- .map((prompt, index) => `${index + 1}. ${formatPrompt(prompt)}`)
14
- .join("\n\n");
15
- return [
16
- "The user sent follow-up guidance while this turn was still running.",
17
- "Update your plan before continuing. Treat the following as current user steering:",
18
- guidance,
19
- ].join("\n\n");
20
- }
21
- export class ChatTurnSteeringController {
22
- queued = [];
23
- queue(prompts) {
24
- if (prompts.length === 0) {
25
- return false;
26
- }
27
- this.queued.push(...prompts);
28
- return true;
29
- }
30
- get hasPending() {
31
- return this.queued.length > 0;
32
- }
33
- drainFeedback() {
34
- if (this.queued.length === 0) {
35
- return null;
36
- }
37
- const prompts = this.queued.splice(0, this.queued.length);
38
- return buildFeedback(prompts);
39
- }
40
- }
41
- export class ChatTurnSteeringIntervention extends SteeringHandler {
42
- controller;
43
- name = "hooman:chat-turn-steering";
44
- constructor(controller) {
45
- super();
46
- this.controller = controller;
47
- }
48
- beforeToolCall(_event) {
49
- const feedback = this.controller.drainFeedback();
50
- return feedback
51
- ? InterventionActions.guide(feedback)
52
- : InterventionActions.proceed();
53
- }
54
- afterModelCall(event) {
55
- if (!event.stopData) {
56
- return InterventionActions.proceed();
57
- }
58
- const feedback = this.controller.drainFeedback();
59
- return feedback
60
- ? InterventionActions.guide(feedback)
61
- : InterventionActions.proceed();
62
- }
63
- }
64
- export function createChatTurnSteeringIntervention(controller) {
65
- return new ChatTurnSteeringIntervention(controller);
66
- }
1
+ // Mid-turn steering is implemented in core (also part of the public API); the
2
+ // chat TUI just wires its own prompt-input submissions into it.
3
+ export { ChatTurnSteeringController, ChatTurnSteeringIntervention, createChatTurnSteeringIntervention, } from "../core/agent/turn-steering.js";
67
4
  //# sourceMappingURL=steering.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/chat/steering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../src/chat/steering.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gEAAgE;AAChE,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,kCAAkC,GAEnC,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { InterventionActions } from "@strands-agents/sdk";
2
+ import type { AfterModelCallEvent, BeforeToolCallEvent } from "@strands-agents/sdk";
3
+ import { SteeringHandler } from "@strands-agents/sdk/vended-interventions/steering";
4
+ /**
5
+ * One message queued to steer a running turn — mirrors a prompt submission
6
+ * (freeform text plus resolved attachment paths) without depending on any
7
+ * particular front-end's prompt-input type.
8
+ */
9
+ export type QueuedSteeringPrompt = {
10
+ text: string;
11
+ attachments: string[];
12
+ };
13
+ /**
14
+ * Buffers messages sent while a turn is already running so they can be
15
+ * injected into the *current* turn via {@link ChatTurnSteeringIntervention}
16
+ * instead of waiting in line for a brand new one. Front-ends (chat TUI, ACP
17
+ * bridge, a web client, etc.) push into this from their own "send message"
18
+ * handler whenever a turn is already in flight.
19
+ */
20
+ export declare class ChatTurnSteeringController {
21
+ private readonly queued;
22
+ queue(prompts: readonly QueuedSteeringPrompt[]): boolean;
23
+ get hasPending(): boolean;
24
+ drainFeedback(): string | null;
25
+ }
26
+ /**
27
+ * Injects {@link ChatTurnSteeringController} feedback into the running turn
28
+ * via the `@strands-agents/sdk` steering intervention contract — on the next
29
+ * tool call, or (if the turn is about to stop) on the model's stop event, so
30
+ * "steered" guidance lands before the turn would otherwise finish.
31
+ */
32
+ export declare class ChatTurnSteeringIntervention extends SteeringHandler {
33
+ private readonly controller;
34
+ readonly name = "hooman:chat-turn-steering";
35
+ constructor(controller: ChatTurnSteeringController);
36
+ beforeToolCall(_event: BeforeToolCallEvent): ReturnType<typeof InterventionActions.proceed> | ReturnType<typeof InterventionActions.guide>;
37
+ afterModelCall(event: AfterModelCallEvent): ReturnType<typeof InterventionActions.proceed> | ReturnType<typeof InterventionActions.guide>;
38
+ }
39
+ export declare function createChatTurnSteeringIntervention(controller: ChatTurnSteeringController): ChatTurnSteeringIntervention;
@@ -0,0 +1,80 @@
1
+ import { InterventionActions } from "@strands-agents/sdk";
2
+ import { SteeringHandler } from "@strands-agents/sdk/vended-interventions/steering";
3
+ function formatSteeringPrompt(prompt) {
4
+ const text = prompt.text.trim();
5
+ if (prompt.attachments.length === 0) {
6
+ return text || "[empty prompt]";
7
+ }
8
+ const attachmentLines = prompt.attachments.map((attachmentPath) => `[attachment] ${attachmentPath}`);
9
+ return [text || "[attachments only]", ...attachmentLines].join("\n");
10
+ }
11
+ function buildSteeringFeedback(prompts) {
12
+ const guidance = prompts
13
+ .map((prompt, index) => `${index + 1}. ${formatSteeringPrompt(prompt)}`)
14
+ .join("\n\n");
15
+ return [
16
+ "The user sent follow-up guidance while this turn was still running.",
17
+ "Update your plan before continuing. Treat the following as current user steering:",
18
+ guidance,
19
+ ].join("\n\n");
20
+ }
21
+ /**
22
+ * Buffers messages sent while a turn is already running so they can be
23
+ * injected into the *current* turn via {@link ChatTurnSteeringIntervention}
24
+ * instead of waiting in line for a brand new one. Front-ends (chat TUI, ACP
25
+ * bridge, a web client, etc.) push into this from their own "send message"
26
+ * handler whenever a turn is already in flight.
27
+ */
28
+ export class ChatTurnSteeringController {
29
+ queued = [];
30
+ queue(prompts) {
31
+ if (prompts.length === 0) {
32
+ return false;
33
+ }
34
+ this.queued.push(...prompts);
35
+ return true;
36
+ }
37
+ get hasPending() {
38
+ return this.queued.length > 0;
39
+ }
40
+ drainFeedback() {
41
+ if (this.queued.length === 0) {
42
+ return null;
43
+ }
44
+ const prompts = this.queued.splice(0, this.queued.length);
45
+ return buildSteeringFeedback(prompts);
46
+ }
47
+ }
48
+ /**
49
+ * Injects {@link ChatTurnSteeringController} feedback into the running turn
50
+ * via the `@strands-agents/sdk` steering intervention contract — on the next
51
+ * tool call, or (if the turn is about to stop) on the model's stop event, so
52
+ * "steered" guidance lands before the turn would otherwise finish.
53
+ */
54
+ export class ChatTurnSteeringIntervention extends SteeringHandler {
55
+ controller;
56
+ name = "hooman:chat-turn-steering";
57
+ constructor(controller) {
58
+ super();
59
+ this.controller = controller;
60
+ }
61
+ beforeToolCall(_event) {
62
+ const feedback = this.controller.drainFeedback();
63
+ return feedback
64
+ ? InterventionActions.guide(feedback)
65
+ : InterventionActions.proceed();
66
+ }
67
+ afterModelCall(event) {
68
+ if (!event.stopData) {
69
+ return InterventionActions.proceed();
70
+ }
71
+ const feedback = this.controller.drainFeedback();
72
+ return feedback
73
+ ? InterventionActions.guide(feedback)
74
+ : InterventionActions.proceed();
75
+ }
76
+ }
77
+ export function createChatTurnSteeringIntervention(controller) {
78
+ return new ChatTurnSteeringIntervention(controller);
79
+ }
80
+ //# sourceMappingURL=turn-steering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-steering.js","sourceRoot":"","sources":["../../../src/core/agent/turn-steering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Manager as McpManager } from "../mcp/index.js";
2
+ import type { ToolApprovalAsk } from "./intervention.js";
3
+ /** Metadata a channel-driven job (daemon, bot, etc.) stashes on `appState.origin`. */
4
+ export type ChannelOrigin = {
5
+ server?: string;
6
+ source?: string;
7
+ user?: string;
8
+ session?: string;
9
+ thread?: string;
10
+ };
11
+ /** Reads the `origin` an {@link McpManager}-backed channel job stashes on `appState`. */
12
+ export declare function readChannelOrigin(rawAgent: {
13
+ appState: {
14
+ get(key: string): unknown;
15
+ };
16
+ }): ChannelOrigin | null;
17
+ /**
18
+ * Builds a {@link ToolApprovalAsk} that resolves tool approvals over
19
+ * `hooman/channel/permission` — the remote-approval capability MCP servers
20
+ * advertise for channel-driven jobs (daemon mode, chat bots, etc.) that have
21
+ * no local human to prompt. Pair with {@link HoomanToolApprovalIntervention}.
22
+ *
23
+ * Requires the job's `appState.origin` to carry the originating channel
24
+ * server name (see {@link readChannelOrigin}); jobs without one, or servers
25
+ * that don't support the capability, are rejected.
26
+ */
27
+ export declare function createChannelPermissionAsk(manager: McpManager): ToolApprovalAsk;
@@ -0,0 +1,104 @@
1
+ const TOOL_DESCRIPTION_PREVIEW_LIMIT = 50;
2
+ const TOOL_ARGS_PREVIEW_LIMIT = 50;
3
+ function randomRequestId() {
4
+ return crypto.randomUUID();
5
+ }
6
+ function truncateWithEllipsis(text, max) {
7
+ return text.length > max ? `${text.slice(0, max)}…` : text;
8
+ }
9
+ function truncateWithHiddenCharCount(text, max) {
10
+ if (text.length <= max) {
11
+ return text;
12
+ }
13
+ const hidden = text.length - max;
14
+ return `${text.slice(0, max)}…(${hidden} chars)`;
15
+ }
16
+ function inputPreview(input) {
17
+ try {
18
+ const text = JSON.stringify(input) ?? "null";
19
+ return truncateWithHiddenCharCount(text, TOOL_ARGS_PREVIEW_LIMIT);
20
+ }
21
+ catch {
22
+ return truncateWithHiddenCharCount(String(input), TOOL_ARGS_PREVIEW_LIMIT);
23
+ }
24
+ }
25
+ /** Reads the `origin` an {@link McpManager}-backed channel job stashes on `appState`. */
26
+ export function readChannelOrigin(rawAgent) {
27
+ const raw = rawAgent.appState.get("origin");
28
+ if (!raw || typeof raw !== "object") {
29
+ return null;
30
+ }
31
+ const entry = raw;
32
+ const text = (value) => {
33
+ if (typeof value !== "string") {
34
+ return undefined;
35
+ }
36
+ const trimmed = value.trim();
37
+ return trimmed.length > 0 ? trimmed : undefined;
38
+ };
39
+ return {
40
+ server: text(entry.server),
41
+ source: text(entry.source),
42
+ user: text(entry.user),
43
+ session: text(entry.session),
44
+ thread: text(entry.thread),
45
+ };
46
+ }
47
+ /**
48
+ * Builds a {@link ToolApprovalAsk} that resolves tool approvals over
49
+ * `hooman/channel/permission` — the remote-approval capability MCP servers
50
+ * advertise for channel-driven jobs (daemon mode, chat bots, etc.) that have
51
+ * no local human to prompt. Pair with {@link HoomanToolApprovalIntervention}.
52
+ *
53
+ * Requires the job's `appState.origin` to carry the originating channel
54
+ * server name (see {@link readChannelOrigin}); jobs without one, or servers
55
+ * that don't support the capability, are rejected.
56
+ */
57
+ export function createChannelPermissionAsk(manager) {
58
+ return async (request, event) => {
59
+ const origin = readChannelOrigin(event.agent);
60
+ if (!origin?.server) {
61
+ return {
62
+ decision: "reject",
63
+ reason: `Tool "${request.toolName}" was denied: missing channel origin context.`,
64
+ };
65
+ }
66
+ const supported = await manager.supportsChannelPermission(origin.server);
67
+ if (!supported) {
68
+ return {
69
+ decision: "reject",
70
+ reason: `Tool "${request.toolName}" was denied: MCP server "${origin.server}" does not support hooman/channel/permission.`,
71
+ };
72
+ }
73
+ try {
74
+ const behavior = await manager.requestChannelPermission(origin.server, {
75
+ requestId: randomRequestId(),
76
+ tool: request.toolName,
77
+ description: truncateWithEllipsis(request.description?.trim() ??
78
+ `Run tool "${request.toolName}" via channel.`, TOOL_DESCRIPTION_PREVIEW_LIMIT),
79
+ preview: inputPreview(request.input),
80
+ source: origin.source,
81
+ user: origin.user,
82
+ session: origin.session,
83
+ thread: origin.thread,
84
+ });
85
+ if (behavior === "allow_once") {
86
+ return "allow";
87
+ }
88
+ if (behavior === "allow_always") {
89
+ return "always";
90
+ }
91
+ return {
92
+ decision: "reject",
93
+ reason: `Tool "${request.toolName}" was rejected by remote approval.`,
94
+ };
95
+ }
96
+ catch (error) {
97
+ return {
98
+ decision: "reject",
99
+ reason: `Tool "${request.toolName}" was denied: failed to request permission (${error instanceof Error ? error.message : String(error)}).`,
100
+ };
101
+ }
102
+ };
103
+ }
104
+ //# sourceMappingURL=channel-ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-ask.js","sourceRoot":"","sources":["../../../src/core/approvals/channel-ask.ts"],"names":[],"mappings":"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"}
@@ -1,96 +1,8 @@
1
+ import { createChannelPermissionAsk } from "../core/approvals/channel-ask.js";
1
2
  import { HoomanToolApprovalIntervention } from "../core/approvals/intervention.js";
2
- const TOOL_DESCRIPTION_PREVIEW_LIMIT = 50;
3
- const TOOL_ARGS_PREVIEW_LIMIT = 50;
4
- function randomRequestId() {
5
- return crypto.randomUUID();
6
- }
7
- function truncateWithEllipsis(text, max) {
8
- return text.length > max ? `${text.slice(0, max)}…` : text;
9
- }
10
- function truncateWithHiddenCharCount(text, max) {
11
- if (text.length <= max) {
12
- return text;
13
- }
14
- const hidden = text.length - max;
15
- return `${text.slice(0, max)}…(${hidden} chars)`;
16
- }
17
- function inputPreview(input) {
18
- try {
19
- const text = JSON.stringify(input) ?? "null";
20
- return truncateWithHiddenCharCount(text, TOOL_ARGS_PREVIEW_LIMIT);
21
- }
22
- catch {
23
- return truncateWithHiddenCharCount(String(input), TOOL_ARGS_PREVIEW_LIMIT);
24
- }
25
- }
26
- function readOrigin(rawAgent) {
27
- const raw = rawAgent.appState.get("origin");
28
- if (!raw || typeof raw !== "object") {
29
- return null;
30
- }
31
- const entry = raw;
32
- const text = (value) => {
33
- if (typeof value !== "string") {
34
- return undefined;
35
- }
36
- const trimmed = value.trim();
37
- return trimmed.length > 0 ? trimmed : undefined;
38
- };
39
- return {
40
- server: text(entry.server),
41
- source: text(entry.source),
42
- user: text(entry.user),
43
- session: text(entry.session),
44
- thread: text(entry.thread),
45
- };
46
- }
47
3
  export function createDaemonApprovalIntervention(manager) {
48
4
  return new HoomanToolApprovalIntervention({
49
- ask: async (request, event) => {
50
- const origin = readOrigin(event.agent);
51
- if (!origin?.server) {
52
- return {
53
- decision: "reject",
54
- reason: `Tool "${request.toolName}" was denied: missing daemon origin context.`,
55
- };
56
- }
57
- const supported = await manager.supportsChannelPermission(origin.server);
58
- if (!supported) {
59
- return {
60
- decision: "reject",
61
- reason: `Tool "${request.toolName}" was denied: MCP server "${origin.server}" does not support hooman/channel/permission.`,
62
- };
63
- }
64
- try {
65
- const behavior = await manager.requestChannelPermission(origin.server, {
66
- requestId: randomRequestId(),
67
- tool: request.toolName,
68
- description: truncateWithEllipsis(request.description?.trim() ??
69
- `Run tool "${request.toolName}" in daemon mode.`, TOOL_DESCRIPTION_PREVIEW_LIMIT),
70
- preview: inputPreview(request.input),
71
- source: origin.source,
72
- user: origin.user,
73
- session: origin.session,
74
- thread: origin.thread,
75
- });
76
- if (behavior === "allow_once") {
77
- return "allow";
78
- }
79
- if (behavior === "allow_always") {
80
- return "always";
81
- }
82
- return {
83
- decision: "reject",
84
- reason: `Tool "${request.toolName}" was rejected by remote approval.`,
85
- };
86
- }
87
- catch (error) {
88
- return {
89
- decision: "reject",
90
- reason: `Tool "${request.toolName}" was denied: failed to request permission (${error instanceof Error ? error.message : String(error)}).`,
91
- };
92
- }
93
- },
5
+ ask: createChannelPermissionAsk(manager),
94
6
  });
95
7
  }
96
8
  //# sourceMappingURL=approvals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/daemon/approvals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/daemon/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AAGnF,MAAM,UAAU,gCAAgC,CAAC,OAAmB;IAClE,OAAO,IAAI,8BAA8B,CAAC;QACxC,GAAG,EAAE,0BAA0B,CAAC,OAAO,CAAC;KACzC,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  export { bootstrap } from "./core/index.js";
2
2
  export type { AcpMeta, BootstrapMeta, BootstrapMode } from "./core/index.js";
3
3
  export { Config as HoomanConfig, LlmProvider } from "./core/config.js";
4
- export type { CompactionConfig, ConfigData, LlmConfig, NamedLlmConfig, NamedProviderConfig, PromptsConfig, ProviderConfig, ResolvedNamedLlmConfig, SearchConfig, ToolsConfig, } from "./core/config.js";
4
+ export type { CompactionConfig, ConfigData, ConfigOptions, LlmConfig, NamedLlmConfig, NamedProviderConfig, PromptsConfig, ProviderConfig, ResolvedNamedLlmConfig, SearchConfig, ToolsConfig, } from "./core/config.js";
5
+ export { createRuntimeConfig, createRuntimeMcpConfig, runtimeConfigOptions, runtimeConfigSources, } from "./core/runtime-config.js";
6
+ export type { RuntimeConfigSources } from "./core/runtime-config.js";
5
7
  export { attachmentsPath, basePath, configJsonPath, instructionsMdPath, mcpJsonPath, mcpOauthJsonPath, sessionsPath, skillsPath, } from "./core/utils/paths.js";
6
8
  export { openBrowser } from "./core/utils/browser.js";
7
9
  export { attachmentDiagnosticBlock, attachmentPathsToPromptBlocks, normalizeAttachmentPaths, readAttachmentAsBlocksOrBase64, } from "./core/utils/attachments.js";
@@ -9,8 +11,10 @@ export type { AttachmentBinaryFallback, AttachmentMediaBlocks, AttachmentReadRes
9
11
  export { detectDocumentFormat, detectImageFormat, detectVideoFormat, } from "./core/utils/file-formats.js";
10
12
  export { getCwd, runWithCwd } from "./core/utils/cwd-context.js";
11
13
  export { isResolvedPathInsideDir, normalizeUserPath, } from "./core/utils/normalize-user-path.js";
14
+ export { candidateWalkUpPaths, discoverWalkUpFiles, findGitRoot, } from "./core/utils/discover-files.js";
12
15
  export { create as createAgent } from "./core/agent/index.js";
13
16
  export { applySessionMode } from "./core/agent/sync-tool-registry-mode.js";
17
+ export { ModeAwareToolRegistry } from "./core/agent/mode-aware-tool-registry.js";
14
18
  export { HOOMAN_CHANNEL, HOOMAN_CHANNEL_PERMISSION, Manager as McpManager, createMcpConfig, createMcpManager, createMcpOAuthService, createMcpOAuthStore, } from "./core/mcp/index.js";
15
19
  export type { ChannelMessage, ChannelPermissionBehavior, ChannelSubscription, ChannelSubscriptionHandle, NamedMcpTransport, ServerAuthStatus, } from "./core/mcp/index.js";
16
20
  export { Config as McpConfig, type McpServersFile } from "./core/mcp/config.js";
@@ -21,6 +25,8 @@ export type { McpTransport, Sse, Stdio, StreamableHttp, } from "./core/mcp/types
21
25
  export { PrefixedMcpTool } from "./core/mcp/prefixed-mcp-tool.js";
22
26
  export { createByeTools, createFetchTools, createFilesystemTools, createGrepTools, createShellTools, createSleepTools, createThinkingTools, createTimeTools, createTodoTools, createWebSearchTools, } from "./core/tools/index.js";
23
27
  export { UPDATE_TODOS_TOOL_NAME } from "./core/tools/todo.js";
28
+ export { getTerminalBackend, setTerminalBackend, type TerminalBackend, type TerminalRunRequest, type TerminalRunResult, } from "./core/tools/terminal-backend.js";
29
+ export { getTextFsBackend, setTextFsBackend, type TextFsBackend, type TextFsReadOptions, } from "./core/tools/text-fs-backend.js";
24
30
  export { AGENT_SKILLS_STATE_KEY, Registry as SkillsRegistry, builtInSkillsPath, clearAgentSkillsPromptInjectionState, createAgentSkillsPlugin, createAgentSkillSources, createSkillsRegistry, } from "./core/skills/index.js";
25
31
  export type { SkillListEntry, SkillSearchResult, } from "./core/skills/registry.js";
26
32
  export { System as SystemPrompt, system as createSystemPrompt, } from "./core/prompts/index.js";
@@ -43,13 +49,22 @@ export { StrandsOllamaModel, type OllamaModelConfig, } from "./core/models/ollam
43
49
  export { createContext } from "./core/agent/index.js";
44
50
  export { FlatFileStorage } from "./core/sessions/flat-file-storage.js";
45
51
  export { LazySessionManager, type LazySessionManagerConfig, } from "./core/sessions/lazy-session-manager.js";
52
+ export { TolerantFileStorage } from "./core/sessions/tolerant-file-storage.js";
53
+ export { latestCliSessionForCwd, listCliSessions, type CliSessionSummary, } from "./core/sessions/list-cli-sessions.js";
46
54
  export { SUBAGENT_TOOL_NAME_PREFIX, createSubagentTools, loadSubagentRegistry, } from "./core/subagents/index.js";
47
55
  export type { SubagentKindConfig, SubagentKindDefinition, SubagentRegistry, } from "./core/subagents/index.js";
48
56
  export { EXIT_REQUESTED_CODE, EXIT_REQUESTED_STATE_KEY, consumeExitRequest, isExitRequested, requestExit, } from "./core/state/exit-request.js";
49
- export { INTERNAL_ALWAYS_ALLOWED as TOOL_APPROVAL_INTERNAL_ALWAYS_ALLOWED, isImplicitlyAllowed, planModeWriteEditRejectionMessage, } from "./core/state/tool-approvals.js";
57
+ export { INTERNAL_ALWAYS_ALLOWED as TOOL_APPROVAL_INTERNAL_ALWAYS_ALLOWED, isImplicitlyAllowed, isToolVisible, planModeWriteEditRejectionMessage, } from "./core/state/tool-approvals.js";
50
58
  export { Allowlist, getAllowlist, type AllowlistOptions, type AllowlistRule, } from "./core/approvals/allowlist.js";
59
+ export { arityPrefix, splitCommands, tokenize, } from "./core/approvals/bash-arity.js";
60
+ export { matchWildcard } from "./core/approvals/wildcard.js";
61
+ export { HoomanToolApprovalIntervention, type HoomanToolApprovalInterventionConfig, type ToolApprovalAsk, type ToolApprovalDecision, type ToolApprovalRequest, type ToolApprovalResult, } from "./core/approvals/intervention.js";
62
+ export { createChannelPermissionAsk, readChannelOrigin, type ChannelOrigin as ToolApprovalChannelOrigin, } from "./core/approvals/channel-ask.js";
63
+ export { ChatTurnSteeringController, ChatTurnSteeringIntervention, createChatTurnSteeringIntervention, type QueuedSteeringPrompt, } from "./core/agent/turn-steering.js";
51
64
  export { YOLO_STATE_KEY, isYoloEnabled, setYoloEnabled, } from "./core/state/yolo.js";
52
65
  export { MODE_STATE_KEY, getModeState, setSessionMode, type SessionMode, } from "./core/state/session-mode.js";
66
+ export { DEFAULT_SESSION_MODE, MODE_DEFINITIONS, MODE_IDS, formatModeNames, getModeDefinition, getModeIds, getModeOptions, getModeTools, isKnownSessionMode, isModeDefinition, loadModeDefinitions, type KnownSessionMode, type ModeDefinition, } from "./core/modes/index.js";
67
+ export type { LoadedModeDefinition } from "./core/modes/registry.js";
53
68
  export { TODO_ITEMS_STATE_KEY, TODO_VISIBLE_STATE_KEY, TodoItemSchema, TodoStatusSchema, clearTodoState, getTodoViewState, setTodoState, summarizeTodos, } from "./core/state/todos.js";
54
69
  export type { TodoItem, TodoStatus, TodoViewState, } from "./core/state/todos.js";
55
70
  export { readThinkingState, writeThinkingState, } from "./core/state/thought-process.js";
package/dist/index.js CHANGED
@@ -2,14 +2,17 @@
2
2
  // points stay internal to the CLI package surface.
3
3
  export { bootstrap } from "./core/index.js";
4
4
  export { Config as HoomanConfig, LlmProvider } from "./core/config.js";
5
+ export { createRuntimeConfig, createRuntimeMcpConfig, runtimeConfigOptions, runtimeConfigSources, } from "./core/runtime-config.js";
5
6
  export { attachmentsPath, basePath, configJsonPath, instructionsMdPath, mcpJsonPath, mcpOauthJsonPath, sessionsPath, skillsPath, } from "./core/utils/paths.js";
6
7
  export { openBrowser } from "./core/utils/browser.js";
7
8
  export { attachmentDiagnosticBlock, attachmentPathsToPromptBlocks, normalizeAttachmentPaths, readAttachmentAsBlocksOrBase64, } from "./core/utils/attachments.js";
8
9
  export { detectDocumentFormat, detectImageFormat, detectVideoFormat, } from "./core/utils/file-formats.js";
9
10
  export { getCwd, runWithCwd } from "./core/utils/cwd-context.js";
10
11
  export { isResolvedPathInsideDir, normalizeUserPath, } from "./core/utils/normalize-user-path.js";
12
+ export { candidateWalkUpPaths, discoverWalkUpFiles, findGitRoot, } from "./core/utils/discover-files.js";
11
13
  export { create as createAgent } from "./core/agent/index.js";
12
14
  export { applySessionMode } from "./core/agent/sync-tool-registry-mode.js";
15
+ export { ModeAwareToolRegistry } from "./core/agent/mode-aware-tool-registry.js";
13
16
  export { HOOMAN_CHANNEL, HOOMAN_CHANNEL_PERMISSION, Manager as McpManager, createMcpConfig, createMcpManager, createMcpOAuthService, createMcpOAuthStore, } from "./core/mcp/index.js";
14
17
  export { Config as McpConfig } from "./core/mcp/config.js";
15
18
  export { HoomanMcpOAuthProvider, McpOAuthConfigSchema, McpOAuthService, McpOAuthStore, StoredMcpOAuthClientSchema, StoredMcpOAuthDiscoverySchema, StoredMcpOAuthEntrySchema, StoredMcpOAuthFileSchema, StoredMcpOAuthTokensSchema, canonicalizeRemoteServerUrl, createRemoteTransportFingerprint, createRemoteTransportIdentity, startCallbackServer, } from "./core/mcp/oauth/index.js";
@@ -17,6 +20,8 @@ export { McpTransportSchema, SseSchema, StdioSchema, StreamableHttpSchema, } fro
17
20
  export { PrefixedMcpTool } from "./core/mcp/prefixed-mcp-tool.js";
18
21
  export { createByeTools, createFetchTools, createFilesystemTools, createGrepTools, createShellTools, createSleepTools, createThinkingTools, createTimeTools, createTodoTools, createWebSearchTools, } from "./core/tools/index.js";
19
22
  export { UPDATE_TODOS_TOOL_NAME } from "./core/tools/todo.js";
23
+ export { getTerminalBackend, setTerminalBackend, } from "./core/tools/terminal-backend.js";
24
+ export { getTextFsBackend, setTextFsBackend, } from "./core/tools/text-fs-backend.js";
20
25
  export { AGENT_SKILLS_STATE_KEY, Registry as SkillsRegistry, builtInSkillsPath, clearAgentSkillsPromptInjectionState, createAgentSkillsPlugin, createAgentSkillSources, createSkillsRegistry, } from "./core/skills/index.js";
21
26
  export { System as SystemPrompt, system as createSystemPrompt, } from "./core/prompts/index.js";
22
27
  export { modelProviders } from "./core/models/index.js";
@@ -35,12 +40,20 @@ export { StrandsOllamaModel, } from "./core/models/ollama/strands-ollama.js";
35
40
  export { createContext } from "./core/agent/index.js";
36
41
  export { FlatFileStorage } from "./core/sessions/flat-file-storage.js";
37
42
  export { LazySessionManager, } from "./core/sessions/lazy-session-manager.js";
43
+ export { TolerantFileStorage } from "./core/sessions/tolerant-file-storage.js";
44
+ export { latestCliSessionForCwd, listCliSessions, } from "./core/sessions/list-cli-sessions.js";
38
45
  export { SUBAGENT_TOOL_NAME_PREFIX, createSubagentTools, loadSubagentRegistry, } from "./core/subagents/index.js";
39
46
  export { EXIT_REQUESTED_CODE, EXIT_REQUESTED_STATE_KEY, consumeExitRequest, isExitRequested, requestExit, } from "./core/state/exit-request.js";
40
- export { INTERNAL_ALWAYS_ALLOWED as TOOL_APPROVAL_INTERNAL_ALWAYS_ALLOWED, isImplicitlyAllowed, planModeWriteEditRejectionMessage, } from "./core/state/tool-approvals.js";
47
+ export { INTERNAL_ALWAYS_ALLOWED as TOOL_APPROVAL_INTERNAL_ALWAYS_ALLOWED, isImplicitlyAllowed, isToolVisible, planModeWriteEditRejectionMessage, } from "./core/state/tool-approvals.js";
41
48
  export { Allowlist, getAllowlist, } from "./core/approvals/allowlist.js";
49
+ export { arityPrefix, splitCommands, tokenize, } from "./core/approvals/bash-arity.js";
50
+ export { matchWildcard } from "./core/approvals/wildcard.js";
51
+ export { HoomanToolApprovalIntervention, } from "./core/approvals/intervention.js";
52
+ export { createChannelPermissionAsk, readChannelOrigin, } from "./core/approvals/channel-ask.js";
53
+ export { ChatTurnSteeringController, ChatTurnSteeringIntervention, createChatTurnSteeringIntervention, } from "./core/agent/turn-steering.js";
42
54
  export { YOLO_STATE_KEY, isYoloEnabled, setYoloEnabled, } from "./core/state/yolo.js";
43
55
  export { MODE_STATE_KEY, getModeState, setSessionMode, } from "./core/state/session-mode.js";
56
+ export { DEFAULT_SESSION_MODE, MODE_DEFINITIONS, MODE_IDS, formatModeNames, getModeDefinition, getModeIds, getModeOptions, getModeTools, isKnownSessionMode, isModeDefinition, loadModeDefinitions, } from "./core/modes/index.js";
44
57
  export { TODO_ITEMS_STATE_KEY, TODO_VISIBLE_STATE_KEY, TodoItemSchema, TodoStatusSchema, clearTodoState, getTodoViewState, setTodoState, summarizeTodos, } from "./core/state/todos.js";
45
58
  export { readThinkingState, writeThinkingState, } from "./core/state/thought-process.js";
46
59
  export { setFileToolDisplay, takeFileToolDisplay, } from "./core/state/file-tool-display.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hoomanjs",
3
- "version": "1.37.1",
3
+ "version": "1.37.3",
4
4
  "description": "Hackable AI agent toolkit for building local CLI, ACP, MCP, and channel-driven workflows.",
5
5
  "author": {
6
6
  "name": "Vaibhav Pandey",