@songsid/agend 2.2.0 → 2.3.0-beta.2
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/dist/agent-cli.js +248 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +2 -0
- package/dist/agent-endpoint.js +25 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-file-read.d.ts +35 -0
- package/dist/agent-file-read.js +144 -0
- package/dist/agent-file-read.js.map +1 -0
- package/dist/agent-whats-new.js +8 -0
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/atomic-write.js +9 -1
- package/dist/atomic-write.js.map +1 -1
- package/dist/auth-api.js +17 -0
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/antigravity.js +3 -3
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.js +5 -1
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/launch-effort.js +1 -1
- package/dist/backend/launch-effort.js.map +1 -1
- package/dist/backend/muse.js +10 -2
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +8 -0
- package/dist/backend/types.js +10 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/cache-analysis.d.ts +47 -1
- package/dist/cache-analysis.js +68 -8
- package/dist/cache-analysis.js.map +1 -1
- package/dist/cache-report-tool.d.ts +17 -0
- package/dist/cache-report-tool.js +40 -0
- package/dist/cache-report-tool.js.map +1 -0
- package/dist/cache-service.d.ts +15 -0
- package/dist/cache-service.js +26 -1
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +2 -0
- package/dist/channel/adapters/discord.js +17 -2
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +8 -1
- package/dist/channel/adapters/telegram.js +74 -4
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-tools.js +36 -0
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/types.d.ts +15 -0
- package/dist/cli.js +7 -3
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +22 -2
- package/dist/config-validator.js.map +1 -1
- package/dist/daemon.js +244 -20
- package/dist/daemon.js.map +1 -1
- package/dist/fleet-context.d.ts +5 -0
- package/dist/fleet-manager.d.ts +92 -0
- package/dist/fleet-manager.js +410 -29
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +7 -0
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +367 -0
- package/dist/instance-avatar.js +3 -0
- package/dist/instance-avatar.js.map +1 -1
- package/dist/instance-config-impact.js +3 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.js +9 -4
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/needs-you-hub.d.ts +4 -0
- package/dist/needs-you-hub.js +31 -6
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you.d.ts +1 -13
- package/dist/needs-you.js +3 -37
- package/dist/needs-you.js.map +1 -1
- package/dist/outbound-handlers.d.ts +7 -0
- package/dist/outbound-handlers.js +65 -10
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +74 -0
- package/dist/outbound-schemas.js +56 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-web-gateway.js +14 -0
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/repo-worktree-guard.d.ts +36 -0
- package/dist/repo-worktree-guard.js +143 -0
- package/dist/repo-worktree-guard.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +70 -1
- package/dist/scheduler/scheduler.js +256 -17
- package/dist/scheduler/scheduler.js.map +1 -1
- package/dist/service-installer.d.ts +2 -1
- package/dist/service-installer.js +18 -3
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +74 -1
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +8 -0
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +16 -2
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +5 -0
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/tool-permissions.d.ts +5 -0
- package/dist/tool-permissions.js +61 -2
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +10 -6
- package/dist/topic-commands.js +21 -17
- package/dist/topic-commands.js.map +1 -1
- package/dist/topic-link.d.ts +128 -0
- package/dist/topic-link.js +269 -0
- package/dist/topic-link.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/ui/app-effects.js +187 -0
- package/dist/ui/chat-effect-posters.js +42 -0
- package/dist/ui/chat-effects.js +72 -0
- package/dist/ui/chat-live-replies.js +58 -0
- package/dist/ui/chat-render.js +4 -4
- package/dist/ui/chat-store.js +9 -3
- package/dist/ui/chat-strings.js +15 -0
- package/dist/ui/chat-thread.js +47 -21
- package/dist/ui/chat-tour.js +1 -1
- package/dist/ui/effect-trial-controller.js +119 -0
- package/dist/ui/effect-trial-offer.js +31 -0
- package/dist/ui/effect-trial-panel.js +37 -0
- package/dist/ui/fleet-cache.js +23 -1
- package/dist/ui/image-lightbox.js +1 -1
- package/dist/ui/panel-chat.js +85 -17
- package/dist/ui/panel-details.js +18 -5
- package/dist/ui/panel-fleet.js +3 -3
- package/dist/ui/panel-log.js +6 -6
- package/dist/ui/panel-needs.js +3 -3
- package/dist/ui/panel-settings.js +8 -5
- package/dist/ui/preview-panel.js +25 -9
- package/dist/ui/settings-appearance.js +325 -0
- package/dist/ui/settings-effects.js +201 -0
- package/dist/ui/settings-mods.js +257 -0
- package/dist/ui/settings-owner-effects.js +80 -0
- package/dist/ui/settings-strings.js +245 -0
- package/dist/ui/shared/agend-auth.js +27 -3
- package/dist/ui/shared/agent-widget.js +248 -0
- package/dist/ui/shared/app-i18n.js +2 -0
- package/dist/ui/shared/app-prefs.js +30 -10
- package/dist/ui/shared/app-route.js +23 -1
- package/dist/ui/shared/app-session.js +1 -1
- package/dist/ui/shared/app-shell.js +29 -16
- package/dist/ui/shared/app-store.js +2 -0
- package/dist/ui/shared/app-stream.js +12 -7
- package/dist/ui/shared/app-themes.js +188 -0
- package/dist/ui/shared/app.css +225 -3
- package/dist/ui/shared/app.js +6 -0
- package/dist/ui/shared/card-strings.js +28 -0
- package/dist/ui/shared/effect-app-runtime.js +248 -0
- package/dist/ui/shared/effect-baseline.js +64 -0
- package/dist/ui/shared/effect-chat-runtime.js +154 -0
- package/dist/ui/shared/effect-cursor.js +125 -0
- package/dist/ui/shared/effect-frame.js +127 -0
- package/dist/ui/shared/effect-geometry.js +122 -0
- package/dist/ui/shared/effect-host-style.js +10 -0
- package/dist/ui/shared/effect-owner-regions.js +74 -0
- package/dist/ui/shared/effect-owner-source.js +115 -0
- package/dist/ui/shared/effect-policy.js +137 -0
- package/dist/ui/shared/effect-poster-reader.js +98 -0
- package/dist/ui/shared/effect-posters.js +117 -0
- package/dist/ui/shared/effect-profiler.js +162 -0
- package/dist/ui/shared/effect-profiles.js +65 -0
- package/dist/ui/shared/effect-registry.js +496 -0
- package/dist/ui/shared/effect-runtime-loader.js +234 -0
- package/dist/ui/shared/effect-safety.js +153 -0
- package/dist/ui/shared/effect-stock-snapshot.js +34 -0
- package/dist/ui/shared/effect-stock-trust.js +165 -0
- package/dist/ui/shared/effect-trial-source.js +103 -0
- package/dist/ui/shared/effect-trial-stage.js +147 -0
- package/dist/ui/shared/header-tools.js +1 -1
- package/dist/ui/shared/identity-card.js +202 -0
- package/dist/ui/shared/identity-color.js +261 -0
- package/dist/ui/shared/instance-nav.js +37 -19
- package/dist/ui/shared/owner-css.js +221 -0
- package/dist/ui/shared/owner-effect-prefs.js +117 -0
- package/dist/ui/shared/panel-view.js +81 -8
- package/dist/ui/shared/signin.js +2 -0
- package/dist/ui/shared/ui-dialog.js +1 -1
- package/dist/ui/shared/ui-icons.js +2 -0
- package/dist/ui/shared/ui-menu.js +1 -1
- package/dist/ui/shared/ui-toast.js +1 -1
- package/dist/ui/shared/usage-dialog.js +14 -2
- package/dist/ui/shared/view-strings.js +36 -2
- package/dist/ui/signin.html +1 -0
- package/dist/usage/providers.d.ts +3 -0
- package/dist/usage/providers.js +4 -3
- package/dist/usage/providers.js.map +1 -1
- package/dist/view-api.d.ts +29 -0
- package/dist/view-api.js +188 -8
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.d.ts +42 -0
- package/dist/web-api.js +898 -36
- package/dist/web-api.js.map +1 -1
- package/dist/web-appearance-limits.d.ts +82 -0
- package/dist/web-appearance-limits.js +83 -0
- package/dist/web-appearance-limits.js.map +1 -0
- package/dist/web-appearance-policy.d.ts +66 -0
- package/dist/web-appearance-policy.js +94 -0
- package/dist/web-appearance-policy.js.map +1 -0
- package/dist/web-appearance-tools.d.ts +50 -0
- package/dist/web-appearance-tools.js +105 -0
- package/dist/web-appearance-tools.js.map +1 -0
- package/dist/web-appearance-view.d.ts +99 -0
- package/dist/web-appearance-view.js +163 -0
- package/dist/web-appearance-view.js.map +1 -0
- package/dist/web-appearance.d.ts +79 -0
- package/dist/web-appearance.js +298 -0
- package/dist/web-appearance.js.map +1 -0
- package/dist/web-asset-parts.d.ts +93 -0
- package/dist/web-asset-parts.js +133 -0
- package/dist/web-asset-parts.js.map +1 -0
- package/dist/web-auth.js +17 -1
- package/dist/web-auth.js.map +1 -1
- package/dist/web-card.d.ts +96 -0
- package/dist/web-card.js +232 -0
- package/dist/web-card.js.map +1 -0
- package/dist/web-chat-history.d.ts +13 -0
- package/dist/web-chat-history.js +23 -2
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-effect-bundle.d.ts +28 -0
- package/dist/web-effect-bundle.js +126 -0
- package/dist/web-effect-bundle.js.map +1 -0
- package/dist/web-effect-canonical.d.ts +8 -0
- package/dist/web-effect-canonical.js +27 -0
- package/dist/web-effect-canonical.js.map +1 -0
- package/dist/web-effect-library.d.ts +114 -0
- package/dist/web-effect-library.js +530 -0
- package/dist/web-effect-library.js.map +1 -0
- package/dist/web-effect-poster.d.ts +8 -0
- package/dist/web-effect-poster.js +52 -0
- package/dist/web-effect-poster.js.map +1 -0
- package/dist/web-effect-profiles.d.ts +118 -0
- package/dist/web-effect-profiles.js +180 -0
- package/dist/web-effect-profiles.js.map +1 -0
- package/dist/web-effect-service.d.ts +86 -0
- package/dist/web-effect-service.js +314 -0
- package/dist/web-effect-service.js.map +1 -0
- package/dist/web-effect-tools.d.ts +47 -0
- package/dist/web-effect-tools.js +129 -0
- package/dist/web-effect-tools.js.map +1 -0
- package/dist/web-effect-trials.d.ts +86 -0
- package/dist/web-effect-trials.js +204 -0
- package/dist/web-effect-trials.js.map +1 -0
- package/dist/web-effect-upload.d.ts +27 -0
- package/dist/web-effect-upload.js +185 -0
- package/dist/web-effect-upload.js.map +1 -0
- package/dist/web-effect-worker.d.ts +8 -0
- package/dist/web-effect-worker.js +170 -0
- package/dist/web-effect-worker.js.map +1 -0
- package/dist/web-effect.d.ts +103 -0
- package/dist/web-effect.js +153 -0
- package/dist/web-effect.js.map +1 -0
- package/dist/web-identity-color.d.ts +87 -0
- package/dist/web-identity-color.js +209 -0
- package/dist/web-identity-color.js.map +1 -0
- package/dist/web-identity-palette.d.ts +113 -0
- package/dist/web-identity-palette.js +84 -0
- package/dist/web-identity-palette.js.map +1 -0
- package/dist/web-image-meta.d.ts +25 -0
- package/dist/web-image-meta.js +200 -0
- package/dist/web-image-meta.js.map +1 -0
- package/dist/web-mod-agent.d.ts +50 -0
- package/dist/web-mod-agent.js +205 -0
- package/dist/web-mod-agent.js.map +1 -0
- package/dist/web-mod-bundle.d.ts +149 -0
- package/dist/web-mod-bundle.js +470 -0
- package/dist/web-mod-bundle.js.map +1 -0
- package/dist/web-mod-export.d.ts +59 -0
- package/dist/web-mod-export.js +79 -0
- package/dist/web-mod-export.js.map +1 -0
- package/dist/web-mod-store.d.ts +283 -0
- package/dist/web-mod-store.js +625 -0
- package/dist/web-mod-store.js.map +1 -0
- package/dist/web-org.d.ts +3 -3
- package/dist/web-org.js +11 -17
- package/dist/web-org.js.map +1 -1
- package/dist/web-owner-css-store.d.ts +180 -0
- package/dist/web-owner-css-store.js +384 -0
- package/dist/web-owner-css-store.js.map +1 -0
- package/dist/web-owner-css.d.ts +58 -0
- package/dist/web-owner-css.js +552 -0
- package/dist/web-owner-css.js.map +1 -0
- package/dist/web-prefs.d.ts +48 -0
- package/dist/web-prefs.js +209 -33
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +9 -1
- package/dist/web-preview.js +24 -7
- package/dist/web-preview.js.map +1 -1
- package/dist/web-settings-patch.d.ts +18 -0
- package/dist/web-settings-patch.js +51 -0
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-shell-routes.d.ts +1 -1
- package/dist/web-shell-routes.js +1 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-theme-store.d.ts +218 -0
- package/dist/web-theme-store.js +516 -0
- package/dist/web-theme-store.js.map +1 -0
- package/dist/web-theme.d.ts +121 -0
- package/dist/web-theme.js +407 -0
- package/dist/web-theme.js.map +1 -0
- package/dist/web-widget.d.ts +72 -0
- package/dist/web-widget.js +245 -0
- package/dist/web-widget.js.map +1 -0
- package/package.json +1 -1
- package/templates/systemd.service.ejs +8 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1958: the identity colour's palettes and placements — no imports, so the theme's schema (web-theme.ts) and the
|
|
3
|
+
* colour's resolution (web-identity-color.ts) both read them without a cycle.
|
|
4
|
+
*
|
|
5
|
+
* - The presets a person (or an agent) picks from: 12 clear colours.
|
|
6
|
+
* - The automatic colours (the user's decision 4): a handful of soft, low-saturation colours like the default avatar
|
|
7
|
+
* colours of Telegram and Discord, chosen by a stable hash of the name. Two instances may share one.
|
|
8
|
+
* Every value reads at 4.5:1 or better on the page's and the sidebar's background, in its mode (a test pins it).
|
|
9
|
+
*/
|
|
10
|
+
/** The presets: each one's value on the light and on the dark page. */
|
|
11
|
+
export declare const IDENTITY_PALETTE: readonly [{
|
|
12
|
+
readonly id: "red";
|
|
13
|
+
readonly light: "#cf222e";
|
|
14
|
+
readonly dark: "#ff7b72";
|
|
15
|
+
}, {
|
|
16
|
+
readonly id: "orange";
|
|
17
|
+
readonly light: "#bc4c00";
|
|
18
|
+
readonly dark: "#ffa657";
|
|
19
|
+
}, {
|
|
20
|
+
readonly id: "amber";
|
|
21
|
+
readonly light: "#8a5d00";
|
|
22
|
+
readonly dark: "#e3b341";
|
|
23
|
+
}, {
|
|
24
|
+
readonly id: "lime";
|
|
25
|
+
readonly light: "#4d7c0f";
|
|
26
|
+
readonly dark: "#a3e635";
|
|
27
|
+
}, {
|
|
28
|
+
readonly id: "green";
|
|
29
|
+
readonly light: "#1a7f37";
|
|
30
|
+
readonly dark: "#56d364";
|
|
31
|
+
}, {
|
|
32
|
+
readonly id: "teal";
|
|
33
|
+
readonly light: "#0f766e";
|
|
34
|
+
readonly dark: "#2dd4bf";
|
|
35
|
+
}, {
|
|
36
|
+
readonly id: "cyan";
|
|
37
|
+
readonly light: "#0e7490";
|
|
38
|
+
readonly dark: "#22d3ee";
|
|
39
|
+
}, {
|
|
40
|
+
readonly id: "blue";
|
|
41
|
+
readonly light: "#0a62c2";
|
|
42
|
+
readonly dark: "#7ab7ff";
|
|
43
|
+
}, {
|
|
44
|
+
readonly id: "indigo";
|
|
45
|
+
readonly light: "#4f46e5";
|
|
46
|
+
readonly dark: "#a5b4fc";
|
|
47
|
+
}, {
|
|
48
|
+
readonly id: "violet";
|
|
49
|
+
readonly light: "#8250df";
|
|
50
|
+
readonly dark: "#d2a8ff";
|
|
51
|
+
}, {
|
|
52
|
+
readonly id: "pink";
|
|
53
|
+
readonly light: "#bf3989";
|
|
54
|
+
readonly dark: "#f778ba";
|
|
55
|
+
}, {
|
|
56
|
+
readonly id: "slate";
|
|
57
|
+
readonly light: "#57606a";
|
|
58
|
+
readonly dark: "#b1bac4";
|
|
59
|
+
}];
|
|
60
|
+
/** The automatic colours: soft, and few on purpose (duplicates are fine). */
|
|
61
|
+
export declare const AUTO_PALETTE: readonly [{
|
|
62
|
+
readonly id: "sand";
|
|
63
|
+
readonly light: "#8a6d3b";
|
|
64
|
+
readonly dark: "#d4b98a";
|
|
65
|
+
}, {
|
|
66
|
+
readonly id: "clay";
|
|
67
|
+
readonly light: "#9c5a4a";
|
|
68
|
+
readonly dark: "#d9a294";
|
|
69
|
+
}, {
|
|
70
|
+
readonly id: "rose";
|
|
71
|
+
readonly light: "#9b4f6a";
|
|
72
|
+
readonly dark: "#d99ab0";
|
|
73
|
+
}, {
|
|
74
|
+
readonly id: "plum";
|
|
75
|
+
readonly light: "#7a5a8c";
|
|
76
|
+
readonly dark: "#c3a6d6";
|
|
77
|
+
}, {
|
|
78
|
+
readonly id: "dusk";
|
|
79
|
+
readonly light: "#5a628f";
|
|
80
|
+
readonly dark: "#a9b0db";
|
|
81
|
+
}, {
|
|
82
|
+
readonly id: "sea";
|
|
83
|
+
readonly light: "#3f7286";
|
|
84
|
+
readonly dark: "#92c2d4";
|
|
85
|
+
}, {
|
|
86
|
+
readonly id: "moss";
|
|
87
|
+
readonly light: "#5b7340";
|
|
88
|
+
readonly dark: "#a9c48d";
|
|
89
|
+
}, {
|
|
90
|
+
readonly id: "slate";
|
|
91
|
+
readonly light: "#5f6b78";
|
|
92
|
+
readonly dark: "#aeb8c4";
|
|
93
|
+
}];
|
|
94
|
+
export type PresetId = (typeof IDENTITY_PALETTE)[number]["id"];
|
|
95
|
+
export type AutoId = (typeof AUTO_PALETTE)[number]["id"];
|
|
96
|
+
/** What is stored and sent: a preset, an automatic colour (never stored), or a custom colour. */
|
|
97
|
+
export type IdentityColor = `preset:${PresetId}` | `auto:${AutoId}` | `#${string}`;
|
|
98
|
+
/**
|
|
99
|
+
* A colour as a person or an agent gives it — a preset's id ("blue", or "preset:blue") or a hex colour ("#abc",
|
|
100
|
+
* "#aabbcc", any case) — in the form it is kept; null for anything else (an automatic colour is never picked).
|
|
101
|
+
*/
|
|
102
|
+
export declare function canonicalIdentityColor(v: unknown): IdentityColor | null;
|
|
103
|
+
/** The colour drawn for `c` on a page in `mode`: a preset's or an automatic colour's value for that mode, a custom one as it is. */
|
|
104
|
+
export declare function identityColorValue(c: IdentityColor, mode: "light" | "dark"): string;
|
|
105
|
+
/** The automatic colour: one of AUTO_PALETTE, chosen by the name (32-bit FNV-1a over its UTF-8 bytes), the same on every load. */
|
|
106
|
+
export declare function autoIdentityColor(name: string): IdentityColor;
|
|
107
|
+
/** Where the colour shows (the user's decision 2): the name, a bar at the row's left edge, the avatar's ring. */
|
|
108
|
+
export declare const PLACEMENTS: readonly ["name", "bar", "ring"];
|
|
109
|
+
export type Placement = (typeof PLACEMENTS)[number];
|
|
110
|
+
/** The host's default where nobody chose (decision 1): ring and bar. */
|
|
111
|
+
export declare const DEFAULT_PLACEMENTS: readonly Placement[];
|
|
112
|
+
/** A set of places, in PLACEMENTS order, no repeats; [] is "nowhere". null for anything else. */
|
|
113
|
+
export declare function canonicalPlacements(v: unknown): Placement[] | null;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1958: the identity colour's palettes and placements — no imports, so the theme's schema (web-theme.ts) and the
|
|
3
|
+
* colour's resolution (web-identity-color.ts) both read them without a cycle.
|
|
4
|
+
*
|
|
5
|
+
* - The presets a person (or an agent) picks from: 12 clear colours.
|
|
6
|
+
* - The automatic colours (the user's decision 4): a handful of soft, low-saturation colours like the default avatar
|
|
7
|
+
* colours of Telegram and Discord, chosen by a stable hash of the name. Two instances may share one.
|
|
8
|
+
* Every value reads at 4.5:1 or better on the page's and the sidebar's background, in its mode (a test pins it).
|
|
9
|
+
*/
|
|
10
|
+
/** The presets: each one's value on the light and on the dark page. */
|
|
11
|
+
export const IDENTITY_PALETTE = [
|
|
12
|
+
{ id: "red", light: "#cf222e", dark: "#ff7b72" },
|
|
13
|
+
{ id: "orange", light: "#bc4c00", dark: "#ffa657" },
|
|
14
|
+
{ id: "amber", light: "#8a5d00", dark: "#e3b341" },
|
|
15
|
+
{ id: "lime", light: "#4d7c0f", dark: "#a3e635" },
|
|
16
|
+
{ id: "green", light: "#1a7f37", dark: "#56d364" },
|
|
17
|
+
{ id: "teal", light: "#0f766e", dark: "#2dd4bf" },
|
|
18
|
+
{ id: "cyan", light: "#0e7490", dark: "#22d3ee" },
|
|
19
|
+
{ id: "blue", light: "#0a62c2", dark: "#7ab7ff" },
|
|
20
|
+
{ id: "indigo", light: "#4f46e5", dark: "#a5b4fc" },
|
|
21
|
+
{ id: "violet", light: "#8250df", dark: "#d2a8ff" },
|
|
22
|
+
{ id: "pink", light: "#bf3989", dark: "#f778ba" },
|
|
23
|
+
{ id: "slate", light: "#57606a", dark: "#b1bac4" },
|
|
24
|
+
];
|
|
25
|
+
/** The automatic colours: soft, and few on purpose (duplicates are fine). */
|
|
26
|
+
export const AUTO_PALETTE = [
|
|
27
|
+
{ id: "sand", light: "#8a6d3b", dark: "#d4b98a" },
|
|
28
|
+
{ id: "clay", light: "#9c5a4a", dark: "#d9a294" },
|
|
29
|
+
{ id: "rose", light: "#9b4f6a", dark: "#d99ab0" },
|
|
30
|
+
{ id: "plum", light: "#7a5a8c", dark: "#c3a6d6" },
|
|
31
|
+
{ id: "dusk", light: "#5a628f", dark: "#a9b0db" },
|
|
32
|
+
{ id: "sea", light: "#3f7286", dark: "#92c2d4" },
|
|
33
|
+
{ id: "moss", light: "#5b7340", dark: "#a9c48d" },
|
|
34
|
+
{ id: "slate", light: "#5f6b78", dark: "#aeb8c4" },
|
|
35
|
+
];
|
|
36
|
+
const PRESETS = new Map(IDENTITY_PALETTE.map(p => [p.id, p]));
|
|
37
|
+
const AUTOS = new Map(AUTO_PALETTE.map(p => [p.id, p]));
|
|
38
|
+
/** "#rgb" | "#rrggbb", any case → "#rrggbb" lowercase (web-theme.ts canonicalColor's rule); anything else → null. */
|
|
39
|
+
function hexColor(v) {
|
|
40
|
+
const m = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.exec(v);
|
|
41
|
+
if (!m)
|
|
42
|
+
return null;
|
|
43
|
+
const h = m[1].toLowerCase();
|
|
44
|
+
return h.length === 3 ? `#${h[0]}${h[0]}${h[1]}${h[1]}${h[2]}${h[2]}` : `#${h}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A colour as a person or an agent gives it — a preset's id ("blue", or "preset:blue") or a hex colour ("#abc",
|
|
48
|
+
* "#aabbcc", any case) — in the form it is kept; null for anything else (an automatic colour is never picked).
|
|
49
|
+
*/
|
|
50
|
+
export function canonicalIdentityColor(v) {
|
|
51
|
+
if (typeof v !== "string")
|
|
52
|
+
return null;
|
|
53
|
+
const id = v.startsWith("preset:") ? v.slice("preset:".length) : v;
|
|
54
|
+
if (PRESETS.has(id))
|
|
55
|
+
return `preset:${id}`;
|
|
56
|
+
return hexColor(v);
|
|
57
|
+
}
|
|
58
|
+
/** The colour drawn for `c` on a page in `mode`: a preset's or an automatic colour's value for that mode, a custom one as it is. */
|
|
59
|
+
export function identityColorValue(c, mode) {
|
|
60
|
+
const p = c.startsWith("preset:") ? PRESETS.get(c.slice(7)) : c.startsWith("auto:") ? AUTOS.get(c.slice(5)) : undefined;
|
|
61
|
+
return p ? p[mode] : c;
|
|
62
|
+
}
|
|
63
|
+
/** The automatic colour: one of AUTO_PALETTE, chosen by the name (32-bit FNV-1a over its UTF-8 bytes), the same on every load. */
|
|
64
|
+
export function autoIdentityColor(name) {
|
|
65
|
+
let h = 0x811c9dc5;
|
|
66
|
+
for (const unit of new TextEncoder().encode(name)) {
|
|
67
|
+
h ^= unit;
|
|
68
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
69
|
+
}
|
|
70
|
+
return `auto:${AUTO_PALETTE[h % AUTO_PALETTE.length].id}`;
|
|
71
|
+
}
|
|
72
|
+
/** Where the colour shows (the user's decision 2): the name, a bar at the row's left edge, the avatar's ring. */
|
|
73
|
+
export const PLACEMENTS = ["name", "bar", "ring"];
|
|
74
|
+
/** The host's default where nobody chose (decision 1): ring and bar. */
|
|
75
|
+
export const DEFAULT_PLACEMENTS = ["bar", "ring"];
|
|
76
|
+
/** A set of places, in PLACEMENTS order, no repeats; [] is "nowhere". null for anything else. */
|
|
77
|
+
export function canonicalPlacements(v) {
|
|
78
|
+
if (!Array.isArray(v) || v.length > PLACEMENTS.length || !v.every(p => PLACEMENTS.includes(p)))
|
|
79
|
+
return null;
|
|
80
|
+
if (new Set(v).size !== v.length)
|
|
81
|
+
return null;
|
|
82
|
+
return PLACEMENTS.filter(p => v.includes(p));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=web-identity-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-identity-palette.js","sourceRoot":"","sources":["../src/web-identity-palette.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1629 r4 §1: what an uploaded picture or font is, how large it is, and the same file without its metadata — all
|
|
3
|
+
* from the bytes, never decoding an image. Used by owner-CSS assets (r4 §3) and the identity card (r4 §1).
|
|
4
|
+
*
|
|
5
|
+
* Metadata is removed by byte surgery:
|
|
6
|
+
* - JPEG: the APP1–APP15 and COM segments go (EXIF, GPS, XMP, ICC, comments) wherever they are — before the first
|
|
7
|
+
* scan or between the scans of a progressive file; APP0 (JFIF) and the image stay. Every scan's entropy-coded data
|
|
8
|
+
* is walked to its end, and the file must end with EOI (what follows it is dropped).
|
|
9
|
+
* - PNG: the tEXt, zTXt, iTXt, eXIf and tIME chunks go.
|
|
10
|
+
* - WebP: the EXIF and "XMP " chunks go, and VP8X's EXIF/XMP flags are cleared to match. A file shorter than its
|
|
11
|
+
* RIFF header says is refused; bytes after the RIFF end are dropped.
|
|
12
|
+
* A file this module cannot walk to its end is refused, never passed through.
|
|
13
|
+
*/
|
|
14
|
+
export type MediaKind = "png" | "jpeg" | "webp" | "gif" | "woff2";
|
|
15
|
+
export declare const MEDIA_MIME: Record<MediaKind, string>;
|
|
16
|
+
export declare const MEDIA_EXT: Record<MediaKind, string>;
|
|
17
|
+
/** The kind by magic bytes, or null. */
|
|
18
|
+
export declare function sniffMedia(b: Uint8Array): MediaKind | null;
|
|
19
|
+
/** Width and height from the headers, or null when the file does not say (or is not an image). */
|
|
20
|
+
export declare function imageSize(b: Uint8Array, kind: MediaKind): {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
} | null;
|
|
24
|
+
/** The file without its metadata (see the module comment), or null when it cannot be walked safely. */
|
|
25
|
+
export declare function stripMetadata(b: Uint8Array, kind: MediaKind): Uint8Array | null;
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1629 r4 §1: what an uploaded picture or font is, how large it is, and the same file without its metadata — all
|
|
3
|
+
* from the bytes, never decoding an image. Used by owner-CSS assets (r4 §3) and the identity card (r4 §1).
|
|
4
|
+
*
|
|
5
|
+
* Metadata is removed by byte surgery:
|
|
6
|
+
* - JPEG: the APP1–APP15 and COM segments go (EXIF, GPS, XMP, ICC, comments) wherever they are — before the first
|
|
7
|
+
* scan or between the scans of a progressive file; APP0 (JFIF) and the image stay. Every scan's entropy-coded data
|
|
8
|
+
* is walked to its end, and the file must end with EOI (what follows it is dropped).
|
|
9
|
+
* - PNG: the tEXt, zTXt, iTXt, eXIf and tIME chunks go.
|
|
10
|
+
* - WebP: the EXIF and "XMP " chunks go, and VP8X's EXIF/XMP flags are cleared to match. A file shorter than its
|
|
11
|
+
* RIFF header says is refused; bytes after the RIFF end are dropped.
|
|
12
|
+
* A file this module cannot walk to its end is refused, never passed through.
|
|
13
|
+
*/
|
|
14
|
+
export const MEDIA_MIME = { png: "image/png", jpeg: "image/jpeg", webp: "image/webp", gif: "image/gif", woff2: "font/woff2" };
|
|
15
|
+
export const MEDIA_EXT = { png: "png", jpeg: "jpg", webp: "webp", gif: "gif", woff2: "woff2" };
|
|
16
|
+
/** The kind by magic bytes, or null. */
|
|
17
|
+
export function sniffMedia(b) {
|
|
18
|
+
const at = (k, ...v) => v.every((x, j) => b[k + j] === x);
|
|
19
|
+
if (b.length >= 8 && at(0, 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a))
|
|
20
|
+
return "png";
|
|
21
|
+
if (b.length >= 3 && at(0, 0xff, 0xd8, 0xff))
|
|
22
|
+
return "jpeg";
|
|
23
|
+
if (b.length >= 12 && at(0, 0x52, 0x49, 0x46, 0x46) && at(8, 0x57, 0x45, 0x42, 0x50))
|
|
24
|
+
return "webp";
|
|
25
|
+
if (b.length >= 6 && (at(0, 0x47, 0x49, 0x46, 0x38, 0x37, 0x61) || at(0, 0x47, 0x49, 0x46, 0x38, 0x39, 0x61)))
|
|
26
|
+
return "gif";
|
|
27
|
+
if (b.length >= 4 && at(0, 0x77, 0x4f, 0x46, 0x32))
|
|
28
|
+
return "woff2";
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const u16be = (b, k) => (b[k] << 8) | b[k + 1];
|
|
32
|
+
const u32be = (b, k) => ((b[k] << 24) >>> 0) + (b[k + 1] << 16) + (b[k + 2] << 8) + b[k + 3];
|
|
33
|
+
const u16le = (b, k) => b[k] | (b[k + 1] << 8);
|
|
34
|
+
const u24le = (b, k) => b[k] | (b[k + 1] << 8) | (b[k + 2] << 16);
|
|
35
|
+
const u32le = (b, k) => (b[k] | (b[k + 1] << 8) | (b[k + 2] << 16) | (b[k + 3] << 24)) >>> 0;
|
|
36
|
+
/** Width and height from the headers, or null when the file does not say (or is not an image). */
|
|
37
|
+
export function imageSize(b, kind) {
|
|
38
|
+
if (kind === "png")
|
|
39
|
+
return b.length >= 24 && String.fromCharCode(...b.subarray(12, 16)) === "IHDR" ? { width: u32be(b, 16), height: u32be(b, 20) } : null;
|
|
40
|
+
if (kind === "gif")
|
|
41
|
+
return b.length >= 10 ? { width: u16le(b, 6), height: u16le(b, 8) } : null;
|
|
42
|
+
if (kind === "jpeg") {
|
|
43
|
+
let k = 2;
|
|
44
|
+
while (k + 4 <= b.length) {
|
|
45
|
+
if (b[k] !== 0xff)
|
|
46
|
+
return null;
|
|
47
|
+
const m = b[k + 1];
|
|
48
|
+
if (m === 0xff) {
|
|
49
|
+
k++;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (m === 0xd8 || m === 0x01 || (m >= 0xd0 && m <= 0xd7)) {
|
|
53
|
+
k += 2;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const len = u16be(b, k + 2);
|
|
57
|
+
// SOF0–SOF15 except DHT (C4), JPG (C8) and DAC (CC).
|
|
58
|
+
if (m >= 0xc0 && m <= 0xcf && m !== 0xc4 && m !== 0xc8 && m !== 0xcc)
|
|
59
|
+
return k + 9 <= b.length ? { height: u16be(b, k + 5), width: u16be(b, k + 7) } : null;
|
|
60
|
+
if (m === 0xda || m === 0xd9)
|
|
61
|
+
return null;
|
|
62
|
+
k += 2 + len;
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
if (kind === "webp") {
|
|
67
|
+
if (b.length < 30)
|
|
68
|
+
return null;
|
|
69
|
+
const fourcc = String.fromCharCode(...b.subarray(12, 16));
|
|
70
|
+
if (fourcc === "VP8X")
|
|
71
|
+
return { width: u24le(b, 24) + 1, height: u24le(b, 27) + 1 };
|
|
72
|
+
if (fourcc === "VP8 " && b[23] === 0x9d && b[24] === 0x01 && b[25] === 0x2a)
|
|
73
|
+
return { width: u16le(b, 26) & 0x3fff, height: u16le(b, 28) & 0x3fff };
|
|
74
|
+
if (fourcc === "VP8L" && b[20] === 0x2f) {
|
|
75
|
+
const bits = u32le(b, 21);
|
|
76
|
+
return { width: (bits & 0x3fff) + 1, height: ((bits >>> 14) & 0x3fff) + 1 };
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const PNG_DROP = new Set(["tEXt", "zTXt", "iTXt", "eXIf", "tIME"]);
|
|
83
|
+
const WEBP_DROP = new Set(["EXIF", "XMP "]);
|
|
84
|
+
/** The file without its metadata (see the module comment), or null when it cannot be walked safely. */
|
|
85
|
+
export function stripMetadata(b, kind) {
|
|
86
|
+
if (kind === "png") {
|
|
87
|
+
const parts = [b.subarray(0, 8)];
|
|
88
|
+
let k = 8, sawEnd = false;
|
|
89
|
+
while (k + 12 <= b.length) {
|
|
90
|
+
const len = u32be(b, k), type = String.fromCharCode(...b.subarray(k + 4, k + 8)), end = k + 12 + len;
|
|
91
|
+
if (end > b.length)
|
|
92
|
+
return null;
|
|
93
|
+
if (!PNG_DROP.has(type))
|
|
94
|
+
parts.push(b.subarray(k, end));
|
|
95
|
+
k = end;
|
|
96
|
+
if (type === "IEND") {
|
|
97
|
+
sawEnd = true;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return sawEnd ? concat(parts) : null;
|
|
102
|
+
}
|
|
103
|
+
if (kind === "jpeg") {
|
|
104
|
+
const parts = [b.subarray(0, 2)];
|
|
105
|
+
let k = 2;
|
|
106
|
+
for (;;) {
|
|
107
|
+
if (k + 2 > b.length || b[k] !== 0xff)
|
|
108
|
+
return null; // no EOI: truncated, or not a marker
|
|
109
|
+
const m = b[k + 1];
|
|
110
|
+
if (m === 0xff) {
|
|
111
|
+
k++;
|
|
112
|
+
continue;
|
|
113
|
+
} // fill byte before a marker
|
|
114
|
+
if (m === 0xd9) {
|
|
115
|
+
parts.push(b.subarray(k, k + 2));
|
|
116
|
+
return concat(parts);
|
|
117
|
+
}
|
|
118
|
+
if (m === 0x01 || (m >= 0xd0 && m <= 0xd7)) {
|
|
119
|
+
parts.push(b.subarray(k, k + 2));
|
|
120
|
+
k += 2;
|
|
121
|
+
continue;
|
|
122
|
+
} // standalone
|
|
123
|
+
if (k + 4 > b.length)
|
|
124
|
+
return null;
|
|
125
|
+
const len = u16be(b, k + 2), end = k + 2 + len;
|
|
126
|
+
if (len < 2 || end > b.length)
|
|
127
|
+
return null;
|
|
128
|
+
const drop = (m >= 0xe1 && m <= 0xef) || m === 0xfe;
|
|
129
|
+
if (!drop)
|
|
130
|
+
parts.push(b.subarray(k, end));
|
|
131
|
+
k = end;
|
|
132
|
+
if (m !== 0xda)
|
|
133
|
+
continue;
|
|
134
|
+
// A scan: its entropy-coded data runs to the next marker that is neither a stuffed 0xFF00 nor a restart marker.
|
|
135
|
+
let j = k;
|
|
136
|
+
for (;;) {
|
|
137
|
+
if (j + 1 >= b.length)
|
|
138
|
+
return null; // the data never ends: truncated
|
|
139
|
+
if (b[j] === 0xff) {
|
|
140
|
+
const n = b[j + 1];
|
|
141
|
+
if (n === 0x00 || (n >= 0xd0 && n <= 0xd7)) {
|
|
142
|
+
j += 2;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (n === 0xff) {
|
|
146
|
+
j++;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
j++;
|
|
152
|
+
}
|
|
153
|
+
parts.push(b.subarray(k, j));
|
|
154
|
+
k = j;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (kind === "webp") {
|
|
158
|
+
const parts = [];
|
|
159
|
+
let k = 12;
|
|
160
|
+
const riffEnd = 8 + u32le(b, 4);
|
|
161
|
+
if (riffEnd > b.length || riffEnd < 12)
|
|
162
|
+
return null; // shorter than it says: truncated
|
|
163
|
+
while (k + 8 <= riffEnd) {
|
|
164
|
+
const type = String.fromCharCode(...b.subarray(k, k + 4)), len = u32le(b, k + 4), end = k + 8 + len + (len & 1);
|
|
165
|
+
if (k + 8 + len > riffEnd)
|
|
166
|
+
return null;
|
|
167
|
+
if (!WEBP_DROP.has(type)) {
|
|
168
|
+
const chunk = Uint8Array.from(b.subarray(k, Math.min(end, riffEnd)));
|
|
169
|
+
if (type === "VP8X" && chunk.length >= 9)
|
|
170
|
+
chunk[8] = chunk[8] & ~0x0c; // its EXIF (0x08) and XMP (0x04) flags
|
|
171
|
+
parts.push(chunk);
|
|
172
|
+
}
|
|
173
|
+
k = end;
|
|
174
|
+
}
|
|
175
|
+
if (k < riffEnd)
|
|
176
|
+
return null;
|
|
177
|
+
const body = concat(parts);
|
|
178
|
+
const out = new Uint8Array(12 + body.length);
|
|
179
|
+
out.set(b.subarray(0, 4), 0);
|
|
180
|
+
const size = 4 + body.length;
|
|
181
|
+
out[4] = size & 0xff;
|
|
182
|
+
out[5] = (size >>> 8) & 0xff;
|
|
183
|
+
out[6] = (size >>> 16) & 0xff;
|
|
184
|
+
out[7] = (size >>> 24) & 0xff;
|
|
185
|
+
out.set(b.subarray(8, 12), 8);
|
|
186
|
+
out.set(body, 12);
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
189
|
+
return b; // gif, woff2: carried as they are
|
|
190
|
+
}
|
|
191
|
+
function concat(parts) {
|
|
192
|
+
const out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));
|
|
193
|
+
let k = 0;
|
|
194
|
+
for (const p of parts) {
|
|
195
|
+
out.set(p, k);
|
|
196
|
+
k += p.length;
|
|
197
|
+
}
|
|
198
|
+
return out;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=web-image-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-image-meta.js","sourceRoot":"","sources":["../src/web-image-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type AppearanceLimiter } from "./web-appearance-policy.js";
|
|
2
|
+
import { type ModContext } from "./web-mod-bundle.js";
|
|
3
|
+
import type { ModStore } from "./web-mod-store.js";
|
|
4
|
+
import type { ThemeStore } from "./web-theme-store.js";
|
|
5
|
+
/** An exported mod that fits one message is sent whole; a larger one is fetched in parts (as a preview is). */
|
|
6
|
+
export declare const MOD_INLINE_BYTES: number;
|
|
7
|
+
export declare const MOD_IDLE_MS = 60000;
|
|
8
|
+
type Answer = Record<string, unknown>;
|
|
9
|
+
export interface AgentModsDeps {
|
|
10
|
+
themes: ThemeStore;
|
|
11
|
+
mods: ModStore;
|
|
12
|
+
limiter: AppearanceLimiter;
|
|
13
|
+
webConfig: () => {
|
|
14
|
+
themes?: {
|
|
15
|
+
agent_edit?: boolean;
|
|
16
|
+
};
|
|
17
|
+
} | undefined | null;
|
|
18
|
+
context: () => ModContext;
|
|
19
|
+
/**
|
|
20
|
+
* r4-5c: an effect as this agent may read it (its own, or one a person shared) — never a person's private effect,
|
|
21
|
+
* even one placed on its instance: that is not the agent's to carry away. Null: not readable by it (or no library).
|
|
22
|
+
*/
|
|
23
|
+
readOwnEffect?: (instance: string, id: string) => {
|
|
24
|
+
name: string;
|
|
25
|
+
files: ReadonlyMap<string, Uint8Array>;
|
|
26
|
+
} | null;
|
|
27
|
+
/** A muted status line in the agent's own web chat (#1672's notice lane). */
|
|
28
|
+
notice: (instance: string, text: string) => void;
|
|
29
|
+
changed: () => void;
|
|
30
|
+
clock?: () => number;
|
|
31
|
+
}
|
|
32
|
+
export declare class AgentMods {
|
|
33
|
+
private readonly deps;
|
|
34
|
+
private readonly built;
|
|
35
|
+
private readonly uploads;
|
|
36
|
+
constructor(deps: AgentModsDeps);
|
|
37
|
+
private now;
|
|
38
|
+
handle(instance: string, tool: string, args: Answer): Answer;
|
|
39
|
+
/** export_web_mod: the caller's own look, as a bundle file. */
|
|
40
|
+
private exportMod;
|
|
41
|
+
private exportPart;
|
|
42
|
+
/** Why the caller may not propose now, or null: the fleet switch, a person's lock, the upload limit. */
|
|
43
|
+
private refusal;
|
|
44
|
+
/** propose_web_mod: the bytes the daemon or agend-agent read on the agent's side — whole, or in parts. */
|
|
45
|
+
private propose;
|
|
46
|
+
private finish;
|
|
47
|
+
/** An instance was removed. */
|
|
48
|
+
forget(instance: string): void;
|
|
49
|
+
}
|
|
50
|
+
export {};
|