@ai-ecoverse/slicc-spectrum 1.3.0 → 1.5.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.
Files changed (48) hide show
  1. package/README.md +32 -6
  2. package/dist/{chunk-JASEW37G.js → chunk-2BBOXTOJ.js} +5 -3
  3. package/dist/chunk-2EPADERK.js +25260 -0
  4. package/dist/chunk-2EPADERK.js.map +7 -0
  5. package/dist/{chunk-HBUX7E54.js → chunk-4JUIYZ4Q.js} +4 -4
  6. package/dist/{chunk-OFQ56DAN.js → chunk-CDYGCBW7.js} +5 -5
  7. package/dist/{chunk-YPQKCWWG.js → chunk-FXM4K5WL.js} +4 -4
  8. package/dist/{chunk-I2NMYJ25.js → chunk-H57UPFSK.js} +3 -3
  9. package/dist/{chunk-4GQ6THC2.js → chunk-JCRICTXR.js} +6 -6
  10. package/dist/{chunk-6JNYNXUQ.js → chunk-LR5GBIK7.js} +7 -7
  11. package/dist/{chunk-6N3GZNXH.js → chunk-MJOCPOXZ.js} +8 -8
  12. package/dist/{chunk-5XWUZJTT.js → chunk-N27WNL5Q.js} +4 -4
  13. package/dist/chunk-WCSKGA5W.js +30 -0
  14. package/dist/chunk-WCSKGA5W.js.map +7 -0
  15. package/dist/chunk-YWO2TNED.js +71 -0
  16. package/dist/chunk-YWO2TNED.js.map +7 -0
  17. package/dist/slicc-dummy.js +981 -115
  18. package/dist/slicc-dummy.js.map +4 -4
  19. package/dist/slicc-kernel-model.js +379 -0
  20. package/dist/slicc-kernel-model.js.map +7 -0
  21. package/dist/slicc-terminal.js +3 -26
  22. package/dist/slicc-terminal.js.map +3 -3
  23. package/dist/slicc-ui.js +2638 -2243
  24. package/dist/slicc-ui.js.map +4 -4
  25. package/dist/types/app/app.d.ts +5 -1
  26. package/dist/types/app/files.d.ts +11 -0
  27. package/dist/types/app/fonts.d.ts +8 -0
  28. package/dist/types/app/lucide.d.ts +24 -0
  29. package/dist/types/app/messages.d.ts +2 -1
  30. package/dist/types/app/panels.d.ts +3 -3
  31. package/dist/types/app/spectrum.d.ts +2 -0
  32. package/dist/types/app/sprinkle.d.ts +18 -1
  33. package/dist/types/kernel/files.d.ts +20 -0
  34. package/dist/types/kernel/idle.d.ts +51 -0
  35. package/dist/types/kernel/index.d.ts +17 -0
  36. package/dist/types/kernel/terminals.d.ts +21 -0
  37. package/dist/types/kernel.d.ts +7 -0
  38. package/dist/types/model/types.d.ts +4 -0
  39. package/package.json +7 -2
  40. /package/dist/{chunk-JASEW37G.js.map → chunk-2BBOXTOJ.js.map} +0 -0
  41. /package/dist/{chunk-HBUX7E54.js.map → chunk-4JUIYZ4Q.js.map} +0 -0
  42. /package/dist/{chunk-OFQ56DAN.js.map → chunk-CDYGCBW7.js.map} +0 -0
  43. /package/dist/{chunk-YPQKCWWG.js.map → chunk-FXM4K5WL.js.map} +0 -0
  44. /package/dist/{chunk-5XWUZJTT.js.map → chunk-H57UPFSK.js.map} +0 -0
  45. /package/dist/{chunk-4GQ6THC2.js.map → chunk-JCRICTXR.js.map} +0 -0
  46. /package/dist/{chunk-6JNYNXUQ.js.map → chunk-LR5GBIK7.js.map} +0 -0
  47. /package/dist/{chunk-6N3GZNXH.js.map → chunk-MJOCPOXZ.js.map} +0 -0
  48. /package/dist/{chunk-I2NMYJ25.js.map → chunk-N27WNL5Q.js.map} +0 -0
@@ -2,7 +2,7 @@ import { type TemplateResult } from 'lit';
2
2
  import type { SliccDock } from '../components/dock.js';
3
3
  import type { SliccModel } from '../model/types.js';
4
4
  import { ThemedElement } from './base.js';
5
- import { type DocumentKind, type ScreenClass } from './panels.js';
5
+ import { type DocumentKind, type ScreenClass, type Surface } from './panels.js';
6
6
  export declare class SliccApp extends ThemedElement {
7
7
  #private;
8
8
  static properties: {
@@ -12,8 +12,12 @@ export declare class SliccApp extends ThemedElement {
12
12
  screen: {
13
13
  reflect: boolean;
14
14
  };
15
+ surfaces: {
16
+ attribute: boolean;
17
+ };
15
18
  };
16
19
  screen: ScreenClass;
20
+ surfaces: readonly Surface[];
17
21
  storage: Storage | null;
18
22
  layoutKey: string;
19
23
  constructor();
@@ -45,12 +45,23 @@ export declare class SliccFileView extends ThemedElement {
45
45
  missing: {
46
46
  state: boolean;
47
47
  };
48
+ draft: {
49
+ state: boolean;
50
+ };
51
+ saving: {
52
+ state: boolean;
53
+ };
48
54
  };
49
55
  path: string;
50
56
  text: string | null;
51
57
  missing: boolean;
58
+ draft: string | null;
59
+ saving: boolean;
52
60
  constructor();
53
61
  static styles: import("lit").CSSResult[];
62
+ edit(): void;
63
+ cancel(): void;
64
+ save(): Promise<void>;
54
65
  protected subscribe(model: SliccModel): Array<() => void>;
55
66
  render(): TemplateResult;
56
67
  }
@@ -1,3 +1,11 @@
1
1
  export declare const defaultFontBase = "/fonts/";
2
+ export interface FontFile {
3
+ family: string;
4
+ weight: number;
5
+ url: string;
6
+ format: 'woff2' | 'opentype';
7
+ }
8
+ export declare function fontFiles(base: string | null, codeBase: string): FontFile[];
2
9
  export declare function fontFaces(base: string | null, codeBase: string): string;
10
+ export declare function installedFonts(): readonly FontFile[];
3
11
  export declare function installFonts(document: Document, base: string | null, codeBase: string): HTMLStyleElement;
@@ -0,0 +1,24 @@
1
+ import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
2
+ type IconNode = Array<[string, Record<string, string | number>]>;
3
+ type Library = Record<string, unknown> & {
4
+ icons: Record<string, IconNode>;
5
+ };
6
+ export declare function load(): Promise<Library>;
7
+ export declare function pascal(name: string): string;
8
+ export declare function svg(name: string, node: IconNode): string;
9
+ export declare function icons(names: readonly unknown[]): Promise<Record<string, string>>;
10
+ export declare class SliccLucide extends LitElement {
11
+ static properties: {
12
+ name: {};
13
+ markup: {
14
+ state: boolean;
15
+ };
16
+ };
17
+ name: string;
18
+ markup: string;
19
+ static styles: import("lit").CSSResult;
20
+ constructor();
21
+ protected willUpdate(changed: PropertyValues<this>): void;
22
+ render(): TemplateResult;
23
+ }
24
+ export {};
@@ -1,7 +1,8 @@
1
1
  import { nothing, type TemplateResult } from 'lit';
2
- import type { AssistantMessage, ErrorAction, LickChannel, LickMessage, LickState, MessagePart, SystemMessage, ToolCall, ToolMessage, UserMessage } from '../model/types.js';
2
+ import type { AssistantMessage, ErrorAction, LickChannel, LickMessage, LickState, MessagePart, SliccModel, SystemMessage, ToolCall, ToolMessage, UserMessage } from '../model/types.js';
3
3
  export interface Handlers {
4
4
  color: 'light' | 'dark';
5
+ model: SliccModel | null;
5
6
  answer(questionId: string, answer: string): void;
6
7
  resolve(messageId: string, state: Exclude<LickState, 'pending'>): void;
7
8
  action(action: ErrorAction): void;
@@ -28,12 +28,12 @@ export declare const documents: Record<DocumentKind, {
28
28
  title(path: string): string;
29
29
  }>;
30
30
  export declare function screenClass(width: number): ScreenClass;
31
- export declare function surface(id: string): Surface | undefined;
31
+ export declare function surface(id: string, items?: readonly Surface[]): Surface | undefined;
32
32
  export declare function create(tag: string, model: SliccModel, params?: PanelParams): HTMLElement;
33
33
  export declare function placement(dock: SliccDock, side: Side, screen: ScreenClass): Placement;
34
34
  export declare function openSurface(dock: SliccDock, item: Surface, screen: ScreenClass): void;
35
35
  export declare function openDocument(dock: SliccDock, kind: DocumentKind, path: string, screen: ScreenClass): string;
36
- export declare function defaultLayout(dock: SliccDock, screen: ScreenClass): void;
37
- export declare function closed(dock: SliccDock): Surface[];
36
+ export declare function defaultLayout(dock: SliccDock, screen: ScreenClass, items?: readonly Surface[]): void;
37
+ export declare function closed(dock: SliccDock, items?: readonly Surface[]): Surface[];
38
38
  export declare function sprinkleSurface(sprinkle: Sprinkle): Surface;
39
39
  export declare function openSprinkle(dock: SliccDock, sprinkle: Sprinkle, screen: ScreenClass): string;
@@ -20,11 +20,13 @@ import '@spectrum-web-components/icons-workflow/icons/sp-icon-add.js';
20
20
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-checkmark.js';
21
21
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-compare.js';
22
22
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-contrast.js';
23
+ import '@spectrum-web-components/icons-workflow/icons/sp-icon-edit.js';
23
24
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-filter.js';
24
25
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-checkmark-circle.js';
25
26
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-data.js';
26
27
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-history.js';
27
28
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-lightbulb.js';
29
+ import '@spectrum-web-components/icons-workflow/icons/sp-icon-save-floppy.js';
28
30
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-globe-grid.js';
29
31
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-code.js';
30
32
  import '@spectrum-web-components/icons-workflow/icons/sp-icon-folder.js';
@@ -1,7 +1,15 @@
1
1
  import { type TemplateResult } from 'lit';
2
2
  import type { SliccModel } from '../model/types.js';
3
3
  import { ThemedElement } from './base.js';
4
- export declare function themed(source: string, color: 'light' | 'dark'): string;
4
+ import { type FontFile } from './fonts.js';
5
+ export declare const bridge = "(() => {\n const post = (message) => parent.postMessage(message, '*');\n window.slicc = {\n name: document.currentScript.dataset.name,\n lick(event) {\n const value = typeof event === 'string' ? { action: event } : event || {};\n post({ type: 'slicc-lick', action: String(value.action || ''), data: value.data ?? null, target: value.target ?? null });\n },\n };\n const wanted = new Set();\n let timer = 0;\n window.LucideIcons = {\n render() {\n for (const node of document.querySelectorAll('i[data-lucide]')) wanted.add(node.dataset.lucide);\n clearTimeout(timer);\n timer = setTimeout(() => post({ type: 'slicc-icons', names: [...wanted] }));\n },\n };\n const swap = (found) => {\n for (const node of document.querySelectorAll('i[data-lucide]')) {\n const markup = found[node.dataset.lucide];\n if (!markup) continue;\n const template = document.createElement('template');\n template.innerHTML = markup;\n const svg = template.content.firstElementChild;\n for (const { name, value } of node.attributes) {\n if (name === 'class') svg.setAttribute('class', svg.getAttribute('class') + ' ' + value);\n else if (name !== 'data-lucide') svg.setAttribute(name, value);\n }\n node.replaceWith(svg);\n }\n };\n const fonts = (list) => {\n for (const font of list) {\n const face = new FontFace(font.family, font.data, { weight: String(font.weight) });\n document.fonts.add(face);\n face.load().catch(() => {});\n }\n };\n addEventListener('message', (event) => {\n if (event.source !== parent) return;\n const message = event.data || {};\n if (message.type === 'slicc-icons') swap(message.icons);\n if (message.type === 'slicc-fonts') fonts(message.fonts);\n });\n const size = () => {\n const style = getComputedStyle(document.body);\n post({ type: 'slicc-size', height: Math.ceil(document.body.offsetHeight + parseFloat(style.marginTop) + parseFloat(style.marginBottom)) });\n };\n document.addEventListener('DOMContentLoaded', () => {\n window.LucideIcons.render();\n new ResizeObserver(size).observe(document.body);\n });\n post({ type: 'slicc-ready' });\n})();";
6
+ export declare function frameDocument(source: string, color: 'light' | 'dark', name: string): string;
7
+ export declare function fontData(url: string): Promise<ArrayBuffer | null>;
8
+ export declare function frameFonts(files: readonly FontFile[], base: string): Promise<Array<{
9
+ family: string;
10
+ weight: number;
11
+ data: ArrayBuffer;
12
+ }>>;
5
13
  export declare class SliccSprinkle extends ThemedElement {
6
14
  #private;
7
15
  static properties: {
@@ -9,8 +17,17 @@ export declare class SliccSprinkle extends ThemedElement {
9
17
  attribute: boolean;
10
18
  };
11
19
  sprinkle: {};
20
+ inline: {
21
+ type: BooleanConstructor;
22
+ reflect: boolean;
23
+ };
24
+ height: {
25
+ state: boolean;
26
+ };
12
27
  };
13
28
  sprinkle: string;
29
+ inline: boolean;
30
+ height: number;
14
31
  constructor();
15
32
  static styles: import("lit").CSSResult;
16
33
  protected subscribe(model: SliccModel): Array<() => void>;
@@ -0,0 +1,20 @@
1
+ import { Emitter } from '../model/emitter.js';
2
+ import type { Change, FileEntry, FileEvents, FilePort } from '../model/types.js';
3
+ export interface KernelFilesOptions {
4
+ skip?: readonly string[];
5
+ interval?: number;
6
+ }
7
+ export declare class KernelFiles extends Emitter<FileEvents> implements FilePort {
8
+ #private;
9
+ constructor(root: FileSystemDirectoryHandle, { skip, interval }?: KernelFilesOptions);
10
+ start(): void;
11
+ stop(): void;
12
+ refresh(): Promise<void>;
13
+ list(): Promise<readonly FileEntry[]>;
14
+ read(path: string): Promise<string>;
15
+ write(path: string, text: string): Promise<void>;
16
+ remove(path: string): Promise<void>;
17
+ changes(): readonly Change[];
18
+ accept(): void;
19
+ revert(): Promise<void>;
20
+ }
@@ -0,0 +1,51 @@
1
+ import { Emitter } from '../model/emitter.js';
2
+ import type { Agent, AgentEvents, AgentPort, BrowserEvents, BrowserPort, BrowserTab, FrozenCone, Memory, MemoryEvents, MemoryPort, Message, MonitorEvents, MonitorPort, MonitorSnapshot, SprinkleEvents, SprinklePort, TrayEvents, TrayPort, TrayStatus, UserMessage } from '../model/types.js';
3
+ export declare class IdleAgent extends Emitter<AgentEvents> implements AgentPort {
4
+ list(): readonly Agent[];
5
+ active(): string;
6
+ select(): void;
7
+ messages(): readonly Message[];
8
+ send(): Promise<void>;
9
+ stop(): void;
10
+ busy(): boolean;
11
+ queue(): readonly UserMessage[];
12
+ unqueue(): void;
13
+ suggestion(): string | null;
14
+ answer(): void;
15
+ resolveLick(): void;
16
+ compact(): void;
17
+ clear(): void;
18
+ setModel(): void;
19
+ createScoop(): Agent;
20
+ frozen(): readonly FrozenCone[];
21
+ freeze(): void;
22
+ thaw(): Agent | null;
23
+ discard(): void;
24
+ }
25
+ export declare class IdleBrowser extends Emitter<BrowserEvents> implements BrowserPort {
26
+ list(): readonly BrowserTab[];
27
+ active(): string | null;
28
+ activate(): void;
29
+ open(): BrowserTab;
30
+ navigate(): void;
31
+ close(): void;
32
+ screenshot(): Promise<string>;
33
+ }
34
+ export declare class IdleMemory extends Emitter<MemoryEvents> implements MemoryPort {
35
+ list(): readonly Memory[];
36
+ save(): Memory;
37
+ remove(): void;
38
+ }
39
+ export declare class IdleMonitor extends Emitter<MonitorEvents> implements MonitorPort {
40
+ snapshot(): MonitorSnapshot;
41
+ resync(): void;
42
+ }
43
+ export declare class IdleSprinkles extends Emitter<SprinkleEvents> implements SprinklePort {
44
+ list(): readonly [];
45
+ send(): void;
46
+ }
47
+ export declare class IdleTray extends Emitter<TrayEvents> implements TrayPort {
48
+ status(): TrayStatus;
49
+ reconnect(): void;
50
+ disconnect(): void;
51
+ }
@@ -0,0 +1,17 @@
1
+ import type { TerminalKernel } from '../kernel-backend.js';
2
+ import type { SliccModel } from '../model/types.js';
3
+ import { KernelFiles, type KernelFilesOptions } from './files.js';
4
+ import { KernelTerminals, type KernelTerminalsOptions } from './terminals.js';
5
+ export interface KernelModelOptions {
6
+ kernel: TerminalKernel;
7
+ root: FileSystemDirectoryHandle;
8
+ files?: KernelFilesOptions;
9
+ terminals?: KernelTerminalsOptions;
10
+ storage?: Storage | null;
11
+ }
12
+ export interface KernelModel extends SliccModel {
13
+ files: KernelFiles;
14
+ terminals: KernelTerminals;
15
+ }
16
+ export declare function idleModel(storage?: Storage | null): Omit<SliccModel, 'files' | 'terminals'>;
17
+ export declare function createKernelModel({ kernel, root, files, terminals, storage, }: KernelModelOptions): KernelModel;
@@ -0,0 +1,21 @@
1
+ import type { TerminalBackend } from '../backend.js';
2
+ import { type TerminalKernel } from '../kernel-backend.js';
3
+ import { Emitter } from '../model/emitter.js';
4
+ import type { TerminalEvents, TerminalInfo, TerminalPort } from '../model/types.js';
5
+ export interface KernelTerminalsOptions {
6
+ argv?: string[];
7
+ cwd?: string;
8
+ env?: Record<string, string>;
9
+ open?: number;
10
+ }
11
+ export declare class KernelTerminals extends Emitter<TerminalEvents> implements TerminalPort {
12
+ #private;
13
+ constructor(kernel: TerminalKernel, { argv, cwd, env, open }?: KernelTerminalsOptions);
14
+ list(): readonly TerminalInfo[];
15
+ open({ cwd, agentId, }?: {
16
+ cwd?: string;
17
+ agentId?: string | null;
18
+ }): TerminalInfo;
19
+ close(id: string): void;
20
+ backend(id: string): TerminalBackend;
21
+ }
@@ -0,0 +1,7 @@
1
+ export type { KernelFilesOptions } from './kernel/files.js';
2
+ export { KernelFiles } from './kernel/files.js';
3
+ export { IdleAgent, IdleBrowser, IdleMemory, IdleMonitor, IdleSprinkles, IdleTray, } from './kernel/idle.js';
4
+ export type { KernelModel, KernelModelOptions } from './kernel/index.js';
5
+ export { createKernelModel, idleModel } from './kernel/index.js';
6
+ export type { KernelTerminalsOptions } from './kernel/terminals.js';
7
+ export { KernelTerminals } from './kernel/terminals.js';
@@ -123,6 +123,9 @@ export type MessagePart = {
123
123
  url: string;
124
124
  title: string;
125
125
  description: string;
126
+ } | {
127
+ type: 'sprinkle';
128
+ sprinkle: string;
126
129
  } | {
127
130
  type: 'error';
128
131
  message: string;
@@ -402,6 +405,7 @@ export interface Sprinkle {
402
405
  icon: string;
403
406
  agentId: string;
404
407
  html: string;
408
+ inline?: boolean;
405
409
  }
406
410
  export interface SprinkleEvents {
407
411
  sprinkles: readonly Sprinkle[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-spectrum",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Web components for SLICC on Spectrum Web Components: the terminal, the app shell and its surfaces",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -33,6 +33,10 @@
33
33
  "./dummy": {
34
34
  "types": "./dist/types/dummy.d.ts",
35
35
  "default": "./dist/slicc-dummy.js"
36
+ },
37
+ "./kernel": {
38
+ "types": "./dist/types/kernel.d.ts",
39
+ "default": "./dist/slicc-kernel-model.js"
36
40
  }
37
41
  },
38
42
  "files": [
@@ -66,7 +70,7 @@
66
70
  }
67
71
  },
68
72
  "devDependencies": {
69
- "@ai-ecoverse/slicc-kernel": "1.7.2",
73
+ "@ai-ecoverse/slicc-kernel": "1.8.2",
70
74
  "@ai-ecoverse/slicc-shared-web": "1.4.1",
71
75
  "@ai-ecoverse/wasm-bash": "5.3.0-7",
72
76
  "@ai-ecoverse/wasm-coreutils": "9.7.0-3",
@@ -95,6 +99,7 @@
95
99
  "esbuild": "0.28.2",
96
100
  "happy-dom": "20.14.5",
97
101
  "lefthook": "2.1.17",
102
+ "lucide": "1.52.0",
98
103
  "monocart-coverage-reports": "2.13.0",
99
104
  "playwright-core": "1.63.0",
100
105
  "semantic-release": "25.0.9",