@pencil-agent/nano-pencil 2.0.0-beta.8 → 2.0.0
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.
- package/README.md +267 -267
- package/dist/build-meta.json +3 -3
- package/dist/core/export-html/AGENT.md +11 -11
- package/dist/core/export-html/template.css +971 -971
- package/dist/core/export-html/template.html +54 -54
- package/dist/core/extensions-host/index.d.ts +1 -1
- package/dist/core/extensions-host/loader.js +1 -1
- package/dist/core/extensions-host/runner.d.ts +1 -0
- package/dist/core/extensions-host/runner.js +2 -2
- package/dist/core/extensions-host/types.d.ts +17 -22
- package/dist/core/lib/ai/src/types.d.ts +12 -2
- package/dist/core/persona/persona-manager.js +5 -2
- package/dist/core/runtime/agent-session.js +3 -3
- package/dist/core/runtime/extension-core-bindings.d.ts +1 -0
- package/dist/core/runtime/extension-core-bindings.js +2 -2
- package/dist/extensions/builtin/AGENT.md +115 -115
- package/dist/extensions/builtin/browser/AGENT.md +17 -17
- package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -12
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -198
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -341
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -311
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -333
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -70
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -578
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -440
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -110
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -325
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -463
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -360
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -390
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -568
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -323
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -349
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -435
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -506
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -363
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -168
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -236
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -295
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -108
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -493
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -580
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -511
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -65
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -184
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -543
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -122
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -461
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -383
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -243
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -473
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -271
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -436
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -1021
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -349
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -109
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -170
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -537
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -120
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -414
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -477
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -478
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -339
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -205
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -472
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -470
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -490
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -478
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -234
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -307
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -421
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -364
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -352
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -124
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -233
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -361
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -36
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -72
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -109
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -137
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -362
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -339
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -435
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -575
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -338
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -52
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -107
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -309
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -88
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -375
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -444
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -306
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -398
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -596
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -356
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -84
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -418
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -433
- package/dist/extensions/builtin/browser/browser.md +73 -73
- package/dist/extensions/builtin/browser/install.md +142 -142
- package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -48
- package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -64
- package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -90
- package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -17
- package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -69
- package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -1
- package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -3
- package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -15
- package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -8
- package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -90
- package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -722
- package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -328
- package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -396
- package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -103
- package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -33
- package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -22
- package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -31
- package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -28
- package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -32
- package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -27
- package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -26
- package/dist/extensions/builtin/goal/README.md +67 -67
- package/dist/extensions/builtin/goal/goal-controller.d.ts +39 -10
- package/dist/extensions/builtin/goal/goal-controller.js +1 -1
- package/dist/extensions/builtin/goal/goal-format.js +1 -1
- package/dist/extensions/builtin/goal/goal-prompts.d.ts +2 -0
- package/dist/extensions/builtin/goal/goal-prompts.js +5 -4
- package/dist/extensions/builtin/goal/goal-store.js +1 -1
- package/dist/extensions/builtin/goal/index.d.ts +1 -1
- package/dist/extensions/builtin/goal/index.js +10 -7
- package/dist/extensions/builtin/grub/README.md +112 -112
- package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -16
- package/dist/extensions/builtin/link-world/index.js +6 -6
- package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -65
- package/dist/extensions/builtin/link-world/link-world-agent.md +82 -82
- package/dist/extensions/builtin/link-world/linkworld.md +313 -313
- package/dist/extensions/builtin/link-world/{network-routing.md → network-routing/network-routing.md} +67 -67
- package/dist/extensions/builtin/loop/README.md +92 -92
- package/dist/extensions/builtin/mcp/figma-design.md +68 -68
- package/dist/extensions/builtin/mcp/mcp-management.md +85 -85
- package/dist/extensions/builtin/plan/index.js +1 -1
- package/dist/extensions/builtin/recap/AGENT.md +15 -15
- package/dist/extensions/builtin/sal/README.md +72 -72
- package/dist/extensions/builtin/security-audit/README.md +289 -289
- package/dist/extensions/builtin/task/task-store.d.ts +4 -0
- package/dist/extensions/builtin/task/task-store.js +1 -1
- package/dist/extensions/builtin/team/AGENT.md +112 -112
- package/dist/extensions/builtin/team/TESTING.md +299 -299
- package/dist/extensions/builtin/token-save/README.md +56 -56
- package/dist/extensions/optional/AGENT.md +10 -10
- package/dist/index.d.ts +5 -30
- package/dist/index.js +1 -1
- package/dist/models.d.ts +7 -0
- package/dist/models.js +1 -0
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/task-status-panel.d.ts +36 -0
- package/dist/modes/interactive/components/task-status-panel.js +1 -0
- package/dist/modes/interactive/controllers/stream-render-controller.d.ts +7 -0
- package/dist/modes/interactive/controllers/stream-render-controller.js +2 -2
- package/dist/modes/interactive/interactive-mode.js +40 -40
- package/dist/modes/interactive/state/interactive-state.d.ts +2 -0
- package/dist/modes/interactive/state/interactive-state.js +1 -1
- package/dist/modes/interactive/theme/dark.json +85 -85
- package/dist/modes/interactive/theme/light.json +84 -84
- package/dist/modes/interactive/theme/theme-schema.json +335 -335
- package/dist/modes/interactive/theme/warm.json +81 -81
- package/dist/node_modules/@pencil-agent/ai/dist/cli.js +0 -0
- package/dist/node_modules/@pencil-agent/ai/dist/models.generated.js +1 -1
- package/dist/node_modules/@pencil-agent/ai/dist/providers/anthropic.js +2 -2
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-completions.js +5 -5
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses.js +1 -1
- package/dist/node_modules/@pencil-agent/ai/dist/stream.js +1 -1
- package/dist/packages/protocol/src/commands.d.ts +33 -0
- package/dist/packages/protocol/src/flags.d.ts +20 -0
- package/dist/packages/protocol/src/hooks.d.ts +17 -0
- package/dist/packages/protocol/src/hooks.js +0 -0
- package/dist/packages/{extension-sdk → protocol}/src/index.d.ts +7 -4
- package/dist/packages/protocol/src/index.js +1 -0
- package/dist/packages/{extension-sdk → protocol}/src/lifecycle.d.ts +15 -27
- package/dist/packages/protocol/src/lifecycle.js +0 -0
- package/dist/packages/{extension-sdk → protocol}/src/tools.d.ts +1 -1
- package/dist/packages/protocol/src/tools.js +0 -0
- package/dist/public-config.d.ts +12 -0
- package/dist/public-config.js +1 -0
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.js +1 -0
- package/dist/session-compaction.d.ts +7 -0
- package/dist/session-compaction.js +1 -0
- package/dist/session.d.ts +7 -0
- package/dist/session.js +1 -0
- package/dist/skills.d.ts +7 -0
- package/dist/skills.js +1 -0
- package/dist/tools.d.ts +7 -0
- package/dist/tools.js +1 -0
- package/docs/ACP/345/215/217/350/256/256/351/233/206/346/210/220/345/274/200/345/217/221/346/226/207/346/241/243.md +851 -0
- package/docs/SDK-TESTING.md +364 -0
- package/docs/codex-goal-command-impl.md +1055 -1055
- package/docs/codex-goal-vs-grub.md +500 -500
- package/docs/custom-provider.md +27 -27
- package/docs/extensions.md +27 -27
- package/docs/keybindings.md +27 -27
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +250 -250
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +122 -122
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -1222
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/256/236/347/216/260/346/212/245/345/221/212.md" +158 -158
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/257/271/346/257/224/345/210/206/346/236/220.md" +128 -128
- package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +320 -320
- package/docs/loop-usage-examples.md +214 -214
- package/docs/mem-core/346/212/200/346/234/257/346/226/207/346/241/243.md +593 -0
- package/docs/models.md +27 -27
- package/docs/packages.md +27 -27
- package/docs/pi-design-philosophy.md +457 -457
- package/docs/planmode.md +1987 -1987
- package/docs/prompt-templates.md +27 -27
- package/docs/providers.md +27 -27
- package/docs/sdk.md +27 -27
- package/docs/skills.md +27 -27
- package/docs/startup-performance-optimization.md +301 -0
- package/docs/themes.md +27 -27
- package/docs/tui.md +27 -27
- package/docs//350/256/244/347/237/245/345/234/260/345/233/276.md +47 -0
- package/package.json +190 -162
- package/dist/packages/extension-sdk/src/index.js +0 -1
- package/docs/cc-agent-design.md +0 -1297
- package/docs/cc-tui-design.md +0 -1333
- package/docs//345/257/271/346/240/207Claude-Code.md +0 -1775
- /package/dist/packages/{extension-sdk/src/lifecycle.js → protocol/src/commands.js} +0 -0
- /package/dist/packages/{extension-sdk/src/tools.js → protocol/src/flags.js} +0 -0
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
# TokenSave
|
|
2
|
-
|
|
3
|
-
TokenSave is a default-on extension that reduces noisy shell output before it enters the agent context.
|
|
4
|
-
|
|
5
|
-
## Behavior
|
|
6
|
-
|
|
7
|
-
- Commands execute with their original shell semantics.
|
|
8
|
-
- TokenSave plans commands before execution and filters output after execution.
|
|
9
|
-
- Small outputs, unsafe redirection, heredocs, and explicitly disabled commands pass through unchanged.
|
|
10
|
-
- Filtered outputs include estimated token savings and a raw recovery file path when available.
|
|
11
|
-
- Both agent-called `bash` tools and user `!` bash commands are covered. `!!` commands stay excluded from context and are not intercepted.
|
|
12
|
-
|
|
13
|
-
## Disable
|
|
14
|
-
|
|
15
|
-
Set either environment variable on a command to bypass filtering:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
TOKEN_SAVE_DISABLED=1 git status
|
|
19
|
-
TOKENSAVE_DISABLED=1 npm test
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Stats
|
|
23
|
-
|
|
24
|
-
Use:
|
|
25
|
-
|
|
26
|
-
```text
|
|
27
|
-
/tokensave
|
|
28
|
-
/tokensave history
|
|
29
|
-
/tokensave plan <command>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Config Filters
|
|
33
|
-
|
|
34
|
-
User filters load from:
|
|
35
|
-
|
|
36
|
-
```text
|
|
37
|
-
~/.pencils/token-save/filters.json
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
Project filters load from:
|
|
41
|
-
|
|
42
|
-
```text
|
|
43
|
-
.nanopencil/token-save/filters.json
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Project filters are ignored unless the project explicitly opts in with:
|
|
47
|
-
|
|
48
|
-
```json
|
|
49
|
-
{ "trusted": true }
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
at:
|
|
53
|
-
|
|
54
|
-
```text
|
|
55
|
-
.nanopencil/token-save/trust.json
|
|
56
|
-
```
|
|
1
|
+
# TokenSave
|
|
2
|
+
|
|
3
|
+
TokenSave is a default-on extension that reduces noisy shell output before it enters the agent context.
|
|
4
|
+
|
|
5
|
+
## Behavior
|
|
6
|
+
|
|
7
|
+
- Commands execute with their original shell semantics.
|
|
8
|
+
- TokenSave plans commands before execution and filters output after execution.
|
|
9
|
+
- Small outputs, unsafe redirection, heredocs, and explicitly disabled commands pass through unchanged.
|
|
10
|
+
- Filtered outputs include estimated token savings and a raw recovery file path when available.
|
|
11
|
+
- Both agent-called `bash` tools and user `!` bash commands are covered. `!!` commands stay excluded from context and are not intercepted.
|
|
12
|
+
|
|
13
|
+
## Disable
|
|
14
|
+
|
|
15
|
+
Set either environment variable on a command to bypass filtering:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
TOKEN_SAVE_DISABLED=1 git status
|
|
19
|
+
TOKENSAVE_DISABLED=1 npm test
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Stats
|
|
23
|
+
|
|
24
|
+
Use:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
/tokensave
|
|
28
|
+
/tokensave history
|
|
29
|
+
/tokensave plan <command>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Config Filters
|
|
33
|
+
|
|
34
|
+
User filters load from:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
~/.pencils/token-save/filters.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Project filters load from:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
.nanopencil/token-save/filters.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Project filters are ignored unless the project explicitly opts in with:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{ "trusted": true }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
at:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
.nanopencil/token-save/trust.json
|
|
56
|
+
```
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# extensions/optional/
|
|
2
|
-
|
|
3
|
-
> P2 | Parent: ../AGENT.md
|
|
4
|
-
|
|
5
|
-
Member List
|
|
6
|
-
export-html/index.ts: HTML export extension, exportSessionToHtml/exportFromFile, /export command
|
|
7
|
-
simplify/index.ts: Simplification extension, /simplify style refactoring tool
|
|
8
|
-
|
|
9
|
-
Rule: Members complete, one item per line, parent links valid, precise terms first
|
|
10
|
-
|
|
1
|
+
# extensions/optional/
|
|
2
|
+
|
|
3
|
+
> P2 | Parent: ../AGENT.md
|
|
4
|
+
|
|
5
|
+
Member List
|
|
6
|
+
export-html/index.ts: HTML export extension, exportSessionToHtml/exportFromFile, /export command
|
|
7
|
+
simplify/index.ts: Simplification extension, /simplify style refactoring tool
|
|
8
|
+
|
|
9
|
+
Rule: Members complete, one item per line, parent links valid, precise terms first
|
|
10
|
+
|
|
11
11
|
[COVENANT]: Update this file header on changes and verify against parent AGENT.md
|
package/dist/index.d.ts
CHANGED
|
@@ -1,34 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* [WHO]:
|
|
3
|
-
* [FROM]: Depends on config, core
|
|
4
|
-
* [TO]: Consumed by external
|
|
5
|
-
* [HERE]: index.ts -
|
|
2
|
+
* [WHO]: Stable root SDK exports for @pencil-agent/nano-pencil
|
|
3
|
+
* [FROM]: Depends on config, core/runtime/sdk, core/runtime/pencil-agent
|
|
4
|
+
* [TO]: Consumed by external SDK embedders via the package root
|
|
5
|
+
* [HERE]: index.ts - intentionally narrow root package entry; advanced APIs live in subpaths
|
|
6
6
|
*/
|
|
7
7
|
export { getAgentDir, VERSION } from "./config.js";
|
|
8
|
-
export { AgentSession, type AgentSessionConfig, type AgentSessionEvent, type AgentSessionEventListener, type ModelCycleResult, type ParsedSkillBlock, type PromptOptions, parseSkillBlock, type SessionStats, } from "./core/runtime/agent-session.js";
|
|
9
|
-
export { type ApiKeyCredential, type AuthCredential, AuthStorage, type AuthStorageBackend, FileAuthStorageBackend, InMemoryAuthStorageBackend, type OAuthCredential, } from "./core/platform/config/auth-storage.js";
|
|
10
|
-
export { type BranchPreparation, type BranchSummaryResult, type CollectEntriesResult, type CompactionResult, type CutPointResult, calculateContextTokens, collectEntriesForBranchSummary, compact, DEFAULT_COMPACTION_SETTINGS, estimateTokens, type FileOperations, findCutPoint, findTurnStartIndex, type GenerateBranchSummaryOptions, generateBranchSummary, generateSummary, getLastAssistantUsage, prepareBranchEntries, serializeConversation, shouldCompact, } from "./core/session/compaction/index.js";
|
|
11
|
-
export { createEventBus, type EventBus, type EventBusController } from "./core/runtime/event-bus.js";
|
|
12
8
|
export { PencilAgent, quickAgent, type PencilAgentOptions, } from "./core/runtime/pencil-agent.js";
|
|
13
|
-
export { type
|
|
14
|
-
export type { AgentEndEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppAction, BashToolCallEvent, BeforeAgentStartEvent, CompactOptions, ContextEvent, ContextUsage, CustomToolCallEvent, EditToolCallEvent, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FindToolCallEvent, GrepToolCallEvent, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, MessageRenderer, MessageRenderOptions, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, RegisteredCommand, RegisteredTool, SessionBeforeCompactEvent, SessionBeforeForkEvent, SessionBeforeSwitchEvent, SessionBeforeTreeEvent, SessionCompactEvent, SessionForkEvent, SessionShutdownEvent, SessionStartEvent, SessionSwitchEvent, SessionTreeEvent, SlashCommandInfo, SlashCommandLocation, SlashCommandSource, TerminalInputHandler, ToolCallEvent, ToolDefinition, ToolInfo, ToolRenderResultOptions, ToolResultEvent, TurnEndEvent, TurnStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WriteToolCallEvent, } from "./core/extensions-host/index.js";
|
|
15
|
-
export { createExtensionRuntime, discoverAndLoadExtensions, ExtensionRunner, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, wrapRegisteredTool, wrapRegisteredTools, wrapToolsWithExtensions, wrapToolWithExtensions, } from "./core/extensions-host/index.js";
|
|
16
|
-
export type { ReadonlyFooterDataProvider } from "./modes/interactive/footer-data-provider.js";
|
|
17
|
-
export { convertToLlm } from "./core/messages.js";
|
|
18
|
-
export { ModelRegistry } from "./core/model-registry.js";
|
|
19
|
-
export type { PackageManager, PathMetadata, ProgressCallback, ProgressEvent, ResolvedPaths, ResolvedResource, } from "./core/package-manager.js";
|
|
20
|
-
export { DefaultPackageManager } from "./core/package-manager.js";
|
|
21
|
-
export type { ResourceCollision, ResourceDiagnostic, ResourceLoader } from "./core/platform/config/resource-loader.js";
|
|
22
|
-
export { DefaultResourceLoader } from "./core/platform/config/resource-loader.js";
|
|
23
|
-
export { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession, createBashTool, createCodingTools, createEditTool, createFindTool, createGrepTool, createLsTool, createReadOnlyTools, createReadTool, createWriteTool, type PromptTemplate, readOnlyTools, } from "./core/runtime/sdk.js";
|
|
24
|
-
export { type BranchSummaryEntry, buildSessionContext, type CompactionEntry, CURRENT_SESSION_VERSION, type CustomEntry, type CustomMessageEntry, type FileEntry, getLatestCompactionEntry, type ModelChangeEntry, migrateSessionEntries, type NewSessionOptions, parseSessionEntries, type SessionContext, type SessionEntry, type SessionEntryBase, type SessionHeader, type SessionInfo, type SessionInfoEntry, SessionManager, type SessionMessageEntry, type ThinkingLevelChangeEntry, } from "./core/session/session-manager.js";
|
|
25
|
-
export { type CompactionSettings, type ImageSettings, type PackageSource, type RetrySettings, SettingsManager, } from "./core/platform/config/settings-manager.js";
|
|
26
|
-
export { formatSkillsForPrompt, type LoadSkillsFromDirOptions, type LoadSkillsResult, loadSkills, loadSkillsFromDir, type Skill, type SkillFrontmatter, } from "./core/skills.js";
|
|
27
|
-
export { type BashOperations, type BashSpawnContext, type BashSpawnHook, type BashToolDetails, type BashToolInput, type BashToolOptions, bashTool, codingTools, DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, type EditOperations, type EditToolDetails, type EditToolInput, type EditToolOptions, editTool, type FindOperations, type FindToolDetails, type FindToolInput, type FindToolOptions, findTool, formatSize, type GrepOperations, type GrepToolDetails, type GrepToolInput, type GrepToolOptions, grepTool, type LsOperations, type LsToolDetails, type LsToolInput, type LsToolOptions, lsTool, type ReadOperations, type ReadToolDetails, type ReadToolInput, type ReadToolOptions, readTool, type ToolsOptions, type TruncationOptions, type TruncationResult, truncateHead, truncateLine, truncateTail, type WriteOperations, type WriteToolInput, type WriteToolOptions, writeTool, } from "./core/tools/index.js";
|
|
28
|
-
export { main } from "./main.js";
|
|
29
|
-
export { InteractiveMode, type InteractiveModeOptions, type PrintModeOptions, runPrintMode, runRpcMode, } from "./modes/index.js";
|
|
30
|
-
export { ArminComponent, AssistantMessageComponent, appKey, appKeyHint, BashExecutionComponent, BorderedLoader, BranchSummaryMessageComponent, CompactionSummaryMessageComponent, CustomEditor, CustomMessageComponent, DynamicBorder, ExtensionEditorComponent, ExtensionInputComponent, ExtensionSelectorComponent, editorKey, FooterComponent, keyHint, LoginDialogComponent, ModelSelectorComponent, OAuthSelectorComponent, type RenderDiffOptions, rawKeyHint, renderDiff, SessionSelectorComponent, type SettingsCallbacks, type SettingsConfig, SettingsSelectorComponent, ShowImagesSelectorComponent, SkillInvocationMessageComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, type ToolExecutionOptions, TreeSelectorComponent, truncateToVisualLines, UserMessageComponent, UserMessageSelectorComponent, type VisualTruncateResult, } from "./modes/interactive/components/index.js";
|
|
31
|
-
export { getLanguageFromPath, getMarkdownTheme, getSelectListTheme, getSettingsListTheme, highlightCode, initTheme, type Theme, type ThemeColor, } from "./modes/interactive/theme/theme.js";
|
|
32
|
-
export { copyToClipboard } from "./modes/utils/clipboard.js";
|
|
33
|
-
export { parseFrontmatter, stripFrontmatter } from "./utils/frontmatter.js";
|
|
34
|
-
export { getShellConfig } from "./core/platform/utils/shell.js";
|
|
9
|
+
export { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession, createBashTool, createCodingTools, createEditTool, createFindTool, createGrepTool, createLsTool, createReadOnlyTools, createReadTool, createWriteTool, defaultLogger, type PromptTemplate, readOnlyTools, type SDKLogger, silentLogger, } from "./core/runtime/sdk.js";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getAgentDir as
|
|
1
|
+
import{getAgentDir as r,VERSION as t}from"./config.js";import{PencilAgent as l,quickAgent as c}from"./core/runtime/pencil-agent.js";import{createAgentSession as g,createBashTool as T,createCodingTools as i,createEditTool as s,createFindTool as d,createGrepTool as f,createLsTool as p,createReadOnlyTools as A,createReadTool as m,createWriteTool as x,defaultLogger as L,readOnlyTools as O,silentLogger as R}from"./core/runtime/sdk.js";export{l as PencilAgent,t as VERSION,g as createAgentSession,T as createBashTool,i as createCodingTools,s as createEditTool,d as createFindTool,f as createGrepTool,p as createLsTool,A as createReadOnlyTools,m as createReadTool,x as createWriteTool,L as defaultLogger,r as getAgentDir,c as quickAgent,O as readOnlyTools,R as silentLogger};
|
package/dist/models.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: Public models subpath exports for model registry APIs
|
|
3
|
+
* [FROM]: Re-exports core/model-registry.js
|
|
4
|
+
* [TO]: Consumed by advanced SDK users importing @pencil-agent/nano-pencil/models
|
|
5
|
+
* [HERE]: models.ts - package subpath entry for model APIs
|
|
6
|
+
*/
|
|
7
|
+
export { ModelRegistry } from "./core/model-registry.js";
|
package/dist/models.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ModelRegistry as r}from"./core/model-registry.js";export{r as ModelRegistry};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var K=Object.defineProperty;var u=(s,e)=>K(s,"name",{value:e,configurable:!0});import{theme as o}from"../theme/theme.js";function Q(s){return s.replace(/[\r\n\t]/g," ").replace(/ +/g," ").trim()}u(Q,"sanitizeStatusText");function $(s){return s<1e3?s.toString():s<1e4?`${(s/1e3).toFixed(1)}k`:s<1e6?`${Math.round(s/1e3)}k`:s<1e7?`${(s/1e6).toFixed(1)}M`:`${Math.round(s/1e6)}M`}u($,"formatTokens");function X(s,e=12){const a=Math.max(0,Math.floor(e)),c=Number.isFinite(s)?s:0,p=Math.min(100,Math.max(0,c)),M=Math.min(a,Math.max(0,Math.round(p/100*a))),P=Math.max(0,a-M),x=c>90?"error":c>70?"warning":"success";return o.fg("dim","[")+o.fg(x,"\u2588".repeat(M))+o.fg("dim","\u2591".repeat(P))+o.fg("dim","]")}u(X,"renderContextProgressBar");class _{static{u(this,"FooterComponent")}session;footerData;autoCompactEnabled=!0;showTokenStats=!0;constructor(e,a,c=!0){this.session=e,this.footerData=a,this.showTokenStats=c}setAutoCompactEnabled(e){this.autoCompactEnabled=e}setShowTokenStats(e){this.showTokenStats=e}invalidate(){}dispose(){}render(e){const a=this.session.state;let c=0,p=0,M=0,P=0,x=0;for(const t of this.session.sessionManager.getBranch())t.type==="message"&&t.message.role==="assistant"&&(c+=t.message.usage.input,p+=t.message.usage.output,M+=t.message.usage.cacheRead,P+=t.message.usage.cacheWrite,x+=t.message.usage.cost.total);const S=this.session.getContextUsage(),T=S?.contextWindow??a.model?.contextWindow??0,k=S?.percent??0,v=S?.percent!==null?k.toFixed(1):"?";let n=this.session.cwd;const E=process.env.HOME||process.env.USERPROFILE;E&&n.startsWith(E)&&(n=`~${n.slice(E.length)}`);const y=this.footerData.getGitBranch();y&&(n=`${n} (${y})`);const D=this.session.sessionManager.getSessionName();D&&(n=`${n} \u2022 ${D}`);const f=[];if(this.showTokenStats){c&&f.push(`\u2191${$(c)}`),p&&f.push(`\u2193${$(p)}`);const t=a.model?this.session.modelRegistry.isUsingOAuth(a.model):!1;if(x||t){const l=`$${x.toFixed(3)}${t?" (sub)":""}`;f.push(l)}}const A=this.autoCompactEnabled?" (auto)":"",B=S?.tokens??null;let F="";e>80&&k>0&&v!=="?"&&(F=`${X(k)} `);const R=v==="?"||B===null?`${F}?/${$(T)}${A}`:`${F}${v}% ${$(B??0)}/${$(T)}${A}`;k>90?f.push(o.fg("error",R)):f.push(R);const d=f.join(" "),N=a.model?.id||"no-model";let m=N;if(a.model?.reasoning){const t=a.thinkingLevel||"off";m=t==="off"?`${N} \u2022 thinking off`:`${N} \u2022 ${t}`}this.footerData.getAvailableProviderCount()>1&&a.model&&(m=`(${a.model.provider}) ${m}`);let h="";const O=this.footerData.getExtensionStatuses();O.size>0&&(h=Array.from(O.entries()).sort(([l],[J])=>l.localeCompare(J)).map(([,l])=>Q(l)).join(" "));const r=o.fg("dim"," \xB7 "),i=3,U=u(t=>t.replace(/\x1b\[[0-9;]*m/g,""),"stripAnsi"),C=n.length,g=U(d).length,W=U(m).length,w=h.length,I=h?r+h:"",L=C+i+g+i+W+(h?i+w:0);if(L<=e){const t=" ".repeat(Math.max(0,e-L));return[o.fg("dim",n)+r+d+r+o.fg("dim",m)+I+t]}const j=C+i+g+i+W;if(j<=e){const t=" ".repeat(Math.max(0,e-j));return[o.fg("dim",n)+r+d+r+o.fg("dim",m)+t]}const z=C+i+g+(h?i+w:0);if(z<=e){const t=" ".repeat(Math.max(0,e-z));return[o.fg("dim",n)+r+d+I+t]}const G=C+i+g;if(G<=e){const t=" ".repeat(Math.max(0,e-G));return[o.fg("dim",n)+r+d+t]}const H=Math.max(10,e-i-g-i-Math.min(W,10)),b=n.length>H?n.slice(0,H-1)+"\u2026":n,V=e-b.length-i-g;if(V>i+3){const t=" ".repeat(Math.max(0,V-i-W));return[o.fg("dim",b)+r+d+r+o.fg("dim",m)+t]}const q=" ".repeat(Math.max(0,e-b.length-i-g));return[o.fg("dim",b)+r+d+q]}}export{_ as FooterComponent,X as renderContextProgressBar};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [WHO]: TaskStatusPanelComponent - renders persistent task status with checkboxes
|
|
3
|
+
* [FROM]: Depends on @pencil-agent/tui, extensions/builtin/task/task-store
|
|
4
|
+
* [TO]: Consumed by StreamRenderController
|
|
5
|
+
* [HERE]: modes/interactive/components/task-status-panel.ts - CC-style task status TUI panel
|
|
6
|
+
*/
|
|
7
|
+
import { Container, type TUI } from "@pencil-agent/tui";
|
|
8
|
+
import type { Theme } from "../theme/theme.js";
|
|
9
|
+
export interface TaskStatusEntry {
|
|
10
|
+
id: string;
|
|
11
|
+
subject: string;
|
|
12
|
+
status: "pending" | "in_progress" | "completed";
|
|
13
|
+
activeForm?: string;
|
|
14
|
+
blockedBy?: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare class TaskStatusPanelComponent extends Container {
|
|
17
|
+
private tui;
|
|
18
|
+
private theme;
|
|
19
|
+
private spinnerFrame;
|
|
20
|
+
private headerText;
|
|
21
|
+
private taskLines;
|
|
22
|
+
private overflowLine;
|
|
23
|
+
private lastTasks;
|
|
24
|
+
constructor(tui: TUI, theme: Theme);
|
|
25
|
+
/** Rebuild the panel from current task list. */
|
|
26
|
+
update(tasks: TaskStatusEntry[]): void;
|
|
27
|
+
/**
|
|
28
|
+
* Prioritize tasks for display:
|
|
29
|
+
* 1. in_progress (most important — user needs to see what's happening)
|
|
30
|
+
* 2. pending (what's next)
|
|
31
|
+
* 3. completed (least important, show most recent first)
|
|
32
|
+
*/
|
|
33
|
+
private prioritizeTasks;
|
|
34
|
+
/** Get the last known tasks. */
|
|
35
|
+
getLastTasks(): TaskStatusEntry[];
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var y=Object.defineProperty;var c=(T,t)=>y(T,"name",{value:t,configurable:!0});import{Container as I,Spacer as F,Text as g,truncateToWidth as j}from"@pencil-agent/tui";const L=["\u28FE","\u28FD","\u28FB","\u28BF","\u287F","\u28DF","\u28EF","\u28F7"],B=10,M=3;class V extends I{static{c(this,"TaskStatusPanelComponent")}tui;theme;spinnerFrame=0;headerText;taskLines=[];overflowLine;lastTasks=[];constructor(t,i){super(),this.tui=t,this.theme=i,this.headerText=new g("",0,0),this.addChild(new F(1)),this.addChild(this.headerText)}update(t){this.lastTasks=t;for(const e of this.taskLines)super.removeChild(e);if(this.taskLines=[],this.overflowLine&&(super.removeChild(this.overflowLine),this.overflowLine=void 0),t.length===0){this.headerText.setText("");return}const i=t.filter(e=>e.status==="completed").length,l=t.filter(e=>e.status==="in_progress").length,a=t.length-i-l,m=l>0,n=i===t.length;m&&(this.spinnerFrame=(this.spinnerFrame+1)%L.length);const b=m?this.theme.fg("accent",L[this.spinnerFrame]):n?this.theme.fg("success","\u2714"):this.theme.fg("dim","\u25FC"),p=[];i>0&&p.push(`${i} done`),l>0&&p.push(`${l} in progress`),a>0&&p.push(`${a} open`);const w=p.join(", ");this.headerText.setText(` ${b} ${this.theme.bold("Tasks")} ${this.theme.fg("dim",`(${w})`)}`);const v=this.tui.terminal?.rows??24,f=Math.min(B,Math.max(M,v-14)),S=this.prioritizeTasks(t,f).slice(0,f),x=t.length-f,_=this.tui.terminal?.columns??80,C=Math.max(_-10,20);for(const e of S){let o,h;e.status==="completed"?(o=this.theme.fg("success","\u2714"),h=c(r=>this.theme.fg("dim",r),"subjectStyle")):e.status==="in_progress"?(o=this.theme.fg("accent","\u25FC"),h=c(r=>this.theme.bold(r),"subjectStyle")):(o=this.theme.fg("dim","\u25FB"),h=c(r=>this.theme.fg("dim",r),"subjectStyle"));const u=e.status==="in_progress"&&e.activeForm?e.activeForm:e.subject,d=j(u,C,"\u2026");let s=` ${o} ${h(d)}`;if(e.blockedBy&&e.blockedBy.length>0&&e.status!=="completed"){const r=e.blockedBy.map(k=>`#${k}`).join(", ");s+=this.theme.fg("dim",` \u23BF blocked by ${r}`)}const $=new g(s,0,0);this.taskLines.push($),this.addChild($)}if(x>0){const e=t.slice(f),o=e.filter(s=>s.status==="in_progress").length,h=e.filter(s=>s.status==="pending").length,u=e.filter(s=>s.status==="completed").length,d=[];o>0&&d.push(`${o} in progress`),h>0&&d.push(`${h} pending`),u>0&&d.push(`${u} completed`),this.overflowLine=new g(this.theme.fg("dim",` \u2026 +${x} ${d.join(", ")}`),0,0),this.addChild(this.overflowLine)}}prioritizeTasks(t,i){const l=t.filter(n=>n.status==="in_progress"),a=t.filter(n=>n.status==="pending"),m=t.filter(n=>n.status==="completed");return[...l,...a,...m]}getLastTasks(){return this.lastTasks}}export{V as TaskStatusPanelComponent};
|
|
@@ -69,6 +69,7 @@ export interface StreamRenderRuntimePort {
|
|
|
69
69
|
}): void;
|
|
70
70
|
checkShutdownRequested(): Promise<void>;
|
|
71
71
|
clearAttachments(): void;
|
|
72
|
+
getAgentDir(): string;
|
|
72
73
|
}
|
|
73
74
|
/** The single controlled channel onto defaultEditor.onEscape, shared with InterruptController. */
|
|
74
75
|
export interface StreamRenderEscapePort {
|
|
@@ -98,6 +99,12 @@ export declare class StreamRenderController {
|
|
|
98
99
|
private autoCompactionEscapeHandler;
|
|
99
100
|
private retryLoader;
|
|
100
101
|
private retryEscapeHandler;
|
|
102
|
+
private taskUpdateUnsubscribe;
|
|
103
|
+
private taskAutoHideTimer;
|
|
101
104
|
constructor(ctx: StreamRenderContext);
|
|
102
105
|
handle(event: AgentSessionEvent): Promise<void>;
|
|
106
|
+
/** Task tool names that should trigger a panel refresh. */
|
|
107
|
+
private static readonly TASK_TOOL_NAMES;
|
|
108
|
+
/** Refresh the task status panel from disk. */
|
|
109
|
+
private refreshTaskPanel;
|
|
103
110
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
`)}l(p,"dbg");class L{static{l(this,"StreamRenderController")}ctx;autoCompactionLoader=void 0;autoCompactionEscapeHandler=void 0;retryLoader=void 0;retryEscapeHandler=void 0;constructor(t){this.ctx=t}async handle(t){p(`handle event: ${t.type}`),await this.ctx.surface.ensureInitialized(),this.ctx.layout.invalidateFooter();const e=this.ctx.state.get(),o=this.ctx.layout.getUi(),a=this.ctx.layout.getChatContainer(),i=this.ctx.layout.getStatusContainer();switch(t.type){case"agent_start":this.retryEscapeHandler&&(this.ctx.escape.setHandler(this.retryEscapeHandler),this.retryEscapeHandler=void 0),this.retryLoader&&(this.retryLoader.stop(),this.retryLoader=void 0),e.loadingAnimation&&e.loadingAnimation.stop(),i.clear(),e.loadingAnimation=new c(o,d,this.ctx.loaders.getDefaultWorkingMessage(),this.ctx.loaders.getSessionId()),i.addChild(e.loadingAnimation),this.ctx.loaders.setBuddyPetState("working","Working..."),e.pendingWorkingMessage!==void 0&&(e.workingMessageOverride=e.pendingWorkingMessage||void 0,e.pendingWorkingMessage=void 0),this.ctx.loaders.startAgentRunTimer(),this.ctx.loaders.updateWorkingMessage({resetStallTimer:!1}),this.ctx.loaders.isInPlanMode()&&(e.planProgress=R(),e.planProgressPanel=new b(o,d),i.addChild(e.planProgressPanel),e.planProgressPanel.update(e.planProgress)),this.ctx.surface.restoreEditorFocusIfPossible(),this.ctx.layout.requestRender();break;case"message_start":if(t.message.role==="custom")this.ctx.layout.addMessageToChat(t.message),this.ctx.layout.requestRender();else if(t.message.role==="user"){const s=this.ctx.surface.getUserMessageText(t.message);if(e.optimisticUserMessages.length>0&&e.optimisticUserMessages[0]?.text===s){e.optimisticUserMessages.shift(),this.ctx.layout.updatePendingMessagesDisplay(),this.ctx.layout.requestRender();break}this.ctx.layout.addMessageToChat(t.message),this.ctx.layout.updatePendingMessagesDisplay(),this.ctx.layout.requestRender()}else t.message.role==="assistant"&&(e.streamingComponent=new C(void 0,e.hideThinkingBlock,this.ctx.surface.getMarkdownThemeWithSettings()),e.streamingMessage=t.message,a.addChild(e.streamingComponent),e.streamingComponent.updateContent(e.streamingMessage),this.ctx.layout.requestRender());break;case"message_update":if(e.streamingComponent&&t.message.role==="assistant"){e.loadingAnimation&&e.loadingAnimation.resetStallTimer(),e.streamingMessage=t.message,e.streamingComponent.updateContent(e.streamingMessage),a.markDirty(e.streamingComponent);for(const s of e.streamingMessage.content)if(s.type==="toolCall"){if(!this.ctx.toolTrace.shouldRenderToolTrace(s.name))continue;if(e.pendingTools.has(s.id)){const n=e.pendingTools.get(s.id);n&&(n.updateArgs(s.arguments),a.markDirty(n))}else{a.addChild(new u("",0,0));const n=new g(s.name,s.arguments,{showImages:this.ctx.toolTrace.getShowImages()},this.ctx.toolTrace.getRegisteredToolDefinition(s.name),o);n.setExpanded(e.toolOutputExpanded),a.addChild(n),e.pendingTools.set(s.id,n)}}this.ctx.layout.requestRender()}break;case"message_end":if(t.message.role==="user")break;if(e.streamingComponent&&t.message.role==="assistant"){e.streamingMessage=t.message;let s;if(e.streamingMessage.stopReason==="aborted"){const n=this.ctx.runtime.getRetryAttempt();s=n>0?`Aborted after ${n} retry attempt${n>1?"s":""}`:"Operation aborted",e.streamingMessage.errorMessage=s}if(e.streamingComponent.updateContent(e.streamingMessage),a.markDirty(e.streamingComponent),e.streamingMessage.stopReason==="aborted"||e.streamingMessage.stopReason==="error"){s||(s=e.streamingMessage.errorMessage||"Error");for(const[,n]of e.pendingTools.entries())n.updateResult({content:[{type:"text",text:s}],isError:!0}),a.markDirty(n);e.pendingTools.clear()}else for(const[,n]of e.pendingTools.entries())n.setArgsComplete(),a.markDirty(n);e.streamingComponent=void 0,e.streamingMessage=void 0,this.ctx.layout.invalidateFooter()}this.ctx.layout.requestRender();break;case"tool_execution_start":{if(e.planProgress&&e.planProgressPanel&&(M(e.planProgress,t.toolName,t.args),e.planProgressPanel.update(e.planProgress),this.ctx.layout.requestRender()),!this.ctx.toolTrace.shouldRenderToolTrace(t.toolName))break;if(!e.pendingTools.has(t.toolCallId)){const s=new g(t.toolName,t.args,{showImages:this.ctx.toolTrace.getShowImages()},this.ctx.toolTrace.getRegisteredToolDefinition(t.toolName),o);s.setExpanded(e.toolOutputExpanded),a.addChild(s),e.pendingTools.set(t.toolCallId,s),this.ctx.layout.requestRender()}break}case"tool_execution_update":{const s=e.pendingTools.get(t.toolCallId);s&&(s.updateResult({...t.partialResult,isError:!1},!0),a.markDirty(s),this.ctx.layout.requestRender());break}case"tool_execution_end":{const s=e.pendingTools.get(t.toolCallId);s&&(s.updateResult({...t.result,isError:t.isError}),a.markDirty(s),e.pendingTools.delete(t.toolCallId),this.ctx.layout.requestRender());break}case"agent_end":{p("agent_end received");const s=e.agentRunStartMs!==void 0?this.ctx.loaders.formatElapsedSeconds(Date.now()-e.agentRunStartMs):void 0;this.ctx.loaders.stopAgentRunTimer(),e.agentRunStartMs=void 0,e.workingMessageOverride=void 0,e.loadingAnimation&&(e.loadingAnimation.stop(),e.loadingAnimation=void 0,i.clear()),e.streamingComponent&&(a.removeChild(e.streamingComponent),e.streamingComponent=void 0,e.streamingMessage=void 0),e.pendingTools.clear(),e.subAgentPanelComponent&&(i.removeChild(e.subAgentPanelComponent),e.subAgentPanelComponent=void 0),e.subAgentStates.clear(),e.planProgressPanel&&(i.removeChild(e.planProgressPanel),e.planProgressPanel=void 0),e.planProgress=void 0,this.ctx.runtime.clearAttachments(),this.ctx.loaders.setBuddyPetState("happy","Done!",{resetTo:"idle",afterMs:1800}),s&&this.ctx.surface.showStatus(`Completed in ${s}`),await this.ctx.runtime.checkShutdownRequested(),this.ctx.surface.restoreEditorFocusIfPossible(),this.ctx.layout.requestRender();break}case"sub_agent_start":{const s={id:t.subAgentId,agentType:t.agentType,description:t.description,isAsync:t.isAsync,isResolved:!1,isError:!1,toolUseCount:0,lastToolName:null,startTime:Date.now()};e.subAgentStates.set(t.subAgentId,s),e.subAgentPanelComponent||(e.subAgentPanelComponent=new P(o,d),i.addChild(e.subAgentPanelComponent)),e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender();break}case"sub_agent_tool_start":{const s=e.subAgentStates.get(t.subAgentId);s&&(s.lastToolName=t.toolName,e.subAgentPanelComponent&&e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender());break}case"sub_agent_tool_end":{const s=e.subAgentStates.get(t.subAgentId);s&&(s.toolUseCount+=1,s.lastToolName=null,e.subAgentPanelComponent&&e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender());break}case"sub_agent_end":{const s=e.subAgentStates.get(t.subAgentId);s&&(s.isResolved=!0,s.isError=!t.success,s.lastToolName=null,e.subAgentPanelComponent&&e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender());break}case"auto_compaction_start":{this.autoCompactionEscapeHandler=this.ctx.escape.getHandler(),this.ctx.escape.setHandler(()=>{this.ctx.runtime.abortCompaction()}),i.clear();const s=t.reason==="overflow"?"Context overflow detected, ":"";this.autoCompactionLoader=new c(o,d,`${s}Auto-compacting... (${this.ctx.loaders.getInterruptKeyHint()} to cancel)`),i.addChild(this.autoCompactionLoader),this.ctx.layout.requestRender();break}case"auto_compaction_end":{this.autoCompactionEscapeHandler&&(this.ctx.escape.setHandler(this.autoCompactionEscapeHandler),this.autoCompactionEscapeHandler=void 0),this.autoCompactionLoader&&(this.autoCompactionLoader.stop(),this.autoCompactionLoader=void 0,i.clear()),t.aborted?this.ctx.surface.showStatus("Auto-compaction cancelled"):t.result?(a.clear(),this.ctx.layout.rebuildChatFromMessages(),this.ctx.layout.addMessageToChat({role:"compactionSummary",tokensBefore:t.result.tokensBefore,summary:t.result.summary,timestamp:Date.now()}),this.ctx.layout.invalidateFooter()):t.errorMessage&&(a.addChild(new y(1)),a.addChild(new u(d.fg("error",t.errorMessage),1,0))),this.ctx.runtime.flushCompactionQueue({willRetry:t.willRetry}),this.ctx.layout.requestRender();break}case"auto_retry_start":{this.retryEscapeHandler=this.ctx.escape.getHandler(),this.ctx.escape.setHandler(()=>{this.ctx.runtime.abortRetry()}),i.clear();const s=Math.round(t.delayMs/1e3);this.retryLoader=new c(o,d,`Retrying (${t.attempt}/${t.maxAttempts}) in ${s}s... (${this.ctx.loaders.getInterruptKeyHint()} to cancel)`),i.addChild(this.retryLoader),this.ctx.layout.requestRender();break}case"auto_retry_end":{this.retryEscapeHandler&&(this.ctx.escape.setHandler(this.retryEscapeHandler),this.retryEscapeHandler=void 0),this.retryLoader&&(this.retryLoader.stop(),this.retryLoader=void 0,i.clear()),t.success||this.ctx.surface.showError(`Retry failed after ${t.attempt} attempts: ${t.finalError||"Unknown error"}`),this.ctx.layout.requestRender();break}}}}const T=["Phase 1: Initial Understanding","Phase 2: Design","Phase 3: Review","Phase 4: Final Plan","Phase 5: Call ExitPlanMode"];function R(){return{phases:T.map((r,t)=>({label:r,status:t===0?"in_progress":"pending"})),currentPhaseIndex:0,startTime:Date.now()}}l(R,"createInitialPlanProgress");function M(r,t,e){let o;if(t==="ExitPlanMode"){for(const a of r.phases)a.status="completed";r.currentPhaseIndex=r.phases.length;return}if(t==="Agent")(e.subagent_type??"").toLowerCase()==="plan"?o=1:o=0;else if(t==="Read"||t==="Grep"||t==="Find")o=2;else if(t==="Write"||t==="Edit")o=3;else return void 0;if(o>r.currentPhaseIndex){for(let a=r.currentPhaseIndex;a<o;a++)r.phases[a].status="completed";r.currentPhaseIndex=o,r.phases[o].status="in_progress"}}l(M,"detectPlanPhaseTransition");export{L as StreamRenderController};
|
|
1
|
+
var T=Object.defineProperty;var u=(r,t)=>T(r,"name",{value:t,configurable:!0});import*as k from"node:fs";import*as C from"node:os";import*as P from"node:path";import{Spacer as A,Text as h}from"@pencil-agent/tui";import{AssistantMessageComponent as b}from"../components/assistant-message.js";import{PencilLoader as g}from"../components/pencil-loader.js";import{ToolExecutionComponent as f}from"../components/tool-execution.js";import{SubAgentPanelComponent as S}from"../components/sub-agent-panel.js";import{PlanProgressPanelComponent as M}from"../components/plan-progress-panel.js";import{TaskStatusPanelComponent as R}from"../components/task-status-panel.js";import{theme as l}from"../theme/theme.js";import{listTasks as x,onTasksUpdated as _,resetTaskList as w}from"../../../extensions/builtin/task/task-store.js";import{DEFAULT_TASK_LIST_ID as m}from"../../../extensions/builtin/task/task-types.js";const Q=new Set(["TaskCreate","TaskUpdate","TaskList","TaskGet","TaskStop","TaskDelete"]),E=P.join(C.homedir(),".nanopencil","agent","nanopencil-debug.log");function y(r){k.appendFileSync(E,`[${new Date().toISOString()}] [render] ${r}
|
|
2
|
+
`)}u(y,"dbg");const H=5e3;class z{static{u(this,"StreamRenderController")}ctx;autoCompactionLoader=void 0;autoCompactionEscapeHandler=void 0;retryLoader=void 0;retryEscapeHandler=void 0;taskUpdateUnsubscribe=void 0;taskAutoHideTimer=void 0;constructor(t){this.ctx=t}async handle(t){y(`handle event: ${t.type}`),await this.ctx.surface.ensureInitialized(),this.ctx.layout.invalidateFooter();const e=this.ctx.state.get(),n=this.ctx.layout.getUi(),a=this.ctx.layout.getChatContainer(),o=this.ctx.layout.getStatusContainer();switch(t.type){case"agent_start":this.retryEscapeHandler&&(this.ctx.escape.setHandler(this.retryEscapeHandler),this.retryEscapeHandler=void 0),this.retryLoader&&(this.retryLoader.stop(),this.retryLoader=void 0),e.loadingAnimation&&e.loadingAnimation.stop(),o.clear(),e.loadingAnimation=new g(n,l,this.ctx.loaders.getDefaultWorkingMessage(),this.ctx.loaders.getSessionId()),o.addChild(e.loadingAnimation),this.ctx.loaders.setBuddyPetState("working","Working..."),e.pendingWorkingMessage!==void 0&&(e.workingMessageOverride=e.pendingWorkingMessage||void 0,e.pendingWorkingMessage=void 0),this.ctx.loaders.startAgentRunTimer(),this.ctx.loaders.updateWorkingMessage({resetStallTimer:!1}),this.ctx.loaders.isInPlanMode()&&(e.planProgress=D(),e.planProgressPanel=new M(n,l),o.addChild(e.planProgressPanel),e.planProgressPanel.update(e.planProgress)),this.refreshTaskPanel(e,n,o).catch(()=>{}),this.taskUpdateUnsubscribe?.(),this.taskUpdateUnsubscribe=_(()=>{this.refreshTaskPanel(e,n,o).catch(()=>{})}),this.ctx.surface.restoreEditorFocusIfPossible(),this.ctx.layout.requestRender();break;case"message_start":if(t.message.role==="custom")this.ctx.layout.addMessageToChat(t.message),this.ctx.layout.requestRender();else if(t.message.role==="user"){const s=this.ctx.surface.getUserMessageText(t.message);if(e.optimisticUserMessages.length>0&&e.optimisticUserMessages[0]?.text===s){e.optimisticUserMessages.shift(),this.ctx.layout.updatePendingMessagesDisplay(),this.ctx.layout.requestRender();break}this.ctx.layout.addMessageToChat(t.message),this.ctx.layout.updatePendingMessagesDisplay(),this.ctx.layout.requestRender()}else t.message.role==="assistant"&&(e.streamingComponent=new b(void 0,e.hideThinkingBlock,this.ctx.surface.getMarkdownThemeWithSettings()),e.streamingMessage=t.message,a.addChild(e.streamingComponent),e.streamingComponent.updateContent(e.streamingMessage),this.ctx.layout.requestRender());break;case"message_update":if(e.streamingComponent&&t.message.role==="assistant"){e.loadingAnimation&&e.loadingAnimation.resetStallTimer(),e.streamingMessage=t.message,e.streamingComponent.updateContent(e.streamingMessage),a.markDirty(e.streamingComponent);for(const s of e.streamingMessage.content)if(s.type==="toolCall"){if(!this.ctx.toolTrace.shouldRenderToolTrace(s.name))continue;if(e.pendingTools.has(s.id)){const i=e.pendingTools.get(s.id);i&&(i.updateArgs(s.arguments),a.markDirty(i))}else{a.addChild(new h("",0,0));const i=new f(s.name,s.arguments,{showImages:this.ctx.toolTrace.getShowImages()},this.ctx.toolTrace.getRegisteredToolDefinition(s.name),n);i.setExpanded(e.toolOutputExpanded),a.addChild(i),e.pendingTools.set(s.id,i)}}this.ctx.layout.requestRender()}break;case"message_end":if(t.message.role==="user")break;if(e.streamingComponent&&t.message.role==="assistant"){e.streamingMessage=t.message;let s;if(e.streamingMessage.stopReason==="aborted"){const i=this.ctx.runtime.getRetryAttempt();s=i>0?`Aborted after ${i} retry attempt${i>1?"s":""}`:"Operation aborted",e.streamingMessage.errorMessage=s}if(e.streamingComponent.updateContent(e.streamingMessage),a.markDirty(e.streamingComponent),e.streamingMessage.stopReason==="aborted"||e.streamingMessage.stopReason==="error"){s||(s=e.streamingMessage.errorMessage||"Error");for(const[,i]of e.pendingTools.entries())i.updateResult({content:[{type:"text",text:s}],isError:!0}),a.markDirty(i);e.pendingTools.clear()}else for(const[,i]of e.pendingTools.entries())i.setArgsComplete(),a.markDirty(i);e.streamingComponent=void 0,e.streamingMessage=void 0,this.ctx.layout.invalidateFooter()}this.ctx.layout.requestRender();break;case"tool_execution_start":{if(e.planProgress&&e.planProgressPanel&&(L(e.planProgress,t.toolName,t.args),e.planProgressPanel.update(e.planProgress),this.ctx.layout.requestRender()),!this.ctx.toolTrace.shouldRenderToolTrace(t.toolName))break;if(!e.pendingTools.has(t.toolCallId)){const s=new f(t.toolName,t.args,{showImages:this.ctx.toolTrace.getShowImages()},this.ctx.toolTrace.getRegisteredToolDefinition(t.toolName),n);s.setExpanded(e.toolOutputExpanded),a.addChild(s),e.pendingTools.set(t.toolCallId,s),this.ctx.layout.requestRender()}break}case"tool_execution_update":{const s=e.pendingTools.get(t.toolCallId);s&&(s.updateResult({...t.partialResult,isError:!1},!0),a.markDirty(s),this.ctx.layout.requestRender());break}case"tool_execution_end":{const s=e.pendingTools.get(t.toolCallId);s&&(s.updateResult({...t.result,isError:t.isError}),a.markDirty(s),e.pendingTools.delete(t.toolCallId),this.ctx.layout.requestRender());break}case"agent_end":{y("agent_end received");const s=e.agentRunStartMs!==void 0?this.ctx.loaders.formatElapsedSeconds(Date.now()-e.agentRunStartMs):void 0;this.ctx.loaders.stopAgentRunTimer(),e.agentRunStartMs=void 0,e.workingMessageOverride=void 0,e.loadingAnimation&&(e.loadingAnimation.stop(),e.loadingAnimation=void 0,o.clear()),e.streamingComponent&&(a.removeChild(e.streamingComponent),e.streamingComponent=void 0,e.streamingMessage=void 0),e.pendingTools.clear(),e.subAgentPanelComponent&&(o.removeChild(e.subAgentPanelComponent),e.subAgentPanelComponent=void 0),e.subAgentStates.clear(),e.planProgressPanel&&(o.removeChild(e.planProgressPanel),e.planProgressPanel=void 0),e.planProgress=void 0,e.taskStatusPanel&&(o.removeChild(e.taskStatusPanel),e.taskStatusPanel=void 0),this.taskAutoHideTimer&&(clearTimeout(this.taskAutoHideTimer),this.taskAutoHideTimer=void 0),this.ctx.runtime.clearAttachments(),this.ctx.loaders.setBuddyPetState("happy","Done!",{resetTo:"idle",afterMs:1800}),s&&this.ctx.surface.showStatus(`Completed in ${s}`),await this.ctx.runtime.checkShutdownRequested(),this.ctx.surface.restoreEditorFocusIfPossible(),this.ctx.layout.requestRender();break}case"sub_agent_start":{const s={id:t.subAgentId,agentType:t.agentType,description:t.description,isAsync:t.isAsync,isResolved:!1,isError:!1,toolUseCount:0,lastToolName:null,startTime:Date.now()};e.subAgentStates.set(t.subAgentId,s),e.subAgentPanelComponent||(e.subAgentPanelComponent=new S(n,l),o.addChild(e.subAgentPanelComponent)),e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender();break}case"sub_agent_tool_start":{const s=e.subAgentStates.get(t.subAgentId);s&&(s.lastToolName=t.toolName,e.subAgentPanelComponent&&e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender());break}case"sub_agent_tool_end":{const s=e.subAgentStates.get(t.subAgentId);s&&(s.toolUseCount+=1,s.lastToolName=null,e.subAgentPanelComponent&&e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender());break}case"sub_agent_end":{const s=e.subAgentStates.get(t.subAgentId);s&&(s.isResolved=!0,s.isError=!t.success,s.lastToolName=null,e.subAgentPanelComponent&&e.subAgentPanelComponent.update(e.subAgentStates),this.ctx.layout.requestRender());break}case"auto_compaction_start":{this.autoCompactionEscapeHandler=this.ctx.escape.getHandler(),this.ctx.escape.setHandler(()=>{this.ctx.runtime.abortCompaction()}),o.clear();const s=t.reason==="overflow"?"Context overflow detected, ":"";this.autoCompactionLoader=new g(n,l,`${s}Auto-compacting... (${this.ctx.loaders.getInterruptKeyHint()} to cancel)`),o.addChild(this.autoCompactionLoader),this.ctx.layout.requestRender();break}case"auto_compaction_end":{this.autoCompactionEscapeHandler&&(this.ctx.escape.setHandler(this.autoCompactionEscapeHandler),this.autoCompactionEscapeHandler=void 0),this.autoCompactionLoader&&(this.autoCompactionLoader.stop(),this.autoCompactionLoader=void 0,o.clear()),t.aborted?this.ctx.surface.showStatus("Auto-compaction cancelled"):t.result?(a.clear(),this.ctx.layout.rebuildChatFromMessages(),this.ctx.layout.addMessageToChat({role:"compactionSummary",tokensBefore:t.result.tokensBefore,summary:t.result.summary,timestamp:Date.now()}),this.ctx.layout.invalidateFooter()):t.errorMessage&&(a.addChild(new A(1)),a.addChild(new h(l.fg("error",t.errorMessage),1,0))),this.ctx.runtime.flushCompactionQueue({willRetry:t.willRetry}),this.ctx.layout.requestRender();break}case"auto_retry_start":{this.retryEscapeHandler=this.ctx.escape.getHandler(),this.ctx.escape.setHandler(()=>{this.ctx.runtime.abortRetry()}),o.clear();const s=Math.round(t.delayMs/1e3);this.retryLoader=new g(n,l,`Retrying (${t.attempt}/${t.maxAttempts}) in ${s}s... (${this.ctx.loaders.getInterruptKeyHint()} to cancel)`),o.addChild(this.retryLoader),this.ctx.layout.requestRender();break}case"auto_retry_end":{this.retryEscapeHandler&&(this.ctx.escape.setHandler(this.retryEscapeHandler),this.retryEscapeHandler=void 0),this.retryLoader&&(this.retryLoader.stop(),this.retryLoader=void 0,o.clear()),t.success||this.ctx.surface.showError(`Retry failed after ${t.attempt} attempts: ${t.finalError||"Unknown error"}`),this.ctx.layout.requestRender();break}}}static TASK_TOOL_NAMES=new Set(["TaskCreate","TaskUpdate","TaskList","TaskGet","TaskStop","TaskDelete"]);async refreshTaskPanel(t,e,n){const a=this.ctx.runtime.getAgentDir();if(a)try{const o=await x(a,m),s=o.filter(d=>!d.metadata?._internal).map(d=>({id:d.id,subject:d.subject,status:d.status,activeForm:d.activeForm,blockedBy:d.blockedBy.filter(p=>o.some(c=>c.id===p&&c.status!=="completed"))}));if(s.length===0){t.taskStatusPanel&&(n.removeChild(t.taskStatusPanel),t.taskStatusPanel=void 0),this.taskAutoHideTimer&&(clearTimeout(this.taskAutoHideTimer),this.taskAutoHideTimer=void 0);return}t.taskStatusPanel||(t.taskStatusPanel=new R(e,l),n.addChild(t.taskStatusPanel)),t.taskStatusPanel.update(s),this.ctx.layout.requestRender(),s.every(d=>d.status==="completed")?this.taskAutoHideTimer||(this.taskAutoHideTimer=setTimeout(async()=>{this.taskAutoHideTimer=void 0;const d=await x(a,m).catch(()=>[]);d.length>0&&d.every(c=>c.status==="completed")&&await w(a,m).catch(()=>{})},H)):this.taskAutoHideTimer&&(clearTimeout(this.taskAutoHideTimer),this.taskAutoHideTimer=void 0)}catch{}}}const I=["Phase 1: Initial Understanding","Phase 2: Design","Phase 3: Review","Phase 4: Final Plan","Phase 5: Call ExitPlanMode"];function D(){return{phases:I.map((r,t)=>({label:r,status:t===0?"in_progress":"pending"})),currentPhaseIndex:0,startTime:Date.now()}}u(D,"createInitialPlanProgress");function L(r,t,e){let n;if(t==="ExitPlanMode"){for(const a of r.phases)a.status="completed";r.currentPhaseIndex=r.phases.length;return}if(t==="Agent")(e.subagent_type??"").toLowerCase()==="plan"?n=1:n=0;else if(t==="Read"||t==="Grep"||t==="Find")n=2;else if(t==="Write"||t==="Edit")n=3;else return void 0;if(n>r.currentPhaseIndex){for(let a=r.currentPhaseIndex;a<n;a++)r.phases[a].status="completed";r.currentPhaseIndex=n,r.phases[n].status="in_progress"}}u(L,"detectPlanPhaseTransition");export{z as StreamRenderController};
|