@esso0428/pi-subagents 0.17.16 → 0.17.18
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/CHANGELOG.md +11 -0
- package/ROADMAP.md +87 -0
- package/docs/post-0.17.6-agents-roster-viewer-spec.md +42 -0
- package/docs/post-0.17.6-durable-history-spec.md +41 -0
- package/docs/post-0.17.6-feature-specs.md +50 -0
- package/docs/post-0.17.6-nested-agents-spec.md +38 -0
- package/docs/post-0.17.6-recovery-shutdown-spec.md +46 -0
- package/docs/post-0.17.6-ui-latency-baseline-spec.md +46 -0
- package/docs/post-0.17.6-workflow-rpc-lifecycle-spec.md +54 -0
- package/package.json +1 -1
- package/src/agent-history.ts +2 -54
- package/src/agent-manager.ts +406 -1288
- package/src/agent-runner.ts +27 -251
- package/src/agent-types.ts +32 -188
- package/src/cross-extension-rpc.ts +20 -96
- package/src/custom-agents.ts +13 -170
- package/src/index.ts +480 -1920
- package/src/invocation-config.ts +3 -118
- package/src/model-resolver.ts +0 -18
- package/src/output-file.ts +6 -61
- package/src/prompts.ts +2 -45
- package/src/schedule.ts +14 -35
- package/src/settings.ts +2 -301
- package/src/status-note.ts +1 -66
- package/src/types.ts +10 -177
- package/src/ui/agent-widget.ts +57 -278
- package/src/ui/conversation-blocks.ts +0 -6
- package/src/ui/conversation-timeline.ts +25 -139
- package/src/ui/conversation-viewer.ts +48 -212
- package/src/ui/schedule-menu.ts +8 -9
- package/src/usage.ts +2 -109
- package/src/worktree.ts +55 -69
- package/dist/abortable.d.ts +0 -13
- package/dist/abortable.d.ts.map +0 -1
- package/dist/abortable.js +0 -43
- package/dist/abortable.js.map +0 -1
- package/dist/agent-color.d.ts +0 -36
- package/dist/agent-color.d.ts.map +0 -1
- package/dist/agent-color.js +0 -124
- package/dist/agent-color.js.map +0 -1
- package/dist/agent-file-toggle.d.ts +0 -126
- package/dist/agent-file-toggle.d.ts.map +0 -1
- package/dist/agent-file-toggle.js +0 -259
- package/dist/agent-file-toggle.js.map +0 -1
- package/dist/agent-history-list.d.ts +0 -19
- package/dist/agent-history-list.d.ts.map +0 -1
- package/dist/agent-history-list.js +0 -69
- package/dist/agent-history-list.js.map +0 -1
- package/dist/agent-history.d.ts +0 -35
- package/dist/agent-history.d.ts.map +0 -1
- package/dist/agent-history.js +0 -188
- package/dist/agent-history.js.map +0 -1
- package/dist/agent-manager.d.ts +0 -503
- package/dist/agent-manager.d.ts.map +0 -1
- package/dist/agent-manager.js +0 -1572
- package/dist/agent-manager.js.map +0 -1
- package/dist/agent-recovery.d.ts +0 -37
- package/dist/agent-recovery.d.ts.map +0 -1
- package/dist/agent-recovery.js +0 -171
- package/dist/agent-recovery.js.map +0 -1
- package/dist/agent-runner.d.ts +0 -303
- package/dist/agent-runner.d.ts.map +0 -1
- package/dist/agent-runner.js +0 -1003
- package/dist/agent-runner.js.map +0 -1
- package/dist/agent-types.d.ts +0 -120
- package/dist/agent-types.d.ts.map +0 -1
- package/dist/agent-types.js +0 -301
- package/dist/agent-types.js.map +0 -1
- package/dist/child-context.d.ts +0 -3
- package/dist/child-context.d.ts.map +0 -1
- package/dist/child-context.js +0 -13
- package/dist/child-context.js.map +0 -1
- package/dist/context.d.ts +0 -13
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -57
- package/dist/context.js.map +0 -1
- package/dist/cross-extension-rpc.d.ts +0 -67
- package/dist/cross-extension-rpc.d.ts.map +0 -1
- package/dist/cross-extension-rpc.js +0 -139
- package/dist/cross-extension-rpc.js.map +0 -1
- package/dist/custom-agents.d.ts +0 -55
- package/dist/custom-agents.d.ts.map +0 -1
- package/dist/custom-agents.js +0 -309
- package/dist/custom-agents.js.map +0 -1
- package/dist/default-agents.d.ts +0 -8
- package/dist/default-agents.d.ts.map +0 -1
- package/dist/default-agents.js +0 -123
- package/dist/default-agents.js.map +0 -1
- package/dist/enabled-models.d.ts +0 -50
- package/dist/enabled-models.d.ts.map +0 -1
- package/dist/enabled-models.js +0 -146
- package/dist/enabled-models.js.map +0 -1
- package/dist/env.d.ts +0 -7
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js +0 -29
- package/dist/env.js.map +0 -1
- package/dist/group-join.d.ts +0 -33
- package/dist/group-join.d.ts.map +0 -1
- package/dist/group-join.js +0 -117
- package/dist/group-join.js.map +0 -1
- package/dist/index.d.ts +0 -51
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3687
- package/dist/index.js.map +0 -1
- package/dist/invocation-config.d.ts +0 -108
- package/dist/invocation-config.d.ts.map +0 -1
- package/dist/invocation-config.js +0 -84
- package/dist/invocation-config.js.map +0 -1
- package/dist/memory.d.ts +0 -54
- package/dist/memory.d.ts.map +0 -1
- package/dist/memory.js +0 -166
- package/dist/memory.js.map +0 -1
- package/dist/mention-clone.d.ts +0 -88
- package/dist/mention-clone.d.ts.map +0 -1
- package/dist/mention-clone.js +0 -154
- package/dist/mention-clone.js.map +0 -1
- package/dist/mention.d.ts +0 -82
- package/dist/mention.d.ts.map +0 -1
- package/dist/mention.js +0 -132
- package/dist/mention.js.map +0 -1
- package/dist/model-resolver.d.ts +0 -37
- package/dist/model-resolver.d.ts.map +0 -1
- package/dist/model-resolver.js +0 -96
- package/dist/model-resolver.js.map +0 -1
- package/dist/model-scope.d.ts +0 -50
- package/dist/model-scope.d.ts.map +0 -1
- package/dist/model-scope.js +0 -49
- package/dist/model-scope.js.map +0 -1
- package/dist/nested-tools.d.ts +0 -57
- package/dist/nested-tools.d.ts.map +0 -1
- package/dist/nested-tools.js +0 -301
- package/dist/nested-tools.js.map +0 -1
- package/dist/nico-overrides.d.ts +0 -54
- package/dist/nico-overrides.d.ts.map +0 -1
- package/dist/nico-overrides.js +0 -170
- package/dist/nico-overrides.js.map +0 -1
- package/dist/output-file.d.ts +0 -44
- package/dist/output-file.d.ts.map +0 -1
- package/dist/output-file.js +0 -156
- package/dist/output-file.js.map +0 -1
- package/dist/prompts.d.ts +0 -56
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js +0 -92
- package/dist/prompts.js.map +0 -1
- package/dist/schedule-store.d.ts +0 -39
- package/dist/schedule-store.d.ts.map +0 -1
- package/dist/schedule-store.js +0 -156
- package/dist/schedule-store.js.map +0 -1
- package/dist/schedule.d.ts +0 -110
- package/dist/schedule.d.ts.map +0 -1
- package/dist/schedule.js +0 -360
- package/dist/schedule.js.map +0 -1
- package/dist/settings.d.ts +0 -354
- package/dist/settings.d.ts.map +0 -1
- package/dist/settings.js +0 -247
- package/dist/settings.js.map +0 -1
- package/dist/skill-loader.d.ts +0 -25
- package/dist/skill-loader.d.ts.map +0 -1
- package/dist/skill-loader.js +0 -94
- package/dist/skill-loader.js.map +0 -1
- package/dist/status-note.d.ts +0 -62
- package/dist/status-note.d.ts.map +0 -1
- package/dist/status-note.js +0 -86
- package/dist/status-note.js.map +0 -1
- package/dist/structured-output.d.ts +0 -62
- package/dist/structured-output.d.ts.map +0 -1
- package/dist/structured-output.js +0 -113
- package/dist/structured-output.js.map +0 -1
- package/dist/types.d.ts +0 -372
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
- package/dist/ui/agent-mention.d.ts +0 -83
- package/dist/ui/agent-mention.d.ts.map +0 -1
- package/dist/ui/agent-mention.js +0 -188
- package/dist/ui/agent-mention.js.map +0 -1
- package/dist/ui/agent-widget.d.ts +0 -241
- package/dist/ui/agent-widget.d.ts.map +0 -1
- package/dist/ui/agent-widget.js +0 -992
- package/dist/ui/agent-widget.js.map +0 -1
- package/dist/ui/ccstyle/diff/ansi-utils.d.ts +0 -11
- package/dist/ui/ccstyle/diff/ansi-utils.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/ansi-utils.js +0 -145
- package/dist/ui/ccstyle/diff/ansi-utils.js.map +0 -1
- package/dist/ui/ccstyle/diff/diff-presentation.d.ts +0 -12
- package/dist/ui/ccstyle/diff/diff-presentation.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/diff-presentation.js +0 -48
- package/dist/ui/ccstyle/diff/diff-presentation.js.map +0 -1
- package/dist/ui/ccstyle/diff/diff-renderer.d.ts +0 -46
- package/dist/ui/ccstyle/diff/diff-renderer.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/diff-renderer.js +0 -2049
- package/dist/ui/ccstyle/diff/diff-renderer.js.map +0 -1
- package/dist/ui/ccstyle/diff/line-width-safety.d.ts +0 -12
- package/dist/ui/ccstyle/diff/line-width-safety.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/line-width-safety.js +0 -58
- package/dist/ui/ccstyle/diff/line-width-safety.js.map +0 -1
- package/dist/ui/ccstyle/diff/render-utils.d.ts +0 -6
- package/dist/ui/ccstyle/diff/render-utils.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/render-utils.js +0 -25
- package/dist/ui/ccstyle/diff/render-utils.js.map +0 -1
- package/dist/ui/ccstyle/diff/shiki-highlight.d.ts +0 -19
- package/dist/ui/ccstyle/diff/shiki-highlight.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/shiki-highlight.js +0 -85
- package/dist/ui/ccstyle/diff/shiki-highlight.js.map +0 -1
- package/dist/ui/ccstyle/diff/types.d.ts +0 -22
- package/dist/ui/ccstyle/diff/types.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/types.js +0 -10
- package/dist/ui/ccstyle/diff/types.js.map +0 -1
- package/dist/ui/ccstyle/diff/write-display-utils.d.ts +0 -2
- package/dist/ui/ccstyle/diff/write-display-utils.d.ts.map +0 -1
- package/dist/ui/ccstyle/diff/write-display-utils.js +0 -12
- package/dist/ui/ccstyle/diff/write-display-utils.js.map +0 -1
- package/dist/ui/ccstyle/tool-renderer.d.ts +0 -17
- package/dist/ui/ccstyle/tool-renderer.d.ts.map +0 -1
- package/dist/ui/ccstyle/tool-renderer.js +0 -74
- package/dist/ui/ccstyle/tool-renderer.js.map +0 -1
- package/dist/ui/ccstyle/tool-result.d.ts +0 -44
- package/dist/ui/ccstyle/tool-result.d.ts.map +0 -1
- package/dist/ui/ccstyle/tool-result.js +0 -423
- package/dist/ui/ccstyle/tool-result.js.map +0 -1
- package/dist/ui/conversation-blocks.d.ts +0 -46
- package/dist/ui/conversation-blocks.d.ts.map +0 -1
- package/dist/ui/conversation-blocks.js +0 -313
- package/dist/ui/conversation-blocks.js.map +0 -1
- package/dist/ui/conversation-nvim.d.ts +0 -8
- package/dist/ui/conversation-nvim.d.ts.map +0 -1
- package/dist/ui/conversation-nvim.js +0 -117
- package/dist/ui/conversation-nvim.js.map +0 -1
- package/dist/ui/conversation-role.d.ts +0 -13
- package/dist/ui/conversation-role.d.ts.map +0 -1
- package/dist/ui/conversation-role.js +0 -39
- package/dist/ui/conversation-role.js.map +0 -1
- package/dist/ui/conversation-search.d.ts +0 -39
- package/dist/ui/conversation-search.d.ts.map +0 -1
- package/dist/ui/conversation-search.js +0 -124
- package/dist/ui/conversation-search.js.map +0 -1
- package/dist/ui/conversation-timeline.d.ts +0 -102
- package/dist/ui/conversation-timeline.d.ts.map +0 -1
- package/dist/ui/conversation-timeline.js +0 -555
- package/dist/ui/conversation-timeline.js.map +0 -1
- package/dist/ui/conversation-viewer.d.ts +0 -138
- package/dist/ui/conversation-viewer.d.ts.map +0 -1
- package/dist/ui/conversation-viewer.js +0 -1175
- package/dist/ui/conversation-viewer.js.map +0 -1
- package/dist/ui/schedule-menu.d.ts +0 -17
- package/dist/ui/schedule-menu.d.ts.map +0 -1
- package/dist/ui/schedule-menu.js +0 -95
- package/dist/ui/schedule-menu.js.map +0 -1
- package/dist/ui/select-item.d.ts +0 -28
- package/dist/ui/select-item.d.ts.map +0 -1
- package/dist/ui/select-item.js +0 -35
- package/dist/ui/select-item.js.map +0 -1
- package/dist/ui/viewer-keys.d.ts +0 -21
- package/dist/ui/viewer-keys.d.ts.map +0 -1
- package/dist/ui/viewer-keys.js +0 -18
- package/dist/ui/viewer-keys.js.map +0 -1
- package/dist/ui/workflow-card.d.ts +0 -176
- package/dist/ui/workflow-card.d.ts.map +0 -1
- package/dist/ui/workflow-card.js +0 -333
- package/dist/ui/workflow-card.js.map +0 -1
- package/dist/ui/workflow-dialog.d.ts +0 -306
- package/dist/ui/workflow-dialog.d.ts.map +0 -1
- package/dist/ui/workflow-dialog.js +0 -844
- package/dist/ui/workflow-dialog.js.map +0 -1
- package/dist/ui/workflow-menu.d.ts +0 -42
- package/dist/ui/workflow-menu.d.ts.map +0 -1
- package/dist/ui/workflow-menu.js +0 -127
- package/dist/ui/workflow-menu.js.map +0 -1
- package/dist/usage.d.ts +0 -136
- package/dist/usage.d.ts.map +0 -1
- package/dist/usage.js +0 -121
- package/dist/usage.js.map +0 -1
- package/dist/workflow/collisions.d.ts +0 -96
- package/dist/workflow/collisions.d.ts.map +0 -1
- package/dist/workflow/collisions.js +0 -89
- package/dist/workflow/collisions.js.map +0 -1
- package/dist/workflow/entry.d.ts +0 -33
- package/dist/workflow/entry.d.ts.map +0 -1
- package/dist/workflow/entry.js +0 -30
- package/dist/workflow/entry.js.map +0 -1
- package/dist/workflow/host.d.ts +0 -63
- package/dist/workflow/host.d.ts.map +0 -1
- package/dist/workflow/host.js +0 -363
- package/dist/workflow/host.js.map +0 -1
- package/dist/workflow/journal.d.ts +0 -98
- package/dist/workflow/journal.d.ts.map +0 -1
- package/dist/workflow/journal.js +0 -121
- package/dist/workflow/journal.js.map +0 -1
- package/dist/workflow/json-schema.d.ts +0 -52
- package/dist/workflow/json-schema.d.ts.map +0 -1
- package/dist/workflow/json-schema.js +0 -112
- package/dist/workflow/json-schema.js.map +0 -1
- package/dist/workflow/meta.d.ts +0 -68
- package/dist/workflow/meta.d.ts.map +0 -1
- package/dist/workflow/meta.js +0 -318
- package/dist/workflow/meta.js.map +0 -1
- package/dist/workflow/progress.d.ts +0 -225
- package/dist/workflow/progress.d.ts.map +0 -1
- package/dist/workflow/progress.js +0 -362
- package/dist/workflow/progress.js.map +0 -1
- package/dist/workflow/runtime.d.ts +0 -335
- package/dist/workflow/runtime.d.ts.map +0 -1
- package/dist/workflow/runtime.js +0 -831
- package/dist/workflow/runtime.js.map +0 -1
- package/dist/workflow/saved.d.ts +0 -91
- package/dist/workflow/saved.d.ts.map +0 -1
- package/dist/workflow/saved.js +0 -204
- package/dist/workflow/saved.js.map +0 -1
- package/dist/workflow/task.d.ts +0 -137
- package/dist/workflow/task.d.ts.map +0 -1
- package/dist/workflow/task.js +0 -208
- package/dist/workflow/task.js.map +0 -1
- package/dist/workflow/tool-description.d.ts +0 -39
- package/dist/workflow/tool-description.d.ts.map +0 -1
- package/dist/workflow/tool-description.js +0 -200
- package/dist/workflow/tool-description.js.map +0 -1
- package/dist/workflow/worker-source.d.ts +0 -48
- package/dist/workflow/worker-source.d.ts.map +0 -1
- package/dist/workflow/worker-source.js +0 -779
- package/dist/workflow/worker-source.js.map +0 -1
- package/dist/worktree.d.ts +0 -53
- package/dist/worktree.d.ts.map +0 -1
- package/dist/worktree.js +0 -165
- package/dist/worktree.js.map +0 -1
- package/dist/write-execution.d.ts +0 -42
- package/dist/write-execution.d.ts.map +0 -1
- package/dist/write-execution.js +0 -138
- package/dist/write-execution.js.map +0 -1
- package/dist/xml.d.ts +0 -11
- package/dist/xml.d.ts.map +0 -1
- package/dist/xml.js +0 -13
- package/dist/xml.js.map +0 -1
- package/src/abortable.ts +0 -43
- package/src/agent-color.ts +0 -161
- package/src/agent-file-toggle.ts +0 -269
- package/src/child-context.ts +0 -15
- package/src/mention-clone.ts +0 -196
- package/src/mention.ts +0 -141
- package/src/model-scope.ts +0 -70
- package/src/nested-tools.ts +0 -424
- package/src/structured-output.ts +0 -130
- package/src/ui/agent-mention.ts +0 -216
- package/src/ui/select-item.ts +0 -45
- package/src/ui/workflow-card.ts +0 -470
- package/src/ui/workflow-dialog.ts +0 -1115
- package/src/ui/workflow-menu.ts +0 -166
- package/src/workflow/collisions.ts +0 -123
- package/src/workflow/entry.ts +0 -47
- package/src/workflow/host.ts +0 -403
- package/src/workflow/journal.ts +0 -164
- package/src/workflow/json-schema.ts +0 -128
- package/src/workflow/meta.ts +0 -325
- package/src/workflow/progress.ts +0 -550
- package/src/workflow/runtime.ts +0 -1219
- package/src/workflow/saved.ts +0 -217
- package/src/workflow/task.ts +0 -302
- package/src/workflow/tool-description.ts +0 -200
- package/src/workflow/worker-source.ts +0 -781
- package/src/xml.ts +0 -13
package/dist/ui/agent-mention.js
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* agent-mention.ts — what `@` can address, and the suggestions pi renders for it.
|
|
3
|
-
*
|
|
4
|
-
* A subagent is addressable whether or not it is currently running: a live
|
|
5
|
-
* record is messaged or resumed, an evicted one whose session is still on disk
|
|
6
|
-
* is reopened, and an agent *type* with no instance at all is started. That is
|
|
7
|
-
* the point of the handle — `@explore` means the Explore agent, not "the
|
|
8
|
-
* Explore process that happens to exist right now" — so the roster below unions
|
|
9
|
-
* all three, and the dispatcher and the popup read the same list.
|
|
10
|
-
*
|
|
11
|
-
* Rows are per *agent*, not per handle. An agent given a `name` holds two names
|
|
12
|
-
* (its alias and its type-derived handle) and both resolve, but it lists once,
|
|
13
|
-
* under the alias, with its type moved into the description so the row still
|
|
14
|
-
* says what it is.
|
|
15
|
-
*
|
|
16
|
-
* pi's `CombinedAutocompleteProvider` already owns `@`, where it means "attach a
|
|
17
|
-
* file". Extensions can wrap it (`ctx.ui.addAutocompleteProvider`), so this
|
|
18
|
-
* provider adds the `@` tokens that name an agent and delegates everything else
|
|
19
|
-
* — including all of `applyCompletion`, whose `@`-branch already inserts
|
|
20
|
-
* `item.value` plus a trailing space, which is exactly what a handle needs.
|
|
21
|
-
*
|
|
22
|
-
* Matching mirrors Claude Code: case-insensitive prefix, not fuzzy. What it does
|
|
23
|
-
* NOT mirror is Claude Code dropping files whenever an agent matches. Here `@` is
|
|
24
|
-
* pi's file picker first, and the handles are additive, so a token matching both
|
|
25
|
-
* lists both — agents first. Suppressing on any match sounds narrow and is not:
|
|
26
|
-
* an empty token prefix-matches every handle, so a bare `@` — the gesture people
|
|
27
|
-
* use to browse files — would offer no files at all, and a single letter
|
|
28
|
-
* beginning any handle would do the same.
|
|
29
|
-
*
|
|
30
|
-
* Both halves ship under ONE `prefix`, which is sound because wherever BOTH sides
|
|
31
|
-
* produce rows they measured the same span. pi's `extractAtPrefix` takes the
|
|
32
|
-
* token after the last of `{space, tab, ", ', =}` and keeps it only if it starts
|
|
33
|
-
* with `@`; `MENTION_TRIGGER` matches `@[\w-]*` at the cursor, after start-of-line
|
|
34
|
-
* or `[\s。、?!]`. Where those two disagree, exactly one side answers and there
|
|
35
|
-
* is nothing to merge: `@src/index.ts` and `@"my file` are pi's alone (no handle
|
|
36
|
-
* matches), `=@ex` is pi's alone (`=` is a delimiter to pi, not a boundary to us),
|
|
37
|
-
* and `。@ex` is ours alone (the reverse). A merged response therefore never
|
|
38
|
-
* carries a prefix from one side and an item from the other.
|
|
39
|
-
*
|
|
40
|
-
* Offering never-started types is a deliberate step beyond Claude Code, whose
|
|
41
|
-
* registry holds only live tasks, so an agent you had not launched yet was
|
|
42
|
-
* unaddressable.
|
|
43
|
-
*/
|
|
44
|
-
import { handleBase, MENTION_TRIGGER } from "../mention.js";
|
|
45
|
-
/**
|
|
46
|
-
* Everything `@` can reach, in the order the popup lists it: steerable agents
|
|
47
|
-
* first, then the other live ones earliest-launched, then agent types with no
|
|
48
|
-
* live instance. A type whose handle a record already holds is omitted — that
|
|
49
|
-
* name addresses the existing agent, which is what makes `@explore` mean
|
|
50
|
-
* "message the one that's running" and only otherwise "start one".
|
|
51
|
-
*/
|
|
52
|
-
export function mentionRoster(manager, types,
|
|
53
|
-
// Identity by default: a caller with no registry to consult gets the raw
|
|
54
|
-
// type, which is also what `getConfig` falls back to when no label is set.
|
|
55
|
-
displayNameOf = type => type) {
|
|
56
|
-
const live = (r) => r.status === "running" || r.status === "queued";
|
|
57
|
-
const records = manager.listAgents()
|
|
58
|
-
.filter(r => r.handle !== undefined && r.parentAgentId === undefined)
|
|
59
|
-
.sort((a, b) => (Number(live(b)) - Number(live(a))) || (a.startedAt - b.startedAt));
|
|
60
|
-
const taken = new Set();
|
|
61
|
-
const targets = [];
|
|
62
|
-
// One row per agent, not per handle. An aliased agent lists under its alias
|
|
63
|
-
// only — both names resolve, but showing two rows for one agent reads as two
|
|
64
|
-
// agents. The type handle stays addressable whether or not it is listed.
|
|
65
|
-
for (const record of records) {
|
|
66
|
-
const handle = record.alias ?? record.handle;
|
|
67
|
-
taken.add(handle.toLowerCase());
|
|
68
|
-
if (record.handle)
|
|
69
|
-
taken.add(record.handle.toLowerCase());
|
|
70
|
-
targets.push({ kind: "record", handle, record, typeLabel: displayNameOf(record.type) });
|
|
71
|
-
}
|
|
72
|
-
// Then agents that are gone but whose conversation can be reopened. After the
|
|
73
|
-
// live ones: a running agent is the likelier target, and this keeps the
|
|
74
|
-
// ordering "what exists now, then what can be brought back, then what can be
|
|
75
|
-
// started".
|
|
76
|
-
for (const entry of manager.listTombstones()) {
|
|
77
|
-
const handle = entry.alias ?? entry.handle;
|
|
78
|
-
if (taken.has(handle.toLowerCase()))
|
|
79
|
-
continue;
|
|
80
|
-
taken.add(handle.toLowerCase());
|
|
81
|
-
taken.add(entry.handle.toLowerCase());
|
|
82
|
-
targets.push({ kind: "tombstone", handle, entry, typeLabel: displayNameOf(entry.type) });
|
|
83
|
-
}
|
|
84
|
-
for (const type of types) {
|
|
85
|
-
const handle = handleBase(type.name);
|
|
86
|
-
if (taken.has(handle))
|
|
87
|
-
continue;
|
|
88
|
-
taken.add(handle);
|
|
89
|
-
targets.push({ kind: "type", handle, type: type.name, description: type.description });
|
|
90
|
-
}
|
|
91
|
-
return targets;
|
|
92
|
-
}
|
|
93
|
-
export function createMentionProvider(current, roster, isEnabled) {
|
|
94
|
-
// One warning per provider, not per keystroke: `getSuggestions` runs on every
|
|
95
|
-
// character typed after `@`, so an unguarded log would bury the terminal in
|
|
96
|
-
// the time it takes to finish a word.
|
|
97
|
-
let warnedInnerFailure = false;
|
|
98
|
-
return {
|
|
99
|
-
// Only `@` — the contract is "characters that should naturally trigger
|
|
100
|
-
// THIS provider", and pi unions each wrapper's own set onto the outermost
|
|
101
|
-
// one itself (interactive-mode.js:432), so re-declaring the wrapped
|
|
102
|
-
// provider's characters here would both misreport us and duplicate that.
|
|
103
|
-
triggerCharacters: ["@"],
|
|
104
|
-
async getSuggestions(lines, cursorLine, cursorCol, options) {
|
|
105
|
-
const mine = isEnabled() ? mentionItems(roster(), lines[cursorLine] ?? "", cursorCol) : null;
|
|
106
|
-
// Asked unconditionally: pi owns `@` and must keep answering for it even
|
|
107
|
-
// when a handle matches too. That is the same work vanilla pi does on any
|
|
108
|
-
// `@` keystroke — a capped `fd` search, or nothing at all when the host
|
|
109
|
-
// configured no `fd` path — but we now do it on tokens we used to answer
|
|
110
|
-
// alone, so it must not be able to take the popup down with it. The
|
|
111
|
-
// wrapped provider is not always pi's: another extension may sit inside
|
|
112
|
-
// us, and before this it was never called for a token naming an agent.
|
|
113
|
-
// try/catch, not `.catch()`: a provider that throws SYNCHRONOUSLY never
|
|
114
|
-
// returns the promise a `.catch()` would attach to, and the throw escapes
|
|
115
|
-
// this method as a rejection — which pi does not handle either
|
|
116
|
-
// (components/editor.js:1892 awaits with no catch of its own).
|
|
117
|
-
let theirs = null;
|
|
118
|
-
try {
|
|
119
|
-
theirs = await current.getSuggestions(lines, cursorLine, cursorCol, options);
|
|
120
|
-
}
|
|
121
|
-
catch (err) {
|
|
122
|
-
// Safe to treat as "no files": pi discards any response whose request is
|
|
123
|
-
// no longer current, so an aborted search that surfaces as a rejection
|
|
124
|
-
// cannot leave a stale popup behind (`isAutocompleteRequestCurrent`).
|
|
125
|
-
// Warned rather than swallowed outright — the failure is invisible in
|
|
126
|
-
// the popup, and the same `console.warn` channel already carries this
|
|
127
|
-
// extension's other non-fatal failures.
|
|
128
|
-
if (!warnedInnerFailure) {
|
|
129
|
-
warnedInnerFailure = true;
|
|
130
|
-
console.warn("[pi-subagents] the autocomplete provider below us failed; showing agent rows only:", err);
|
|
131
|
-
}
|
|
132
|
-
theirs = null;
|
|
133
|
-
}
|
|
134
|
-
if (!mine)
|
|
135
|
-
return theirs;
|
|
136
|
-
if (!theirs)
|
|
137
|
-
return mine;
|
|
138
|
-
// Agents first: there are a handful of them against pi's 20 file rows, and
|
|
139
|
-
// a handle buried under fuzzy path matches is a handle nobody finds. The
|
|
140
|
-
// prefix is ours by the span argument in the header — identical to pi's
|
|
141
|
-
// whenever both sides have something to say.
|
|
142
|
-
return { items: [...mine.items, ...theirs.items], prefix: mine.prefix };
|
|
143
|
-
},
|
|
144
|
-
applyCompletion(lines, cursorLine, cursorCol, item, prefix) {
|
|
145
|
-
return current.applyCompletion(lines, cursorLine, cursorCol, item, prefix);
|
|
146
|
-
},
|
|
147
|
-
shouldTriggerFileCompletion(lines, cursorLine, cursorCol) {
|
|
148
|
-
return current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
/** Suggestions for the `@…` token under the cursor, or null when it names no agent. */
|
|
153
|
-
function mentionItems(roster, line, cursorCol) {
|
|
154
|
-
const match = MENTION_TRIGGER.exec(line.slice(0, cursorCol));
|
|
155
|
-
if (!match)
|
|
156
|
-
return null;
|
|
157
|
-
const typed = match[2].toLowerCase();
|
|
158
|
-
const items = [];
|
|
159
|
-
for (const target of roster) {
|
|
160
|
-
if (!target.handle.toLowerCase().startsWith(typed))
|
|
161
|
-
continue;
|
|
162
|
-
items.push({ value: `@${target.handle}`, label: `@${target.handle}`, description: describeTarget(target) });
|
|
163
|
-
}
|
|
164
|
-
return items.length > 0 ? { items, prefix: `@${match[2]}` } : null;
|
|
165
|
-
}
|
|
166
|
-
/** Name the action that will actually happen, so the list never mispromises. */
|
|
167
|
-
function describeTarget(target) {
|
|
168
|
-
if (target.kind === "type")
|
|
169
|
-
return `start agent · ${summarize(target.description)}`;
|
|
170
|
-
if (target.kind === "tombstone") {
|
|
171
|
-
// No status: the record is gone, and "completed" would imply one is still
|
|
172
|
-
// being tracked. The type carries the identity the handle may not.
|
|
173
|
-
return `resume · ${target.typeLabel} · ${target.entry.description}`;
|
|
174
|
-
}
|
|
175
|
-
const { status, description, alias } = target.record;
|
|
176
|
-
const action = status === "running" || status === "queued" ? "send message" : "resume";
|
|
177
|
-
// A row listed under its alias has lost the type its handle would have shown,
|
|
178
|
-
// so name it — `@auth-audit` alone says nothing about what the agent is.
|
|
179
|
-
// A type-derived row already reads as its type and would just repeat itself.
|
|
180
|
-
const identity = alias ? `${target.typeLabel} · ` : "";
|
|
181
|
-
return `${action} · ${identity}${status} · ${description}`;
|
|
182
|
-
}
|
|
183
|
-
/** First sentence of an agent description, clipped — these run to paragraphs. */
|
|
184
|
-
function summarize(description) {
|
|
185
|
-
const first = (description.match(/^.*?[.!?](?=\s|$)/s)?.[0] ?? description).replace(/\s+/g, " ").trim();
|
|
186
|
-
return first.length > 60 ? `${first.slice(0, 59).trimEnd()}…` : first;
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=agent-mention.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-mention.js","sourceRoot":"","sources":["../../src/ui/agent-mention.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* agent-widget.ts — Persistent widget showing running/completed agents above the editor.
|
|
3
|
-
*
|
|
4
|
-
* Displays a tree of agents with animated spinners, live stats, and activity descriptions.
|
|
5
|
-
* Uses the callback form of setWidget for themed rendering.
|
|
6
|
-
*/
|
|
7
|
-
import type { AgentManager } from "../agent-manager.js";
|
|
8
|
-
import type { AgentInvocation, AgentRecord, SubagentType, WidgetMode } from "../types.js";
|
|
9
|
-
import { type LifetimeUsage, type SessionLike } from "../usage.js";
|
|
10
|
-
/** Maximum number of rendered lines before overflow collapse kicks in. */
|
|
11
|
-
export declare const MAX_WIDGET_LINES = 12;
|
|
12
|
-
/**
|
|
13
|
-
* Derive the widget ceiling from the terminal height while retaining the
|
|
14
|
-
* historical MAX_WIDGET_LINES ceiling. Very short terminals may have no room
|
|
15
|
-
* for the widget; that is preferable to consuming the editor/input area.
|
|
16
|
-
*/
|
|
17
|
-
export declare function getWidgetLineBudget(rows: number): number;
|
|
18
|
-
/** Braille spinner frames for animated running indicator. */
|
|
19
|
-
export declare const SPINNER: string[];
|
|
20
|
-
/** Statuses that indicate an error/non-success outcome (used for linger behavior and icon rendering). */
|
|
21
|
-
export declare const ERROR_STATUSES: Set<string>;
|
|
22
|
-
export type Theme = {
|
|
23
|
-
fg(color: string, text: string): string;
|
|
24
|
-
bold(text: string): string;
|
|
25
|
-
};
|
|
26
|
-
export type AgentWidgetOpenMode = "live" | "history";
|
|
27
|
-
export type AgentWidgetOpenCallback = (record: AgentRecord, mode: AgentWidgetOpenMode) => void | Promise<void>;
|
|
28
|
-
export interface AgentWidgetOptions {
|
|
29
|
-
canOpenHistory?: (record: AgentRecord) => boolean;
|
|
30
|
-
onOpen?: AgentWidgetOpenCallback;
|
|
31
|
-
showCost?: () => boolean;
|
|
32
|
-
}
|
|
33
|
-
/** @deprecated Use AgentWidgetOpenMode. */
|
|
34
|
-
export type AgentOpenMode = AgentWidgetOpenMode;
|
|
35
|
-
/** @deprecated Use AgentWidgetOpenCallback. */
|
|
36
|
-
export type AgentOpenCallback = AgentWidgetOpenCallback;
|
|
37
|
-
/** @deprecated Use AgentWidgetOptions.canOpenHistory. */
|
|
38
|
-
export type AgentHistoryCapability = AgentWidgetOptions["canOpenHistory"];
|
|
39
|
-
export type UICtx = {
|
|
40
|
-
setStatus(key: string, text: string | undefined): void;
|
|
41
|
-
setWidget(key: string, content: undefined | ((tui: any, theme: Theme) => {
|
|
42
|
-
render(): string[];
|
|
43
|
-
invalidate(): void;
|
|
44
|
-
}), options?: {
|
|
45
|
-
placement?: "aboveEditor" | "belowEditor";
|
|
46
|
-
}): void;
|
|
47
|
-
onTerminalInput?(handler: (data: string) => {
|
|
48
|
-
consume?: boolean;
|
|
49
|
-
data?: string;
|
|
50
|
-
} | undefined): () => void;
|
|
51
|
-
getEditorText?(): string;
|
|
52
|
-
};
|
|
53
|
-
/** Per-agent live activity state. */
|
|
54
|
-
export interface AgentActivity {
|
|
55
|
-
activeTools: Map<string, string>;
|
|
56
|
-
toolUses: number;
|
|
57
|
-
responseText: string;
|
|
58
|
-
session?: SessionLike;
|
|
59
|
-
/** Current turn count. */
|
|
60
|
-
turnCount: number;
|
|
61
|
-
/** Effective max turns for this agent (undefined = unlimited). */
|
|
62
|
-
maxTurns?: number;
|
|
63
|
-
/** Lifetime usage breakdown — see LifetimeUsage docs. */
|
|
64
|
-
lifetimeUsage: LifetimeUsage;
|
|
65
|
-
}
|
|
66
|
-
/** Metadata attached to Agent tool results for custom rendering. */
|
|
67
|
-
export interface AgentDetails {
|
|
68
|
-
displayName: string;
|
|
69
|
-
description: string;
|
|
70
|
-
subagentType: string;
|
|
71
|
-
toolUses: number;
|
|
72
|
-
tokens: string;
|
|
73
|
-
durationMs: number;
|
|
74
|
-
status: "queued" | "running" | "completed" | "steered" | "aborted" | "stopped" | "error" | "background";
|
|
75
|
-
/** Human-readable description of what the agent is currently doing. */
|
|
76
|
-
activity?: string;
|
|
77
|
-
/** Current spinner frame index (for animated running indicator). */
|
|
78
|
-
spinnerFrame?: number;
|
|
79
|
-
/** Short model name if different from parent (e.g. "haiku", "sonnet"). */
|
|
80
|
-
modelName?: string;
|
|
81
|
-
/** Notable config tags (e.g. ["thinking: high", "isolated"]). */
|
|
82
|
-
tags?: string[];
|
|
83
|
-
/** Current turn count. */
|
|
84
|
-
turnCount?: number;
|
|
85
|
-
/** Effective max turns (undefined = unlimited). */
|
|
86
|
-
maxTurns?: number;
|
|
87
|
-
/** Estimated cost in USD; 0 when the model has no pricing data. */
|
|
88
|
-
cost?: number;
|
|
89
|
-
agentId?: string;
|
|
90
|
-
error?: string;
|
|
91
|
-
}
|
|
92
|
-
/** Apply foreground styling while restoring it after nested foreground/full ANSI resets. */
|
|
93
|
-
export declare function fgPreservingNestedStyles(theme: Theme, color: string, text: string): string;
|
|
94
|
-
/** Format a token count compactly: "33.8k token", "1.2M token". */
|
|
95
|
-
export declare function formatTokens(count: number): string;
|
|
96
|
-
/**
|
|
97
|
-
* Token count with optional context-fill % and compaction-count annotations.
|
|
98
|
-
* Thresholds for percent: <70% dim, 70–85% warning, ≥85% error.
|
|
99
|
-
* Compaction count rendered as `⇊N` in dim.
|
|
100
|
-
*
|
|
101
|
-
* "12.3k token" — no annotations
|
|
102
|
-
* "12.3k token (45%)" — percent only
|
|
103
|
-
* "12.3k token (⇊2)" — compactions only (e.g. right after compact)
|
|
104
|
-
* "12.3k token (45% · ⇊2)" — both
|
|
105
|
-
*/
|
|
106
|
-
export declare function formatSessionTokens(tokens: number, percent: number | null, theme: Theme, compactions?: number): string;
|
|
107
|
-
/** Format turn count with optional max limit: "↻5≤30" or "↻5". */
|
|
108
|
-
export declare function formatTurns(turnCount: number, maxTurns?: number | null): string;
|
|
109
|
-
/** Format milliseconds as human-readable duration. */
|
|
110
|
-
export declare function formatMs(ms: number): string;
|
|
111
|
-
/** Format duration from start/completed timestamps. */
|
|
112
|
-
export declare function formatDuration(startedAt: number, completedAt?: number): string;
|
|
113
|
-
/** Format an estimated model cost without implying billing precision. */
|
|
114
|
-
export declare function formatCost(cost: number): string;
|
|
115
|
-
/** Get display name for any agent type (built-in or custom). */
|
|
116
|
-
export declare function getDisplayName(type: SubagentType): string;
|
|
117
|
-
/** Short label for prompt mode: "twin" for append, nothing for replace (the default). */
|
|
118
|
-
export declare function getPromptModeLabel(type: SubagentType): string | undefined;
|
|
119
|
-
/** Mode label is not included — callers add it where they want it. */
|
|
120
|
-
export declare function buildInvocationTags(invocation: AgentInvocation | undefined): {
|
|
121
|
-
modelName?: string;
|
|
122
|
-
modelId?: string;
|
|
123
|
-
tags: string[];
|
|
124
|
-
};
|
|
125
|
-
/** Build a human-readable activity string from currently-running tools or response text. */
|
|
126
|
-
export declare function describeActivity(activeTools: Map<string, string>, responseText?: string): string;
|
|
127
|
-
export declare class AgentWidget {
|
|
128
|
-
private manager;
|
|
129
|
-
private agentActivity;
|
|
130
|
-
/** Read live at render time. Selects which agents the widget shows. */
|
|
131
|
-
private mode;
|
|
132
|
-
private uiCtx;
|
|
133
|
-
private widgetFrame;
|
|
134
|
-
private widgetInterval;
|
|
135
|
-
private inputUnsub;
|
|
136
|
-
/** Whether arrow keys currently navigate the agent roster. */
|
|
137
|
-
private navigationActive;
|
|
138
|
-
/** Stable identity of the selected row, so roster changes do not jump selection. */
|
|
139
|
-
private selectedAgentId;
|
|
140
|
-
/** Last logical roster index of the selected row, used when it disappears. */
|
|
141
|
-
private selectedRosterIndex;
|
|
142
|
-
/** First logical row currently represented by the bounded viewport. */
|
|
143
|
-
private viewportStart;
|
|
144
|
-
/** Cached records and roster. Rebuilt by update(), never by an arrow press. */
|
|
145
|
-
private cachedAgents;
|
|
146
|
-
private cachedRoster;
|
|
147
|
-
private rosterCacheKey;
|
|
148
|
-
private rosterCacheInitialized;
|
|
149
|
-
/** Terminal history capability is a potentially filesystem-backed lookup. */
|
|
150
|
-
private historyOpenabilityCache;
|
|
151
|
-
/** Whether the widget callback is currently registered with the TUI. */
|
|
152
|
-
private widgetRegistered;
|
|
153
|
-
/** Cached TUI reference from widget factory callback, used for requestRender(). */
|
|
154
|
-
private tui;
|
|
155
|
-
/** Last status bar text, used to avoid redundant setStatus calls. */
|
|
156
|
-
private lastStatusText;
|
|
157
|
-
/** Snapshot of the state used for the last widget registration/render request. */
|
|
158
|
-
private lastRenderKey;
|
|
159
|
-
private readonly openOptions;
|
|
160
|
-
private readonly showCost;
|
|
161
|
-
private readonly showModel;
|
|
162
|
-
constructor(manager: AgentManager, agentActivity: Map<string, AgentActivity>,
|
|
163
|
-
/** Read live at render time. Selects which agents the widget shows. */
|
|
164
|
-
mode?: () => WidgetMode, showCostOrOptions?: (() => boolean) | AgentWidgetOptions, showModel?: () => boolean);
|
|
165
|
-
/**
|
|
166
|
-
* Agents eligible for the widget, per the current `WidgetMode`:
|
|
167
|
-
* - `off`: none (the widget's existing empty-state path hides it entirely).
|
|
168
|
-
* - `background`: drop only agents *known* to be foreground
|
|
169
|
-
* (`isBackground === false`); keep everything else — background, queued,
|
|
170
|
-
* scheduled, or RPC-spawned (`undefined`). Keying off the `isBackground`
|
|
171
|
-
* record flag rather than the UI-only `invocation` snapshot (which only the
|
|
172
|
-
* Agent-tool path sets), and excluding rather than allow-listing, means
|
|
173
|
-
* only proven-foreground runs drop out — nothing else silently vanishes.
|
|
174
|
-
* - `all`: every agent.
|
|
175
|
-
*/
|
|
176
|
-
private widgetAgentsFromManager;
|
|
177
|
-
/** Records currently visible to the widget; safe for render and input paths. */
|
|
178
|
-
private widgetAgents;
|
|
179
|
-
private canOpenHistory;
|
|
180
|
-
private historyOpenabilityKey;
|
|
181
|
-
/**
|
|
182
|
-
* Cache terminal history capability by the record state that can affect it.
|
|
183
|
-
* The supplied predicate may call `existsSync`, so it must not run from a
|
|
184
|
-
* timer refresh, render-key calculation, or arrow-navigation path more than
|
|
185
|
-
* once for the same terminal record state.
|
|
186
|
-
*/
|
|
187
|
-
private cachedCanOpenHistory;
|
|
188
|
-
/** Refresh the manager snapshot and openability cache at lifecycle/update time. */
|
|
189
|
-
private refreshRoster;
|
|
190
|
-
/** Set the UI context (grabbed from first tool execution). */
|
|
191
|
-
setUICtx(ctx: UICtx): boolean;
|
|
192
|
-
/** Request a render on the currently registered TUI without touching input. */
|
|
193
|
-
requestUiRefresh(force?: boolean): boolean;
|
|
194
|
-
/** Called on each new turn (tool_execution_start). */
|
|
195
|
-
onTurnStart(): void;
|
|
196
|
-
/** Keep the spinner/elapsed-time timer alive only while a visible agent runs. */
|
|
197
|
-
ensureTimer(): void;
|
|
198
|
-
private syncTimer;
|
|
199
|
-
/**
|
|
200
|
-
* Retained for the lifecycle call sites. Terminal visibility is determined
|
|
201
|
-
* by the manager record and the history capability, not a one-turn timer.
|
|
202
|
-
*/
|
|
203
|
-
markFinished(_agentId: string): void;
|
|
204
|
-
/** Retained for lifecycle call sites; terminal rows are record-driven now. */
|
|
205
|
-
markRunning(_agentId: string): void;
|
|
206
|
-
/**
|
|
207
|
-
* Records represented by selectable rows in the above-editor widget.
|
|
208
|
-
*
|
|
209
|
-
* Keep this order as the single source of truth for both rendering and key
|
|
210
|
-
* navigation. `listAgents()` is newest-first; active rows come first so the
|
|
211
|
-
* panel exposes currently useful work before terminal history.
|
|
212
|
-
*/
|
|
213
|
-
private roster;
|
|
214
|
-
/** True when pi's prompt editor owns the keyboard. */
|
|
215
|
-
private editorHasFocus;
|
|
216
|
-
private selectedIndexOf;
|
|
217
|
-
private deactivate;
|
|
218
|
-
/** Resume navigation from the retained row, or select the first row. */
|
|
219
|
-
private activate;
|
|
220
|
-
/** Move the selected row, activating only from an empty focused editor. */
|
|
221
|
-
private moveSelection;
|
|
222
|
-
private openSelected;
|
|
223
|
-
/** Handle terminal input before it reaches the focused prompt editor. */
|
|
224
|
-
handleKey(data: string): {
|
|
225
|
-
consume?: boolean;
|
|
226
|
-
data?: string;
|
|
227
|
-
} | undefined;
|
|
228
|
-
/** Render a finished agent line. */
|
|
229
|
-
private renderFinishedLine;
|
|
230
|
-
/**
|
|
231
|
-
* Render the widget content. Called from the registered widget's render() callback,
|
|
232
|
-
* reading live state each time instead of capturing it in a closure.
|
|
233
|
-
*/
|
|
234
|
-
private renderWidget;
|
|
235
|
-
/** Build a render-relevant snapshot without capturing mutable records. */
|
|
236
|
-
private renderKey;
|
|
237
|
-
/** Force an immediate widget update. `advanceSpinner` is reserved for the timer. */
|
|
238
|
-
update(advanceSpinner?: boolean): void;
|
|
239
|
-
dispose(): void;
|
|
240
|
-
}
|
|
241
|
-
//# sourceMappingURL=agent-widget.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-widget.d.ts","sourceRoot":"","sources":["../../src/ui/agent-widget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAA+D,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAIhI,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAInC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,6DAA6D;AAC7D,eAAO,MAAM,OAAO,UAAqD,CAAC;AAE1E,yGAAyG;AACzG,eAAO,MAAM,cAAc,aAAsD,CAAC;AAelF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAAC;AACrD,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/G,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC;IAClD,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;CAC1B;AACD,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAChD,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AACxD,yDAAyD;AACzD,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAE1E,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACvD,SAAS,CACP,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK;QAAE,MAAM,IAAI,MAAM,EAAE,CAAC;QAAC,UAAU,IAAI,IAAI,CAAA;KAAE,CAAC,EAC7F,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,aAAa,GAAG,aAAa,CAAA;KAAE,GACtD,IAAI,CAAC;IACR,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAAG,MAAM,IAAI,CAAC;IAC1G,aAAa,CAAC,IAAI,MAAM,CAAC;CAC1B,CAAC;AAEF,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IACxG,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,4FAA4F;AAC5F,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1F;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,KAAK,EAAE,KAAK,EACZ,WAAW,SAAI,GACd,MAAM,CAYR;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE/E;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEzD;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,eAAe,GAAG,SAAS,GACtC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAiB1D;AASD,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBhG;AAID,qBAAa,WAAW;IAmCpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,aAAa;IACrB,uEAAuE;IACvE,OAAO,CAAC,IAAI;IArCd,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,UAAU,CAA2B;IAC7C,8DAA8D;IAC9D,OAAO,CAAC,gBAAgB,CAAS;IACjC,oFAAoF;IACpF,OAAO,CAAC,eAAe,CAAqB;IAC5C,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB,CAAK;IAChC,uEAAuE;IACvE,OAAO,CAAC,aAAa,CAAK;IAE1B,+EAA+E;IAC/E,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,sBAAsB,CAAS;IACvC,6EAA6E;IAC7E,OAAO,CAAC,uBAAuB,CAAsD;IAErF,wEAAwE;IACxE,OAAO,CAAC,gBAAgB,CAAS;IACjC,mFAAmF;IACnF,OAAO,CAAC,GAAG,CAAkB;IAC7B,qEAAqE;IACrE,OAAO,CAAC,cAAc,CAAqB;IAC3C,kFAAkF;IAClF,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAGhC,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IACjD,uEAAuE;IAC/D,IAAI,GAAE,MAAM,UAAwB,EAC5C,iBAAiB,GAAE,CAAC,MAAM,OAAO,CAAC,GAAG,kBAAgC,EACrE,SAAS,GAAE,MAAM,OAAqB;IAYxC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IAS/B,gFAAgF;IAChF,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,qBAAqB;IAS7B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAY5B,mFAAmF;IACnF,OAAO,CAAC,aAAa;IAqCrB,8DAA8D;IAC9D,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO;IA6B7B,+EAA+E;IAC/E,gBAAgB,CAAC,KAAK,UAAQ,GAAG,OAAO;IAMxC,sDAAsD;IACtD,WAAW;IAIX,iFAAiF;IACjF,WAAW;IASX,OAAO,CAAC,SAAS;IASjB;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM;IAE7B,8EAA8E;IAC9E,WAAW,CAAC,QAAQ,EAAE,MAAM;IAE5B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAId,sDAAsD;IACtD,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;IASlB,wEAAwE;IACxE,OAAO,CAAC,QAAQ;IAiBhB,2EAA2E;IAC3E,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,YAAY;IAQpB,yEAAyE;IACzE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAiCzE,oCAAoC;IACpC,OAAO,CAAC,kBAAkB;IAsC1B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAmTpB,0EAA0E;IAC1E,OAAO,CAAC,SAAS;IAuCjB,oFAAoF;IACpF,MAAM,CAAC,cAAc,UAAQ;IAoG7B,OAAO;CA0BR"}
|