itermbot 1.0.8 → 1.0.9

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 (89) hide show
  1. package/.github/workflows/ci.yml +23 -5
  2. package/.github/workflows/release.yml +24 -3
  3. package/README.md +25 -73
  4. package/cleanup-unused.patch +2 -2
  5. package/config/app.yaml +1 -3
  6. package/config/memory.yaml +1 -2
  7. package/config/model.yaml +3 -4
  8. package/config/runtime.yaml +7 -0
  9. package/config/skill.yaml +1 -1
  10. package/config/tool.yaml +2 -2
  11. package/dist/chat/builtin-commands.js +1 -1
  12. package/dist/chat/builtin-commands.js.map +1 -1
  13. package/dist/chat/progress.d.ts +1 -1
  14. package/dist/chat/progress.d.ts.map +1 -1
  15. package/dist/chat/progress.js +1 -1
  16. package/dist/chat/progress.js.map +1 -1
  17. package/dist/chat/tool-result.js +1 -1
  18. package/dist/chat/tool-result.js.map +1 -1
  19. package/dist/config.d.ts +13 -2
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js +40 -9
  22. package/dist/config.js.map +1 -1
  23. package/dist/direct-command-progress.d.ts +9 -0
  24. package/dist/direct-command-progress.d.ts.map +1 -0
  25. package/dist/direct-command-progress.js +71 -0
  26. package/dist/direct-command-progress.js.map +1 -0
  27. package/dist/index.js +105 -147
  28. package/dist/index.js.map +1 -1
  29. package/dist/iterm/direct-command-router.js +1 -1
  30. package/dist/iterm/direct-command-router.js.map +1 -1
  31. package/dist/skills.d.ts +2 -0
  32. package/dist/skills.d.ts.map +1 -0
  33. package/dist/skills.js +9 -0
  34. package/dist/skills.js.map +1 -0
  35. package/dist/startup/colors.d.ts +1 -1
  36. package/dist/startup/colors.d.ts.map +1 -1
  37. package/dist/startup/colors.js +98 -72
  38. package/dist/startup/colors.js.map +1 -1
  39. package/dist/startup/diagnostics.js +1 -1
  40. package/dist/startup/diagnostics.js.map +1 -1
  41. package/dist/startup/os.js +1 -1
  42. package/dist/startup/os.js.map +1 -1
  43. package/dist/startup/ui.d.ts +1 -1
  44. package/dist/startup/ui.d.ts.map +1 -1
  45. package/dist/startup/ui.js +1 -1
  46. package/dist/startup/ui.js.map +1 -1
  47. package/package.json +14 -15
  48. package/scripts/build-internal-deps.mjs +94 -16
  49. package/scripts/resolve-deps.js +46 -2
  50. package/scripts/test-llm.mjs +2 -2
  51. package/skills/disk-usage-investigate/SKILL.md +8 -0
  52. package/skills/gpu-ssh-monitor/SKILL.md +5 -5
  53. package/src/chat/builtin-commands.ts +1 -1
  54. package/src/chat/progress.ts +1 -1
  55. package/src/chat/tool-result.ts +1 -1
  56. package/src/config.ts +70 -15
  57. package/src/direct-command-progress.ts +85 -0
  58. package/src/external-modules.d.ts +9 -0
  59. package/src/index.ts +118 -160
  60. package/src/iterm/direct-command-router.ts +1 -1
  61. package/src/skills.ts +9 -0
  62. package/src/startup/colors.ts +123 -89
  63. package/src/startup/diagnostics.ts +1 -1
  64. package/src/startup/os.ts +1 -1
  65. package/src/startup/ui.ts +1 -1
  66. package/test/{chat-flow.integration.test.mjs → integration/chat-flow.integration.test.mjs} +12 -12
  67. package/test/{live-iterm-llm.integration.test.mjs → integration/live-iterm-llm.integration.test.mjs} +9 -9
  68. package/test/{builtin-commands.test.mjs → unit/builtin-commands.test.mjs} +4 -4
  69. package/test/{config.test.mjs → unit/config.test.mjs} +10 -2
  70. package/test/{direct-command-fast-path.test.mjs → unit/direct-command-fast-path.test.mjs} +1 -1
  71. package/test/{direct-command-router.test.mjs → unit/direct-command-router.test.mjs} +18 -18
  72. package/test/{response-safety.test.mjs → unit/response-safety.test.mjs} +1 -1
  73. package/test/{session-hint.test.mjs → unit/session-hint.test.mjs} +1 -1
  74. package/test/{chat-progress.test.mjs → unit/startup/chat-progress.test.mjs} +1 -1
  75. package/test/{diagnostics.test.mjs → unit/startup/diagnostics.test.mjs} +1 -1
  76. package/test/{startup-colors.test.mjs → unit/startup/startup-colors.test.mjs} +1 -1
  77. package/test/{target-panel-policy.test.mjs → unit/target-panel-policy.test.mjs} +23 -23
  78. package/test/unit/tool-call-recovery-bootstrap.test.mjs +102 -0
  79. package/test/unit/tool-call-recovery-core.test.mjs +157 -0
  80. package/test/unit/tool-call-recovery-scope.test.mjs +172 -0
  81. package/dist/runtime/text-tool-call-recovery.d.ts +0 -23
  82. package/dist/runtime/text-tool-call-recovery.d.ts.map +0 -1
  83. package/dist/runtime/text-tool-call-recovery.js +0 -612
  84. package/dist/runtime/text-tool-call-recovery.js.map +0 -1
  85. package/macos_disk_usage_agent_plan.md +0 -244
  86. package/scripts/internal-package-refs.mjs +0 -158
  87. package/scripts/patch-buildin-cache.sh +0 -22
  88. package/src/runtime/text-tool-call-recovery.ts +0 -706
  89. package/test/tool-call-recovery.test.mjs +0 -788
@@ -5,9 +5,6 @@ on:
5
5
  branches: ['**']
6
6
  pull_request:
7
7
  branches: ['**']
8
- repository_dispatch:
9
- types:
10
- - easynet-package-updated
11
8
 
12
9
  concurrency:
13
10
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -33,9 +30,31 @@ jobs:
33
30
  run: |
34
31
  touch .npmrc
35
32
  grep -q '^registry=https://registry.npmjs.org' .npmrc || echo "registry=https://registry.npmjs.org/" >> .npmrc
36
- grep -q '@easynet:registry=' .npmrc || echo "@easynet:registry=https://registry.npmjs.org/" >> .npmrc
33
+ grep -q '@botbotgo:registry=' .npmrc || echo "@botbotgo:registry=https://registry.npmjs.org/" >> .npmrc
37
34
  grep -q '@wallee:registry=' .npmrc || echo "@wallee:registry=https://registry.npmjs.org/" >> .npmrc
38
35
 
36
+ - name: Checkout workspace deps
37
+ env:
38
+ WORKSPACE_READ_TOKEN: ${{ secrets.AGENT_SKILL_READ_TOKEN || secrets.DOWNSTREAM_TRIGGER_TOKEN || secrets.GITHUB_TOKEN }}
39
+ run: |
40
+ set -euo pipefail
41
+ clone_repo() {
42
+ local repo="$1"
43
+ local dest="$2"
44
+ if git clone --depth 1 --branch master "https://x-access-token:${WORKSPACE_READ_TOKEN}@github.com/${repo}.git" "${dest}"; then
45
+ return 0
46
+ fi
47
+ git clone --depth 1 --branch main "https://x-access-token:${WORKSPACE_READ_TOKEN}@github.com/${repo}.git" "${dest}"
48
+ }
49
+ mkdir -p ../../framework
50
+ rm -rf ../../framework/common ../../framework/memory ../../framework/model ../../framework/runtime ../../framework/kit ../../framework/kit-builtin
51
+ clone_repo "botbotgo/common" ../../framework/common
52
+ clone_repo "botbotgo/memory" ../../framework/memory
53
+ clone_repo "botbotgo/model" ../../framework/model
54
+ clone_repo "botbotgo/runtime" ../../framework/runtime
55
+ clone_repo "botbotgo/kit" ../../framework/kit
56
+ clone_repo "botbotgo/kit-builtin" ../../framework/kit-builtin
57
+
39
58
  - name: Rewrite file deps to npm/git refs for CI
40
59
  env:
41
60
  AGENT_SKILL_READ_TOKEN: ${{ secrets.AGENT_SKILL_READ_TOKEN }}
@@ -47,7 +66,6 @@ jobs:
47
66
  NPM_CONFIG_REGISTRY: "https://registry.npmjs.org/"
48
67
  run: |
49
68
  rm -rf node_modules
50
- rm -f package-lock.json
51
69
  unset NPM_CONFIG_USERCONFIG NODE_AUTH_TOKEN
52
70
  for i in 1 2 3; do
53
71
  if npm install --legacy-peer-deps --ignore-scripts; then exit 0; fi
@@ -7,7 +7,7 @@ on:
7
7
  workflow_dispatch:
8
8
  repository_dispatch:
9
9
  types:
10
- - easynet-package-updated
10
+ - botbotgo-package-updated
11
11
 
12
12
  concurrency:
13
13
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -39,9 +39,31 @@ jobs:
39
39
  run: |
40
40
  touch .npmrc
41
41
  grep -q '^registry=https://registry.npmjs.org' .npmrc || echo "registry=https://registry.npmjs.org/" >> .npmrc
42
- grep -q '@easynet:registry=' .npmrc || echo "@easynet:registry=https://registry.npmjs.org/" >> .npmrc
42
+ grep -q '@botbotgo:registry=' .npmrc || echo "@botbotgo:registry=https://registry.npmjs.org/" >> .npmrc
43
43
  grep -q '@wallee:registry=' .npmrc || echo "@wallee:registry=https://registry.npmjs.org/" >> .npmrc
44
44
 
45
+ - name: Checkout workspace deps
46
+ env:
47
+ WORKSPACE_READ_TOKEN: ${{ secrets.AGENT_SKILL_READ_TOKEN || secrets.DOWNSTREAM_TRIGGER_TOKEN || secrets.GITHUB_TOKEN }}
48
+ run: |
49
+ set -euo pipefail
50
+ clone_repo() {
51
+ local repo="$1"
52
+ local dest="$2"
53
+ if git clone --depth 1 --branch master "https://x-access-token:${WORKSPACE_READ_TOKEN}@github.com/${repo}.git" "${dest}"; then
54
+ return 0
55
+ fi
56
+ git clone --depth 1 --branch main "https://x-access-token:${WORKSPACE_READ_TOKEN}@github.com/${repo}.git" "${dest}"
57
+ }
58
+ mkdir -p ../../framework
59
+ rm -rf ../../framework/common ../../framework/memory ../../framework/model ../../framework/runtime ../../framework/kit ../../framework/kit-builtin
60
+ clone_repo "botbotgo/common" ../../framework/common
61
+ clone_repo "botbotgo/memory" ../../framework/memory
62
+ clone_repo "botbotgo/model" ../../framework/model
63
+ clone_repo "botbotgo/runtime" ../../framework/runtime
64
+ clone_repo "botbotgo/kit" ../../framework/kit
65
+ clone_repo "botbotgo/kit-builtin" ../../framework/kit-builtin
66
+
45
67
  - name: Rewrite file deps to npm/git refs for CI
46
68
  env:
47
69
  AGENT_SKILL_READ_TOKEN: ${{ secrets.AGENT_SKILL_READ_TOKEN }}
@@ -53,7 +75,6 @@ jobs:
53
75
  NPM_CONFIG_REGISTRY: "https://registry.npmjs.org/"
54
76
  run: |
55
77
  rm -rf node_modules
56
- rm -f package-lock.json
57
78
  unset NPM_CONFIG_USERCONFIG NODE_AUTH_TOKEN
58
79
  for i in 1 2 3; do
59
80
  if npm install --legacy-peer-deps --ignore-scripts; then exit 0; fi
package/README.md CHANGED
@@ -1,90 +1,42 @@
1
1
  # iTermBot
2
2
 
3
- iTermBot is an application built on the **@easynet** agent framework. It runs two agents:
3
+ ## Introduction
4
4
 
5
- 1. **ReAct agent** LangChain `createAgent` (ReAct pattern) with tools and memory.
6
- 2. **Deep agent** — DeepAgents `createDeepAgent` with a persistent store backed by agent-memory.
5
+ `apps/itermbot` is the application repo in this workspace. It runs an iTerm-focused agent on top of the BotBotGo runtime, model, memory, and tool packages.
7
6
 
8
- Both agents share:
7
+ ## Exposed Interfaces
9
8
 
10
- - **@easynet/agent-common** YAML config (app, paths).
11
- - **@easynet/agent-model** — LLM and embedding models (falls back to module default config).
12
- - **@easynet/agent-memory** — Agent memory (recall/inject for ReAct; store adapter for Deep).
13
- - **@easynet/agent-tool** + **@easynet/agent-tool-buildin** — Tools (FS, HTTP, util, exec, git, analyze, iTerm, etc.).
9
+ This repo is an app, not a reusable library. Its public interface is the executable entry:
14
10
 
15
- ## Prerequisites
11
+ | Interface | Type | Purpose |
12
+ | --- | --- | --- |
13
+ | `itermbot` | CLI | Start the app from `dist/index.js`. |
16
14
 
17
- - Node.js >= 18
18
- - Ollama (or another OpenAI-compatible endpoint) for the LLM. Default config uses `http://localhost:11434/v1` and `qwen3:0.6b`.
15
+ ## Configuration
19
16
 
20
- ## Setup
17
+ Main config files:
21
18
 
22
- Build from source workspace:
19
+ - `config/app.yaml`
20
+ - `config/runtime.yaml`
21
+ - `config/model.yaml`
22
+ - `config/tool.yaml`
23
+ - `config/memory.yaml`
24
+
25
+ `config/app.yaml` holds app-level behavior such as prompt templates and local startup settings. The model, memory, tool, and runtime files are delegated to the corresponding framework repos.
26
+
27
+ ## Usage
23
28
 
24
29
  ```bash
25
30
  cd apps/itermbot
26
31
  npm install
27
32
  npm run build
33
+ npm start
28
34
  ```
29
35
 
30
- Tool support uses agent-tool’s `@easynet/agent-tool` and `@easynet/agent-tool-buildin` from the npm registry.
31
-
32
- ## Config
33
-
34
- | File | Purpose |
35
- |------|--------|
36
- | `config/app.yaml` | App-level settings (`agent`, `printSteps`, prompt templates). |
37
-
38
- Agent profile defaults (model/memory/tool/skills) are resolved by `@easynet/agent-runtime`.
39
- Top-level app config only overrides runtime defaults.
40
-
41
- `apps/itermbot/config/tool.yaml` now loads the full built-in tool package and applies local policy overrides for higher-risk tools such as `itermRunCommandInSession`.
42
- This gives iTermBot direct access to local repository analysis and review primitives including `fs.*`, `git.*`, `analyze.*`, `http.*`, and iTerm tools.
43
-
44
- `apps/itermbot/skills/source-code-review` adds a dedicated workflow for:
45
-
46
- - source code analysis
47
- - repository understanding
48
- - PR / diff review
49
- - bug and regression finding
50
-
51
- ## Usage
52
-
53
- - **Interactive (ReAct agent):**
54
- ```bash
55
- npm start
56
- # or
57
- npm run react
58
- ```
59
-
60
- - **Interactive (Deep agent):**
61
- ```bash
62
- npm run deep
63
- ```
64
-
65
- - **One-shot query:**
66
- ```bash
67
- node dist/index.js react "What time is it?"
68
- node dist/index.js deep "Remember I prefer short answers."
69
- ```
70
-
71
- ## Scripts
36
+ Other entry modes:
72
37
 
73
- | Script | Description |
74
- |--------|-------------|
75
- | `npm run build` | Compile TypeScript to `dist/`. |
76
- | `npm start` | Run interactive with ReAct agent. |
77
- | `npm run react` | Same as start (ReAct). |
78
- | `npm run deep` | Interactive with Deep agent. |
79
- | `npm run typecheck` | Type-check only. |
80
- | `npm run test:llm` | Test LLM config (scripts/test-llm.mjs). |
81
-
82
- ## Architecture
83
-
84
- - **src/index.ts** — CLI startup and orchestration.
85
- - **src/context.ts** — Shared `BotContext` builders (LLM/memory/tools/skills).
86
- - **src/config.ts** — App-level override adapter on top of runtime config.
87
- - **src/startup/** — startup UI, diagnostics, and panel color bootstrapping.
88
- - **src/iterm/** — iTerm session routing and target session prompt injection.
89
-
90
- Both agents use the same LLM, memory backend, and tool set; only the orchestration (ReAct vs Deep) differs.
38
+ ```bash
39
+ npm run react
40
+ npm run deep
41
+ npm run test:llm
42
+ ```
@@ -70,8 +70,8 @@
70
70
  *** Begin Patch
71
71
  *** Update File: src/startup/diagnostics.ts
72
72
  @@
73
- -import { loadYamlFile, AgentContextTokens } from "@easynet/agent-common";
74
- +import { AgentContextTokens } from "@easynet/agent-common";
73
+ -import { loadYamlFile, AgentContextTokens } from "@botbotgo/common";
74
+ +import { AgentContextTokens } from "@botbotgo/common";
75
75
  @@
76
76
  type AgentRuntimeLike = {
77
77
  context: {
package/config/app.yaml CHANGED
@@ -1,4 +1,4 @@
1
- apiVersion: easynet.world/v1
1
+ apiVersion: botbotgo.world/v1
2
2
  kind: AppConfig
3
3
  metadata:
4
4
  name: itermbot
@@ -6,8 +6,6 @@ spec:
6
6
  agent: deep
7
7
 
8
8
  printSteps: true
9
- maxSteps: 100
10
- invokeTimeoutMs: 240000
11
9
  responseSafetyMode: balanced
12
10
 
13
11
  promptTemplates:
@@ -1,4 +1,4 @@
1
- apiVersion: easynet.world/v1
1
+ apiVersion: botbotgo.world/v1
2
2
  kind: MemoryConfig
3
3
  metadata:
4
4
  name: itermbot-memory
@@ -37,4 +37,3 @@ spec:
37
37
  - api_key
38
38
  - secret
39
39
  - token
40
-
package/config/model.yaml CHANGED
@@ -1,17 +1,17 @@
1
- apiVersion: easynet.world/v1
1
+ apiVersion: botbotgo.world/v1
2
2
  kind: ModelConfig
3
3
  metadata:
4
4
  name: itermbot-models
5
5
  spec:
6
6
  llm:
7
- default: lfm2
7
+ default: small
8
8
  small:
9
9
  provider: openai
10
10
  base_url: http://localhost:11434/v1
11
11
  model: qwen3:0.6b
12
12
  lfm2:
13
13
  provider: openai
14
- base_url: https://ollama-rtx-4070.easynet.world/v1
14
+ base_url: https://ollama-rtx-4070.botbotgo.world/v1
15
15
  model: lfm2:latest
16
16
 
17
17
  embed:
@@ -30,4 +30,3 @@ spec:
30
30
  base_url: http://localhost:11434/v1
31
31
  model: glm-ocr:q8_0
32
32
  apiKey: not-needed
33
-
@@ -0,0 +1,7 @@
1
+ apiVersion: botbotgo.world/v1
2
+ kind: AgentConfig
3
+ metadata:
4
+ name: itermbot-runtime
5
+ spec:
6
+ maxSteps: 100
7
+ invokeTimeoutMs: 240000
package/config/skill.yaml CHANGED
@@ -1,4 +1,4 @@
1
- apiVersion: easynet.world/v1
1
+ apiVersion: botbotgo.world/v1
2
2
  kind: SkillConfig
3
3
  metadata:
4
4
  name: itermbot-skills
package/config/tool.yaml CHANGED
@@ -1,10 +1,10 @@
1
- apiVersion: easynet.world/v1
1
+ apiVersion: botbotgo.world/v1
2
2
  kind: ToolConfig
3
3
  metadata:
4
4
  name: itermbot-local-tool-config
5
5
  spec:
6
6
  tools:
7
- file:../../../agent-tool-buildin:
7
+ file:../../../framework/kit-builtin:
8
8
  itermRunCommandInSession:
9
9
  allowedCommandPrefixes:
10
10
  - cat
@@ -1,4 +1,4 @@
1
- import { AgentContextTokens, normalizeToolList, shortToolName } from "@easynet/agent-common";
1
+ import { AgentContextTokens, normalizeToolList, shortToolName } from "@botbotgo/common";
2
2
  function isToolLike(tool) {
3
3
  return Boolean(tool
4
4
  && typeof tool === "object"
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-commands.js","sourceRoot":"","sources":["../../src/chat/builtin-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAsB7F,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO,OAAO,CACZ,IAAI;WACD,OAAO,IAAI,KAAK,QAAQ;WACxB,OAAQ,IAA2B,CAAC,IAAI,KAAK,QAAQ,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAI,OAAoB,EAAE,KAAc;IACtD,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAI,KAAK,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAoB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAU,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,iBAAiB,CAAW,GAAG,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,0BAA0B,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,oBAAoB,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;YAC9E,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,OAAoB;IACxC,MAAM,QAAQ,GAAG,OAAO,CAA2B,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,2BAA2B,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;YACrF,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,OAAoB;IAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnE,IAAI,UAAU,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"builtin-commands.js","sourceRoot":"","sources":["../../src/chat/builtin-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAsBxF,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO,OAAO,CACZ,IAAI;WACD,OAAO,IAAI,KAAK,QAAQ;WACxB,OAAQ,IAA2B,CAAC,IAAI,KAAK,QAAQ,CACzD,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAI,OAAoB,EAAE,KAAc;IACtD,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAI,KAAK,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAoB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAU,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,iBAAiB,CAAW,GAAG,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,0BAA0B,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,oBAAoB,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;YAC9E,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,OAAoB;IACxC,MAAM,QAAQ,GAAG,OAAO,CAA2B,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,2BAA2B,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,qBAAqB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;YACrF,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,OAAoB;IAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnE,IAAI,UAAU,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,3 +1,3 @@
1
- import { type AgentEventListener } from "@easynet/agent-common";
1
+ import { type AgentEventListener } from "@botbotgo/common";
2
2
  export declare function createChatProgressEventListener(writer?: (line: string) => void): AgentEventListener;
3
3
  //# sourceMappingURL=progress.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/chat/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAgBlG,wBAAgB,+BAA+B,CAC7C,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,GAC3C,kBAAkB,CAOpB"}
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/chat/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAgB7F,wBAAgB,+BAA+B,CAC7C,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,GAC3C,kBAAkB,CAOpB"}
@@ -1,4 +1,4 @@
1
- import { createProgressAgentEventListener } from "@easynet/agent-common";
1
+ import { createProgressAgentEventListener } from "@botbotgo/common";
2
2
  import { renderStepLine } from "./step-display.js";
3
3
  function reasonForAction(action) {
4
4
  if (action.startsWith("run command:")) {
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/chat/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAA2B,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,SAAS,eAAe,CAAC,MAAc;IACrC,IAAI,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACtC,OAAO,2EAA2E,CAAC;IACrF,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,wFAAwF,CAAC;IAClG,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjG,OAAO,kEAAkE,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,SAAiC,OAAO,CAAC,GAAG;IAE5C,OAAO,gCAAgC,CAAC;QACtC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACtD,aAAa,EAAE,UAAU;QACzB,YAAY,EAAE,eAAe;QAC7B,eAAe;KAChB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/chat/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAA2B,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,SAAS,eAAe,CAAC,MAAc;IACrC,IAAI,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACtC,OAAO,2EAA2E,CAAC;IACrF,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,wFAAwF,CAAC;IAClG,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjG,OAAO,kEAAkE,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,SAAiC,OAAO,CAAC,GAAG;IAE5C,OAAO,gCAAgC,CAAC;QACtC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACtD,aAAa,EAAE,UAAU;QACzB,YAAY,EAAE,eAAe;QAC7B,eAAe;KAChB,CAAC,CAAC;AACL,CAAC"}
@@ -1,4 +1,4 @@
1
- import { asRecord } from "@easynet/agent-common";
1
+ import { asRecord } from "@botbotgo/common";
2
2
  export function normalizeToolInvokeResult(raw) {
3
3
  return raw;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../src/chat/tool-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAC7D,IAAI,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../src/chat/tool-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAC7D,IAAI,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/dist/config.d.ts CHANGED
@@ -7,16 +7,27 @@ export type AgentMode = "react" | "deep";
7
7
  export type AppConfig = {
8
8
  agent?: AgentMode;
9
9
  printSteps?: boolean;
10
- maxSteps?: number;
11
- invokeTimeoutMs?: number;
12
10
  promptTemplates?: PromptTemplates;
13
11
  responseSafetyMode?: ResponseSafetyMode;
14
12
  };
13
+ export type RuntimeConfig = {
14
+ maxSteps?: number;
15
+ invokeTimeoutMs?: number;
16
+ };
15
17
  export type SkillRuntimeConfig = {
16
18
  mode?: "prompt" | "subagent";
17
19
  injectMetadata?: boolean;
18
20
  embeddingThreshold?: number;
21
+ workflows?: SkillWorkflowConfig["workflows"];
22
+ };
23
+ export type SkillWorkflowConfig = {
24
+ workflows?: Record<string, {
25
+ executor?: string;
26
+ commands?: string[];
27
+ summaryPrompt?: string;
28
+ }>;
19
29
  };
20
30
  export declare function loadAppConfig(configPath: string): Promise<AppConfig>;
31
+ export declare function loadRuntimeConfig(configPath: string): Promise<RuntimeConfig>;
21
32
  export declare function loadSkillRuntimeConfig(configPath: string): Promise<SkillRuntimeConfig>;
22
33
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAmD1E;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiC5F"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAqC1E;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6BlF;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2D5F"}
package/dist/config.js CHANGED
@@ -1,9 +1,9 @@
1
- import { resolveKindResourceFile, asObject } from "@easynet/agent-common/config";
1
+ import { resolveKindResourceFile, asObject } from "@botbotgo/common/config";
2
2
  export async function loadAppConfig(configPath) {
3
3
  try {
4
4
  const resource = await resolveKindResourceFile(configPath, {
5
5
  baseDir: process.cwd(),
6
- expectedApiVersion: "easynet.world/v1",
6
+ expectedApiVersion: "botbotgo.world/v1",
7
7
  expectedKind: "AppConfig",
8
8
  });
9
9
  const spec = asObject(resource.spec);
@@ -16,6 +16,25 @@ export async function loadAppConfig(configPath) {
16
16
  ? modeRaw
17
17
  : undefined;
18
18
  const printSteps = typeof spec?.printSteps === "boolean" ? spec.printSteps : undefined;
19
+ return {
20
+ agent,
21
+ printSteps,
22
+ promptTemplates: spec?.promptTemplates,
23
+ responseSafetyMode,
24
+ };
25
+ }
26
+ catch {
27
+ return {};
28
+ }
29
+ }
30
+ export async function loadRuntimeConfig(configPath) {
31
+ try {
32
+ const resource = await resolveKindResourceFile(configPath, {
33
+ baseDir: process.cwd(),
34
+ expectedApiVersion: "botbotgo.world/v1",
35
+ expectedKind: "AgentConfig",
36
+ });
37
+ const spec = asObject(resource.spec);
19
38
  const maxSteps = typeof spec?.maxSteps === "number" && Number.isFinite(spec.maxSteps)
20
39
  ? Math.max(1, Math.floor(spec.maxSteps))
21
40
  : undefined;
@@ -23,12 +42,8 @@ export async function loadAppConfig(configPath) {
23
42
  ? Math.max(5000, Math.floor(spec.invokeTimeoutMs))
24
43
  : undefined;
25
44
  return {
26
- agent,
27
- printSteps,
28
- maxSteps,
29
- invokeTimeoutMs,
30
- promptTemplates: spec?.promptTemplates,
31
- responseSafetyMode,
45
+ ...(maxSteps != null ? { maxSteps } : {}),
46
+ ...(invokeTimeoutMs != null ? { invokeTimeoutMs } : {}),
32
47
  };
33
48
  }
34
49
  catch {
@@ -39,7 +54,7 @@ export async function loadSkillRuntimeConfig(configPath) {
39
54
  try {
40
55
  const resource = await resolveKindResourceFile(configPath, {
41
56
  baseDir: process.cwd(),
42
- expectedApiVersion: "easynet.world/v1",
57
+ expectedApiVersion: "botbotgo.world/v1",
43
58
  expectedKind: "SkillConfig",
44
59
  });
45
60
  const spec = asObject(resource.spec);
@@ -51,10 +66,26 @@ export async function loadSkillRuntimeConfig(configPath) {
51
66
  const embeddingThreshold = typeof spec?.embedding_threshold === "number" && Number.isFinite(spec.embedding_threshold)
52
67
  ? spec.embedding_threshold
53
68
  : undefined;
69
+ const workflows = asObject(spec?.workflows);
70
+ const normalizedWorkflows = workflows
71
+ ? Object.fromEntries(Object.entries(workflows).map(([name, workflow]) => {
72
+ const commands = Array.isArray(workflow.commands)
73
+ ? workflow.commands.map((item) => String(item).trim()).filter(Boolean)
74
+ : undefined;
75
+ const summaryPrompt = typeof workflow.summaryPrompt === "string" && workflow.summaryPrompt.trim()
76
+ ? workflow.summaryPrompt.trim()
77
+ : undefined;
78
+ const executor = typeof workflow.executor === "string" && workflow.executor.trim()
79
+ ? workflow.executor.trim()
80
+ : undefined;
81
+ return [name, { executor, commands, summaryPrompt }];
82
+ }))
83
+ : undefined;
54
84
  return {
55
85
  ...(mode ? { mode } : {}),
56
86
  ...(injectMetadata != null ? { injectMetadata } : {}),
57
87
  ...(embeddingThreshold != null ? { embeddingThreshold } : {}),
88
+ ...(normalizedWorkflows ? { workflows: normalizedWorkflows } : {}),
58
89
  };
59
90
  }
60
91
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { applyStartupPanelColors } from "./startup/colors.js";
2
+ import { tryHandleDirectTargetPanelCommand } from "./iterm/direct-command-router.js";
3
+ type AgentRuntime = Parameters<typeof tryHandleDirectTargetPanelCommand>[1];
4
+ export declare function tryHandleDirectCommandWithProgress(input: string, runtime: AgentRuntime, options: {
5
+ startup: Awaited<ReturnType<typeof applyStartupPanelColors>>;
6
+ printSteps: boolean;
7
+ }): Promise<string | null>;
8
+ export {};
9
+ //# sourceMappingURL=direct-command-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-command-progress.d.ts","sourceRoot":"","sources":["../src/direct-command-progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAkC,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AAGrH,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;AAM5E,wBAAsB,kCAAkC,CACtD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE;IACP,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC;IAC7D,UAAU,EAAE,OAAO,CAAC;CACrB,GACA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkExB"}
@@ -0,0 +1,71 @@
1
+ import { renderStepLine } from "./chat/step-display.js";
2
+ import { detectDirectTargetPanelCommand, tryHandleDirectTargetPanelCommand } from "./iterm/direct-command-router.js";
3
+ import { shouldUseDirectCommandFastPath } from "./iterm/direct-command-fast-path.js";
4
+ function formatStepNumber(stepNumber) {
5
+ return String(Math.max(0, stepNumber)).padStart(2, "0");
6
+ }
7
+ export async function tryHandleDirectCommandWithProgress(input, runtime, options) {
8
+ const verbose = process.env.ITB_VERBOSE_DIRECT_ROUTE?.trim() === "1" || options.printSteps;
9
+ const startedAt = Date.now();
10
+ const writeStep = (line) => console.log(renderStepLine(line));
11
+ const directIntent = detectDirectTargetPanelCommand(input);
12
+ const useFastPath = shouldUseDirectCommandFastPath(input);
13
+ if (verbose) {
14
+ writeStep("");
15
+ writeStep("=== Steps: direct command routing ===");
16
+ writeStep(`[${formatStepNumber(1)}] ▶ detect/translate direct command`);
17
+ }
18
+ try {
19
+ if (verbose && directIntent?.command) {
20
+ const reason = directIntent.reason === "raw_shell_command"
21
+ ? "Because your input is an executable shell command, execute it directly in the target panel."
22
+ : "Because you explicitly requested direct terminal execution, execute it directly in the target panel.";
23
+ writeStep(` reason: ${reason}`);
24
+ }
25
+ if (!useFastPath) {
26
+ if (verbose) {
27
+ writeStep(`[${formatStepNumber(1)}] ✓ detect/translate direct command (fallback to agent)`);
28
+ writeStep(" reason: Natural-language requests should go through skill and tool planning before execution.");
29
+ writeStep(" progress 1/1");
30
+ writeStep("=== Steps complete: 1 step(s) ===");
31
+ writeStep("");
32
+ }
33
+ return null;
34
+ }
35
+ const directOutput = await tryHandleDirectTargetPanelCommand(input, runtime, {
36
+ windowId: options.startup.windowId ?? undefined,
37
+ tabIndex: options.startup.tabIndex ?? undefined,
38
+ sessionId: options.startup.targetSessionId ?? undefined,
39
+ });
40
+ if (directOutput === null) {
41
+ if (verbose) {
42
+ writeStep(`[${formatStepNumber(1)}] ✓ detect/translate direct command (fallback to agent)`);
43
+ writeStep(" progress 1/1");
44
+ writeStep("=== Steps complete: 1 step(s) ===");
45
+ writeStep("");
46
+ }
47
+ return null;
48
+ }
49
+ if (verbose) {
50
+ const elapsed = Date.now() - startedAt;
51
+ writeStep(`[${formatStepNumber(1)}] ✓ detect/translate direct command (${elapsed}ms)`);
52
+ writeStep(" progress 1/1");
53
+ writeStep(`=== Steps complete: 1 step(s), ${elapsed}ms ===`);
54
+ writeStep("");
55
+ }
56
+ return directOutput;
57
+ }
58
+ catch (error) {
59
+ if (verbose) {
60
+ const elapsed = Date.now() - startedAt;
61
+ const message = error instanceof Error ? error.message : String(error);
62
+ writeStep(`[${formatStepNumber(1)}] ✖ detect/translate direct command`);
63
+ writeStep(` error: ${message}`);
64
+ writeStep(" progress 1/1");
65
+ writeStep(`=== Steps complete: 1 step(s), ${elapsed}ms ===`);
66
+ writeStep("");
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ //# sourceMappingURL=direct-command-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-command-progress.js","sourceRoot":"","sources":["../src/direct-command-progress.ts"],"names":[],"mappings":"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"}