agentic-assistant 0.6.0 → 0.7.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/CHANGELOG.md +17 -0
- package/README.md +3 -3
- package/dist/{chunk-UJIYGGF5.js → chunk-BMIWTDEX.js} +2 -2
- package/dist/{chunk-IXOE6XPI.js → chunk-GY5OOKGO.js} +1 -1
- package/dist/{chunk-4N722U3I.js → chunk-NN5JJFPL.js} +1 -1
- package/dist/{chunk-WDZUIVU7.js → chunk-RC3FA7MX.js} +2 -2
- package/dist/{chunk-4YOTNHWM.js → chunk-VIFRLQO3.js} +1 -1
- package/dist/cli.js +4 -4
- package/dist/demo.js +3 -3
- package/dist/index.js +4 -4
- package/dist/{mcp-server-SYJM77VO.js → mcp-server-SWAWVH77.js} +4 -4
- package/dist/react.css +45 -34
- package/dist/react.js +32 -32
- package/dist/worker.js +2 -2
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
Changed
|
|
6
|
+
|
|
7
|
+
- The chat panel has the agentic-design 0.5 calm look. Cards and messages have soft borders. The text field, buttons, approval prompt, and warnings keep a strong edge. The panel reads the `--agd-*` space, radius, type, control-size, and shadow tokens, each with a fallback. The focus ring is 2px (was 3px). A disabled button has a dashed edge.
|
|
8
|
+
- BREAKING: panel class names use the `agd-` prefix. Your `.aa-*` overrides stop applying without an error. Migration: `.aa-panel` is now `.agd-assistant`, and each part is `.agd-assistant__<part>` (`.aa-button` is `.agd-assistant__button`, `.aa-primary` is `.agd-assistant__primary`). Rename any override in your own CSS. The `--aa-*` variables keep their names. New variables: `--aa-edge` sets the strong edge, `--aa-border` is now the soft border, and `--aa-hover-bg`, `--aa-accent-hover`, and `--aa-shadow` set the hover and shadow. If you override `--aa-bg` or `--aa-accent`, also set `--aa-hover-bg` and `--aa-accent-hover`, so hover text stays readable.
|
|
9
|
+
- The label on every part the assistant makes reads "AI-generated" (it read "Machine-made"). It stays visible and is real text, so a screen reader reads it. The `data-machine-made` attribute does not change.
|
|
10
|
+
|
|
11
|
+
## 0.6.1
|
|
12
|
+
|
|
13
|
+
Patch. No change to the SDK, CLI or HTTP shape.
|
|
14
|
+
|
|
15
|
+
Changed
|
|
16
|
+
|
|
17
|
+
- `agentic-identity` is `^0.8.0`. The lockfile follows. The 0.8.0 additions (`tokens create`, `delegations create`) are not used here.
|
|
18
|
+
- `agentic-design` dev and peer dependency is `^0.5.0`. Version 0.5.0 changes token values only (colors, sizes, radii, shadows). Token names and the `agd-` prefix do not change. This package reads only `--agd-color-*` tokens.
|
|
19
|
+
|
|
3
20
|
## 0.6.0
|
|
4
21
|
|
|
5
22
|
Changed
|
package/README.md
CHANGED
|
@@ -118,11 +118,11 @@ import "agentic-assistant/react.css";
|
|
|
118
118
|
/>;
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
The panel colors are `agentic-design` tokens (`--agd-color-*`), so load `agentic-design/tokens.css` once, as above. The panel then follows your light or dark theme. Without the tokens the panel uses system colors. Set all `--agd-color-*` tokens or none: a partial set can give a pair that fails contrast. To set your own colors, override the `--aa-*` variables on `.aa-
|
|
121
|
+
The panel colors are `agentic-design` tokens (`--agd-color-*`), so load `agentic-design/tokens.css` once, as above. The panel also reads the `--agd-*` space, radius, type, control-size, and shadow tokens from the same file. Each one has a fallback. The panel then follows your light or dark theme. Without the tokens the panel uses system colors, and buttons show no hover change. Set all `--agd-color-*` tokens or none: a partial set can give a pair that fails contrast. To set your own colors, override the `--aa-*` variables on `.agd-assistant`. If you override `--aa-bg` or `--aa-accent`, also set `--aa-hover-bg` and `--aa-accent-hover`.
|
|
122
122
|
|
|
123
|
-
The panel streams the answer, shows each tool call as a card, and shows an approval prompt with the exact arguments. Every message, card, and prompt that the assistant makes carries a visible "
|
|
123
|
+
The panel streams the answer, shows each tool call as a card, and shows an approval prompt with the exact arguments. Every message, card, and prompt that the assistant makes carries a visible "AI-generated" label. Tool output is shown as text and never as HTML. The panel does not hold a model, a key, or a gate. It needs `react` 18 or newer.
|
|
124
124
|
|
|
125
|
-
The look comes from plain CSS variables (`--aa-bg`, `--aa-fg`, `--aa-accent`, and others). Set them on `.
|
|
125
|
+
The look comes from plain CSS variables (`--aa-bg`, `--aa-fg`, `--aa-accent`, and others). Set them on `.agd-assistant`. The sheet loads no font, image, or file from another host. A prompt that the run left open (after Stop or an error) is closed and marked expired. Closing the panel stops the run.
|
|
126
126
|
|
|
127
127
|
## Use the CLI
|
|
128
128
|
|
|
@@ -2,12 +2,12 @@ import {
|
|
|
2
2
|
describeFailure,
|
|
3
3
|
runChat,
|
|
4
4
|
runRemote
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RC3FA7MX.js";
|
|
6
6
|
import {
|
|
7
7
|
VERSION,
|
|
8
8
|
provenanceLabel,
|
|
9
9
|
provenanceMarker
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-VIFRLQO3.js";
|
|
11
11
|
|
|
12
12
|
// src/mcp-server.ts
|
|
13
13
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
AnthropicProvider,
|
|
6
6
|
checkBaseUrl,
|
|
7
7
|
isLoopback
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-GY5OOKGO.js";
|
|
9
9
|
import {
|
|
10
10
|
PrincipalError,
|
|
11
11
|
ProviderError,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
digestCall,
|
|
18
18
|
printable,
|
|
19
19
|
runAssistant
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-VIFRLQO3.js";
|
|
21
21
|
import {
|
|
22
22
|
AssistantApiError,
|
|
23
23
|
createClient
|
package/dist/cli.js
CHANGED
|
@@ -7,15 +7,15 @@ import {
|
|
|
7
7
|
readTextFile,
|
|
8
8
|
runChat,
|
|
9
9
|
runRemote
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-RC3FA7MX.js";
|
|
11
11
|
import "./chunk-HYT732TN.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-GY5OOKGO.js";
|
|
13
13
|
import {
|
|
14
14
|
TOOL_RISKS,
|
|
15
15
|
VERSION,
|
|
16
16
|
printable,
|
|
17
17
|
provenanceLabel
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-VIFRLQO3.js";
|
|
19
19
|
import "./chunk-QTIEDY3V.js";
|
|
20
20
|
|
|
21
21
|
// src/cli.ts
|
|
@@ -327,7 +327,7 @@ async function runCli(argv, io = defaultIo()) {
|
|
|
327
327
|
for (const skip of setup.skipped.slice(0, MAX_SKIPPED_LINES)) io.err(`skipped tool ${oneLine(skip.name, 100)}: ${oneLine(skip.reason, 200)}`);
|
|
328
328
|
if (setup.skipped.length > MAX_SKIPPED_LINES) io.err(`skipped ${setup.skipped.length - MAX_SKIPPED_LINES} more tools`);
|
|
329
329
|
if (parsed.command === "mcp") {
|
|
330
|
-
const { startAssistantMcp } = await import("./mcp-server-
|
|
330
|
+
const { startAssistantMcp } = await import("./mcp-server-SWAWVH77.js");
|
|
331
331
|
await startAssistantMcp(setup, remote, { approve: parsed.allowApprove ?? false });
|
|
332
332
|
return 0;
|
|
333
333
|
}
|
package/dist/demo.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createStaticTokenAuth,
|
|
3
3
|
createWorker
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NN5JJFPL.js";
|
|
5
5
|
import {
|
|
6
6
|
AnthropicProvider
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GY5OOKGO.js";
|
|
8
8
|
import {
|
|
9
9
|
ToolRegistry,
|
|
10
10
|
VERSION,
|
|
11
11
|
hasScope
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-VIFRLQO3.js";
|
|
13
13
|
|
|
14
14
|
// src/demo-page.ts
|
|
15
15
|
var DEMO_CSP = "default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; connect-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'";
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createAssistantMcpServer,
|
|
3
3
|
startAssistantMcp
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BMIWTDEX.js";
|
|
5
5
|
import {
|
|
6
6
|
ConfigError,
|
|
7
7
|
FallbackProvider,
|
|
@@ -10,13 +10,13 @@ import {
|
|
|
10
10
|
connectMcpTools,
|
|
11
11
|
parseTarget,
|
|
12
12
|
runChat
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-RC3FA7MX.js";
|
|
14
14
|
import "./chunk-HYT732TN.js";
|
|
15
15
|
import {
|
|
16
16
|
AnthropicProvider,
|
|
17
17
|
DEFAULT_ANTHROPIC_MODEL,
|
|
18
18
|
PRICING_CHECKED_ON
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-GY5OOKGO.js";
|
|
20
20
|
import {
|
|
21
21
|
ACTIONS,
|
|
22
22
|
DATA_NOTICE,
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
provenanceMarker,
|
|
41
41
|
runAssistant,
|
|
42
42
|
scopeCovers
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-VIFRLQO3.js";
|
|
44
44
|
import "./chunk-QTIEDY3V.js";
|
|
45
45
|
export {
|
|
46
46
|
ACTIONS,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createAssistantMcpServer,
|
|
3
3
|
startAssistantMcp
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-BMIWTDEX.js";
|
|
5
|
+
import "./chunk-RC3FA7MX.js";
|
|
6
6
|
import "./chunk-HYT732TN.js";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-GY5OOKGO.js";
|
|
8
|
+
import "./chunk-VIFRLQO3.js";
|
|
9
9
|
import "./chunk-QTIEDY3V.js";
|
|
10
10
|
export {
|
|
11
11
|
createAssistantMcpServer,
|
package/dist/react.css
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/* Plain CSS variables. They read the agentic-design tokens (--agd-color-*), so load
|
|
2
|
-
agentic-design/tokens.css once on the page. Override --aa-* on .
|
|
2
|
+
agentic-design/tokens.css once on the page. Override --aa-* on .agd-assistant to match your app.
|
|
3
3
|
Without the tokens, each variable falls back to a system color, so focus and borders stay visible.
|
|
4
|
-
|
|
4
|
+
The look is calm. Cards have soft borders. The text field, buttons, approval prompt, and warnings have a strong edge.
|
|
5
|
+
Space, radius, type, control size, and shadow come from the --agd-* tokens. Each has a fallback.
|
|
6
|
+
Each text, edge, and focus pair meets WCAG 2.2 AA contrast in light and dark; src/react/styles.test.ts checks them.
|
|
7
|
+
--aa-border is decoration only and is not checked, so do not use it for an edge people must see.
|
|
5
8
|
No remote fonts or images. */
|
|
6
|
-
.
|
|
9
|
+
.agd-assistant {
|
|
7
10
|
--aa-bg: var(--agd-color-surface, Canvas);
|
|
8
11
|
--aa-fg: var(--agd-color-text, CanvasText);
|
|
9
12
|
--aa-muted: var(--agd-color-text-muted, CanvasText);
|
|
10
|
-
--aa-border: var(--agd-color-border
|
|
13
|
+
--aa-border: var(--agd-color-border, CanvasText);
|
|
14
|
+
--aa-edge: var(--agd-color-border-strong, CanvasText);
|
|
11
15
|
--aa-accent: var(--agd-color-accent, LinkText);
|
|
12
16
|
--aa-accent-fg: var(--agd-color-text-on-accent, Canvas);
|
|
13
17
|
--aa-focus: var(--agd-color-focus, LinkText);
|
|
@@ -17,6 +21,9 @@
|
|
|
17
21
|
--aa-warn-bg: var(--agd-color-warning-subtle, Canvas);
|
|
18
22
|
--aa-warn-fg: var(--agd-color-warning-text, CanvasText);
|
|
19
23
|
--aa-danger: var(--agd-color-danger, LinkText);
|
|
24
|
+
--aa-hover-bg: var(--agd-color-surface-hover, Canvas);
|
|
25
|
+
--aa-accent-hover: var(--agd-color-accent-hover, LinkText);
|
|
26
|
+
--aa-shadow: var(--agd-shadow-raised, none);
|
|
20
27
|
|
|
21
28
|
display: flex;
|
|
22
29
|
flex-direction: column;
|
|
@@ -26,35 +33,39 @@
|
|
|
26
33
|
background: var(--aa-bg);
|
|
27
34
|
color: var(--aa-fg);
|
|
28
35
|
border: 1px solid var(--aa-border);
|
|
29
|
-
|
|
36
|
+
border-radius: var(--agd-radius-lg, 1rem);
|
|
37
|
+
font-family: var(--agd-font-family-sans, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
|
|
30
38
|
font-size: 1rem;
|
|
31
|
-
line-height: 1.
|
|
39
|
+
line-height: var(--agd-line-height-normal, 1.55);
|
|
32
40
|
}
|
|
33
|
-
.
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
.
|
|
37
|
-
.
|
|
38
|
-
.
|
|
39
|
-
.
|
|
40
|
-
.
|
|
41
|
-
.
|
|
42
|
-
.
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
.
|
|
46
|
-
.
|
|
47
|
-
.
|
|
48
|
-
.
|
|
49
|
-
.
|
|
50
|
-
.
|
|
51
|
-
.
|
|
52
|
-
.
|
|
53
|
-
.
|
|
54
|
-
.
|
|
55
|
-
.
|
|
56
|
-
.
|
|
57
|
-
.
|
|
58
|
-
.
|
|
59
|
-
.
|
|
60
|
-
|
|
41
|
+
.agd-assistant *, .agd-assistant *::before, .agd-assistant *::after { box-sizing: border-box; }
|
|
42
|
+
.agd-assistant__header { display: flex; align-items: center; gap: var(--agd-space-2, 0.5rem); padding: var(--agd-space-3, 0.75rem) var(--agd-space-4, 1rem); border-bottom: 1px solid var(--aa-border); }
|
|
43
|
+
.agd-assistant__title { margin: 0; font-size: var(--agd-font-size-lg, 1.125rem); font-weight: 600; }
|
|
44
|
+
.agd-assistant__log { flex: 1; overflow-y: auto; padding: var(--agd-space-4, 1rem); display: flex; flex-direction: column; gap: var(--agd-space-3, 0.75rem); }
|
|
45
|
+
.agd-assistant__empty { color: var(--aa-muted); margin: 0; }
|
|
46
|
+
/* .agd-assistant__user is a hook for host overrides. It has no style of its own. */
|
|
47
|
+
.agd-assistant__msg { padding: var(--agd-space-3, 0.75rem) var(--agd-space-4, 1rem); border: 1px solid var(--aa-border); border-radius: var(--agd-radius-md, 0.5rem); }
|
|
48
|
+
.agd-assistant__assistant { background: var(--aa-card-bg); }
|
|
49
|
+
.agd-assistant__who { margin: 0 0 var(--agd-space-1, 0.25rem); font-size: var(--agd-font-size-sm, 0.875rem); font-weight: 600; color: var(--aa-muted); }
|
|
50
|
+
.agd-assistant__text { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
51
|
+
.agd-assistant__badge { display: inline-block; padding: 0 var(--agd-space-2, 0.5rem); border-radius: var(--agd-radius-full, 9999px); background: var(--aa-machine-bg); color: var(--aa-machine-fg); font-size: var(--agd-font-size-xs, 0.75rem); font-weight: 600; line-height: 1.5rem; border: 1px solid transparent; }
|
|
52
|
+
.agd-assistant__card, .agd-assistant__approval { padding: var(--agd-space-3, 0.75rem) var(--agd-space-4, 1rem); border: 1px solid var(--aa-border); border-radius: var(--agd-radius-md, 0.5rem); background: var(--aa-card-bg); }
|
|
53
|
+
.agd-assistant__card-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--agd-space-2, 0.5rem); }
|
|
54
|
+
.agd-assistant__status { color: var(--aa-muted); font-size: var(--agd-font-size-sm, 0.875rem); font-weight: 600; }
|
|
55
|
+
.agd-assistant__pre { margin: var(--agd-space-1, 0.25rem) 0 0; padding: var(--agd-space-2, 0.5rem); max-height: 12rem; overflow: auto; background: var(--aa-bg); border: 1px solid var(--aa-edge); border-radius: var(--agd-radius-sm, 0.25rem); white-space: pre-wrap; overflow-wrap: anywhere; font-family: var(--agd-font-family-mono, ui-monospace, Menlo, Consolas, monospace); font-size: var(--agd-font-size-sm, 0.875rem); }
|
|
56
|
+
.agd-assistant__approval { background: var(--aa-warn-bg); color: var(--aa-warn-fg); border-width: 2px; border-color: var(--aa-warn-fg); box-shadow: var(--aa-shadow); }
|
|
57
|
+
.agd-assistant__approval-title { margin: 0 0 var(--agd-space-1, 0.25rem); font-size: 1rem; display: flex; align-items: center; gap: var(--agd-space-2, 0.5rem); }
|
|
58
|
+
.agd-assistant__warn { color: var(--aa-danger); background: var(--aa-bg); padding: var(--agd-space-1, 0.25rem) var(--agd-space-2, 0.5rem); border: 2px solid var(--aa-danger); border-radius: var(--agd-radius-sm, 0.25rem); }
|
|
59
|
+
.agd-assistant__notice { margin: 0; padding: var(--agd-space-3, 0.75rem) var(--agd-space-4, 1rem); border: 1px solid var(--aa-border); border-radius: var(--agd-radius-md, 0.5rem); }
|
|
60
|
+
.agd-assistant__composer { display: flex; flex-direction: column; gap: var(--agd-space-2, 0.5rem); padding: var(--agd-space-4, 1rem); border-top: 1px solid var(--aa-border); }
|
|
61
|
+
.agd-assistant__label { font-size: var(--agd-font-size-sm, 0.875rem); font-weight: 600; }
|
|
62
|
+
.agd-assistant__input { width: 100%; resize: vertical; padding: var(--agd-space-2, 0.5rem) var(--agd-space-3, 0.75rem); font: inherit; color: var(--aa-fg); background: var(--aa-bg); border: 1px solid var(--aa-edge); border-radius: var(--agd-radius-md, 0.5rem); }
|
|
63
|
+
.agd-assistant__actions { display: flex; gap: var(--agd-space-2, 0.5rem); margin-top: var(--agd-space-2, 0.5rem); }
|
|
64
|
+
.agd-assistant__composer .agd-assistant__actions { margin-top: 0; }
|
|
65
|
+
.agd-assistant__button { min-height: var(--agd-size-control, 2.25rem); min-width: 2rem; padding: var(--agd-space-1, 0.25rem) var(--agd-space-4, 1rem); font: inherit; font-weight: 600; color: var(--aa-fg); background: var(--aa-bg); border: 1px solid var(--aa-edge); border-radius: var(--agd-radius-md, 0.5rem); cursor: pointer; }
|
|
66
|
+
.agd-assistant__button.agd-assistant__primary { color: var(--aa-accent-fg); background: var(--aa-accent); border-color: var(--aa-accent); }
|
|
67
|
+
.agd-assistant__button:hover:not(:disabled) { background: var(--aa-hover-bg); }
|
|
68
|
+
.agd-assistant__button.agd-assistant__primary:hover:not(:disabled) { background: var(--aa-accent-hover); border-color: var(--aa-accent-hover); }
|
|
69
|
+
.agd-assistant__button:disabled { cursor: not-allowed; opacity: 0.6; border-style: dashed; }
|
|
70
|
+
.agd-assistant :focus-visible { outline: 2px solid var(--aa-focus); outline-offset: 2px; }
|
|
71
|
+
@media (forced-colors: active) { .agd-assistant, .agd-assistant__badge, .agd-assistant__button, .agd-assistant__approval, .agd-assistant__warn, .agd-assistant__msg, .agd-assistant__card { border: 2px solid CanvasText; } }
|
package/dist/react.js
CHANGED
|
@@ -149,7 +149,7 @@ function useAssistant(options) {
|
|
|
149
149
|
// src/react/panel.tsx
|
|
150
150
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
151
151
|
function MachineMade() {
|
|
152
|
-
return /* @__PURE__ */ jsx("span", { className: "
|
|
152
|
+
return /* @__PURE__ */ jsx("span", { className: "agd-assistant__badge", children: "AI-generated" });
|
|
153
153
|
}
|
|
154
154
|
var pretty = (value) => {
|
|
155
155
|
try {
|
|
@@ -167,21 +167,21 @@ var TOOL_STATUS = {
|
|
|
167
167
|
not_run: "Not run"
|
|
168
168
|
};
|
|
169
169
|
function ToolCard({ item }) {
|
|
170
|
-
return /* @__PURE__ */ jsxs("article", { className: "
|
|
171
|
-
/* @__PURE__ */ jsxs("header", { className: "
|
|
170
|
+
return /* @__PURE__ */ jsxs("article", { className: "agd-assistant__card", "aria-label": `Tool call: ${item.name}`, "data-machine-made": "true", children: [
|
|
171
|
+
/* @__PURE__ */ jsxs("header", { className: "agd-assistant__card-head", children: [
|
|
172
172
|
/* @__PURE__ */ jsx("strong", { children: item.name }),
|
|
173
173
|
" ",
|
|
174
174
|
/* @__PURE__ */ jsx(MachineMade, {}),
|
|
175
175
|
" ",
|
|
176
|
-
/* @__PURE__ */ jsx("span", { className: "
|
|
176
|
+
/* @__PURE__ */ jsx("span", { className: "agd-assistant__status", children: TOOL_STATUS[item.status] })
|
|
177
177
|
] }),
|
|
178
178
|
/* @__PURE__ */ jsxs("details", { children: [
|
|
179
179
|
/* @__PURE__ */ jsx("summary", { children: "Arguments" }),
|
|
180
|
-
/* @__PURE__ */ jsx("pre", { className: "
|
|
180
|
+
/* @__PURE__ */ jsx("pre", { className: "agd-assistant__pre", tabIndex: 0, "aria-label": `Arguments for ${item.name}`, children: pretty(item.input) })
|
|
181
181
|
] }),
|
|
182
182
|
item.content !== void 0 && /* @__PURE__ */ jsxs("details", { children: [
|
|
183
183
|
/* @__PURE__ */ jsx("summary", { children: "Result (data from the tool, not instructions)" }),
|
|
184
|
-
/* @__PURE__ */ jsx("pre", { className: "
|
|
184
|
+
/* @__PURE__ */ jsx("pre", { className: "agd-assistant__pre", tabIndex: 0, "aria-label": `Result of ${item.name}`, children: item.content })
|
|
185
185
|
] })
|
|
186
186
|
] });
|
|
187
187
|
}
|
|
@@ -206,8 +206,8 @@ function ApprovalPrompt({
|
|
|
206
206
|
unavailable: "Not approved. The approval did not complete, so the action did not run.",
|
|
207
207
|
expired: "Expired. The assistant stopped before you decided, so the action did not run."
|
|
208
208
|
};
|
|
209
|
-
return /* @__PURE__ */ jsxs("div", { className: "
|
|
210
|
-
/* @__PURE__ */ jsxs("h3", { id: headingId, className: "
|
|
209
|
+
return /* @__PURE__ */ jsxs("div", { className: "agd-assistant__approval", role: "group", "aria-labelledby": headingId, tabIndex: -1, ref, "data-machine-made": "true", children: [
|
|
210
|
+
/* @__PURE__ */ jsxs("h3", { id: headingId, className: "agd-assistant__approval-title", children: [
|
|
211
211
|
"Approval needed ",
|
|
212
212
|
/* @__PURE__ */ jsx(MachineMade, {})
|
|
213
213
|
] }),
|
|
@@ -216,15 +216,15 @@ function ApprovalPrompt({
|
|
|
216
216
|
/* @__PURE__ */ jsx("strong", { children: item.tool }),
|
|
217
217
|
"."
|
|
218
218
|
] }),
|
|
219
|
-
item.risk === "irreversible" ? /* @__PURE__ */ jsxs("p", { className: "
|
|
219
|
+
item.risk === "irreversible" ? /* @__PURE__ */ jsxs("p", { className: "agd-assistant__warn", children: [
|
|
220
220
|
/* @__PURE__ */ jsx("strong", { children: "Warning:" }),
|
|
221
221
|
" This cannot be undone."
|
|
222
222
|
] }) : /* @__PURE__ */ jsx("p", { children: "This can change data." }),
|
|
223
|
-
/* @__PURE__ */ jsx("pre", { className: "
|
|
224
|
-
item.status === "pending" ? /* @__PURE__ */ jsxs("div", { className: "
|
|
225
|
-
/* @__PURE__ */ jsx("button", { type: "button", className: "
|
|
226
|
-
/* @__PURE__ */ jsx("button", { type: "button", className: "
|
|
227
|
-
] }) : /* @__PURE__ */ jsx("p", { className: "
|
|
223
|
+
/* @__PURE__ */ jsx("pre", { className: "agd-assistant__pre", tabIndex: 0, "aria-label": `Exact arguments for ${item.tool}`, children: pretty(item.input) }),
|
|
224
|
+
item.status === "pending" ? /* @__PURE__ */ jsxs("div", { className: "agd-assistant__actions", children: [
|
|
225
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "agd-assistant__button agd-assistant__primary", disabled: item.busy, "aria-label": `Approve ${item.tool}`, onClick: () => answer(true), children: "Approve" }),
|
|
226
|
+
/* @__PURE__ */ jsx("button", { type: "button", className: "agd-assistant__button", disabled: item.busy, "aria-label": `Decline ${item.tool}`, onClick: () => answer(false), children: "Decline" })
|
|
227
|
+
] }) : /* @__PURE__ */ jsx("p", { className: "agd-assistant__status", children: outcome[item.status] })
|
|
228
228
|
] });
|
|
229
229
|
}
|
|
230
230
|
function AssistantPanel({ title = "AI assistant", run, decide }) {
|
|
@@ -250,15 +250,15 @@ function AssistantPanel({ title = "AI assistant", run, decide }) {
|
|
|
250
250
|
submit();
|
|
251
251
|
}
|
|
252
252
|
};
|
|
253
|
-
return /* @__PURE__ */ jsxs("section", { className: "
|
|
254
|
-
/* @__PURE__ */ jsxs("header", { className: "
|
|
255
|
-
/* @__PURE__ */ jsx("h2", { className: "
|
|
253
|
+
return /* @__PURE__ */ jsxs("section", { className: "agd-assistant", "aria-label": title, children: [
|
|
254
|
+
/* @__PURE__ */ jsxs("header", { className: "agd-assistant__header", children: [
|
|
255
|
+
/* @__PURE__ */ jsx("h2", { className: "agd-assistant__title", children: title }),
|
|
256
256
|
/* @__PURE__ */ jsx(MachineMade, {})
|
|
257
257
|
] }),
|
|
258
258
|
/* @__PURE__ */ jsxs(
|
|
259
259
|
"div",
|
|
260
260
|
{
|
|
261
|
-
className: "
|
|
261
|
+
className: "agd-assistant__log",
|
|
262
262
|
role: "log",
|
|
263
263
|
"aria-live": "polite",
|
|
264
264
|
"aria-relevant": "additions text",
|
|
@@ -270,28 +270,28 @@ function AssistantPanel({ title = "AI assistant", run, decide }) {
|
|
|
270
270
|
pinned.current = el.scrollHeight - el.scrollTop - el.clientHeight < 24;
|
|
271
271
|
},
|
|
272
272
|
children: [
|
|
273
|
-
items.length === 0 && /* @__PURE__ */ jsx("p", { className: "
|
|
273
|
+
items.length === 0 && /* @__PURE__ */ jsx("p", { className: "agd-assistant__empty", children: "Ask the assistant to help. It acts only with your permissions, and it asks you before a risky action." }),
|
|
274
274
|
items.map((item) => {
|
|
275
275
|
switch (item.kind) {
|
|
276
276
|
case "user":
|
|
277
|
-
return /* @__PURE__ */ jsxs("div", { className: "
|
|
278
|
-
/* @__PURE__ */ jsx("p", { className: "
|
|
279
|
-
/* @__PURE__ */ jsx("p", { className: "
|
|
277
|
+
return /* @__PURE__ */ jsxs("div", { className: "agd-assistant__msg agd-assistant__user", children: [
|
|
278
|
+
/* @__PURE__ */ jsx("p", { className: "agd-assistant__who", children: "You" }),
|
|
279
|
+
/* @__PURE__ */ jsx("p", { className: "agd-assistant__text", children: item.text })
|
|
280
280
|
] }, item.id);
|
|
281
281
|
case "assistant":
|
|
282
|
-
return /* @__PURE__ */ jsxs("div", { className: "
|
|
283
|
-
/* @__PURE__ */ jsxs("p", { className: "
|
|
282
|
+
return /* @__PURE__ */ jsxs("div", { className: "agd-assistant__msg agd-assistant__assistant", "data-machine-made": "true", "aria-busy": item.streaming, children: [
|
|
283
|
+
/* @__PURE__ */ jsxs("p", { className: "agd-assistant__who", children: [
|
|
284
284
|
"Assistant ",
|
|
285
285
|
/* @__PURE__ */ jsx(MachineMade, {})
|
|
286
286
|
] }),
|
|
287
|
-
/* @__PURE__ */ jsx("p", { className: "
|
|
287
|
+
/* @__PURE__ */ jsx("p", { className: "agd-assistant__text", children: item.text })
|
|
288
288
|
] }, item.id);
|
|
289
289
|
case "tool":
|
|
290
290
|
return /* @__PURE__ */ jsx(ToolCard, { item }, item.id);
|
|
291
291
|
case "approval":
|
|
292
292
|
return /* @__PURE__ */ jsx(ApprovalPrompt, { item, decide: decideRequest, focusComposer: () => input.current?.focus() }, item.id);
|
|
293
293
|
case "notice":
|
|
294
|
-
return /* @__PURE__ */ jsxs("p", { className: "
|
|
294
|
+
return /* @__PURE__ */ jsxs("p", { className: "agd-assistant__notice", children: [
|
|
295
295
|
/* @__PURE__ */ jsx("strong", { children: "Notice:" }),
|
|
296
296
|
" ",
|
|
297
297
|
item.text
|
|
@@ -304,17 +304,17 @@ function AssistantPanel({ title = "AI assistant", run, decide }) {
|
|
|
304
304
|
/* @__PURE__ */ jsxs(
|
|
305
305
|
"form",
|
|
306
306
|
{
|
|
307
|
-
className: "
|
|
307
|
+
className: "agd-assistant__composer",
|
|
308
308
|
onSubmit: (event) => {
|
|
309
309
|
event.preventDefault();
|
|
310
310
|
submit();
|
|
311
311
|
},
|
|
312
312
|
children: [
|
|
313
|
-
/* @__PURE__ */ jsx("label", { htmlFor: inputId, className: "
|
|
314
|
-
/* @__PURE__ */ jsx("textarea", { id: inputId, className: "
|
|
315
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
316
|
-
/* @__PURE__ */ jsx("button", { type: "submit", className: "
|
|
317
|
-
running && /* @__PURE__ */ jsx("button", { type: "button", className: "
|
|
313
|
+
/* @__PURE__ */ jsx("label", { htmlFor: inputId, className: "agd-assistant__label", children: "Message the assistant" }),
|
|
314
|
+
/* @__PURE__ */ jsx("textarea", { id: inputId, className: "agd-assistant__input", rows: 3, value: draft, ref: input, onChange: (event) => setDraft(event.target.value), onKeyDown }),
|
|
315
|
+
/* @__PURE__ */ jsxs("div", { className: "agd-assistant__actions", children: [
|
|
316
|
+
/* @__PURE__ */ jsx("button", { type: "submit", className: "agd-assistant__button agd-assistant__primary", disabled: running || draft.trim() === "", children: "Send" }),
|
|
317
|
+
running && /* @__PURE__ */ jsx("button", { type: "button", className: "agd-assistant__button", onClick: stop, children: "Stop" })
|
|
318
318
|
] })
|
|
319
319
|
]
|
|
320
320
|
}
|
package/dist/worker.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-assistant",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "An AI assistant that acts inside your apps with the user's own permissions.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"assistant",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"dependencies": {
|
|
75
75
|
"@anthropic-ai/sdk": "^1.3.0",
|
|
76
76
|
"@modelcontextprotocol/sdk": "^1.32.2",
|
|
77
|
-
"agentic-identity": "^0.
|
|
77
|
+
"agentic-identity": "^0.8.0",
|
|
78
78
|
"ajv": "^8.20.0"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"@types/node": "^22.0.0",
|
|
85
85
|
"@types/react": "^19.3.0",
|
|
86
86
|
"@types/react-dom": "^19.3.0",
|
|
87
|
-
"agentic-design": "^0.
|
|
87
|
+
"agentic-design": "^0.5.0",
|
|
88
88
|
"jsdom": "^30.1.3",
|
|
89
89
|
"react": "^19.3.1",
|
|
90
90
|
"react-dom": "^19.3.1",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"wrangler": "^4.155.0"
|
|
95
95
|
},
|
|
96
96
|
"peerDependencies": {
|
|
97
|
-
"agentic-design": "^0.
|
|
97
|
+
"agentic-design": "^0.5.0",
|
|
98
98
|
"react": ">=18"
|
|
99
99
|
},
|
|
100
100
|
"peerDependenciesMeta": {
|