inspect-ai 0.3.92__py3-none-any.whl → 0.3.94__py3-none-any.whl
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.
- inspect_ai/_cli/eval.py +27 -0
- inspect_ai/_display/textual/widgets/samples.py +3 -3
- inspect_ai/_display/textual/widgets/transcript.py +3 -29
- inspect_ai/_eval/eval.py +19 -2
- inspect_ai/_eval/evalset.py +4 -1
- inspect_ai/_eval/run.py +41 -0
- inspect_ai/_eval/task/generate.py +38 -44
- inspect_ai/_eval/task/log.py +26 -28
- inspect_ai/_eval/task/run.py +23 -27
- inspect_ai/_util/answer.py +26 -0
- inspect_ai/_util/constants.py +0 -1
- inspect_ai/_util/local_server.py +398 -0
- inspect_ai/_util/working.py +10 -4
- inspect_ai/_view/www/dist/assets/index.css +173 -159
- inspect_ai/_view/www/dist/assets/index.js +1417 -1142
- inspect_ai/_view/www/log-schema.json +379 -3
- inspect_ai/_view/www/package.json +1 -1
- inspect_ai/_view/www/src/@types/log.d.ts +93 -14
- inspect_ai/_view/www/src/app/content/MetaDataGrid.tsx +2 -2
- inspect_ai/_view/www/src/app/content/MetaDataView.module.css +1 -1
- inspect_ai/_view/www/src/app/content/MetadataGrid.module.css +1 -1
- inspect_ai/_view/www/src/app/content/RenderedContent.tsx +1 -1
- inspect_ai/_view/www/src/app/log-view/LogView.tsx +11 -0
- inspect_ai/_view/www/src/app/log-view/tabs/InfoTab.tsx +2 -9
- inspect_ai/_view/www/src/app/log-view/tabs/ModelsTab.tsx +51 -0
- inspect_ai/_view/www/src/app/log-view/tabs/TaskTab.module.css +6 -0
- inspect_ai/_view/www/src/app/log-view/tabs/TaskTab.tsx +143 -0
- inspect_ai/_view/www/src/app/plan/ModelCard.tsx +1 -2
- inspect_ai/_view/www/src/app/plan/PlanCard.tsx +29 -7
- inspect_ai/_view/www/src/app/plan/PlanDetailView.module.css +1 -1
- inspect_ai/_view/www/src/app/plan/PlanDetailView.tsx +1 -198
- inspect_ai/_view/www/src/app/samples/descriptor/score/NumericScoreDescriptor.tsx +2 -1
- inspect_ai/_view/www/src/app/samples/transcript/SandboxEventView.module.css +2 -1
- inspect_ai/_view/www/src/app/samples/transcript/SpanEventView.tsx +174 -0
- inspect_ai/_view/www/src/app/samples/transcript/ToolEventView.tsx +8 -8
- inspect_ai/_view/www/src/app/samples/transcript/TranscriptView.tsx +12 -2
- inspect_ai/_view/www/src/app/samples/transcript/TranscriptVirtualListComponent.module.css +1 -1
- inspect_ai/_view/www/src/app/samples/transcript/event/EventPanel.tsx +0 -3
- inspect_ai/_view/www/src/app/samples/transcript/transform/fixups.ts +87 -25
- inspect_ai/_view/www/src/app/samples/transcript/transform/treeify.ts +229 -17
- inspect_ai/_view/www/src/app/samples/transcript/transform/utils.ts +11 -0
- inspect_ai/_view/www/src/app/samples/transcript/types.ts +5 -1
- inspect_ai/_view/www/src/app/usage/ModelUsagePanel.tsx +3 -2
- inspect_ai/_view/www/src/app/usage/TokenTable.module.css +4 -1
- inspect_ai/_view/www/src/app/usage/TokenTable.tsx +2 -2
- inspect_ai/_view/www/src/app/usage/UsageCard.module.css +8 -3
- inspect_ai/_view/www/src/app/usage/UsageCard.tsx +1 -35
- inspect_ai/_view/www/src/components/Card.css +0 -1
- inspect_ai/_view/www/src/constants.ts +2 -0
- inspect_ai/_view/www/src/utils/numeric.ts +17 -0
- inspect_ai/agent/_agent.py +3 -3
- inspect_ai/agent/_as_solver.py +22 -12
- inspect_ai/agent/_as_tool.py +20 -6
- inspect_ai/agent/_handoff.py +12 -1
- inspect_ai/agent/_react.py +4 -3
- inspect_ai/agent/_run.py +16 -3
- inspect_ai/agent/_types.py +9 -0
- inspect_ai/dataset/_dataset.py +6 -3
- inspect_ai/log/__init__.py +14 -0
- inspect_ai/log/_convert.py +4 -9
- inspect_ai/log/_file.py +56 -0
- inspect_ai/log/_log.py +99 -0
- inspect_ai/log/_recorders/__init__.py +2 -0
- inspect_ai/log/_recorders/buffer/database.py +12 -11
- inspect_ai/log/_recorders/buffer/filestore.py +2 -2
- inspect_ai/log/_recorders/buffer/types.py +2 -2
- inspect_ai/log/_recorders/eval.py +20 -65
- inspect_ai/log/_recorders/file.py +28 -6
- inspect_ai/log/_recorders/recorder.py +7 -0
- inspect_ai/log/_recorders/types.py +1 -23
- inspect_ai/log/_samples.py +14 -25
- inspect_ai/log/_transcript.py +84 -36
- inspect_ai/log/_tree.py +118 -0
- inspect_ai/log/_util.py +52 -0
- inspect_ai/model/__init__.py +5 -1
- inspect_ai/model/_call_tools.py +72 -44
- inspect_ai/model/_generate_config.py +14 -8
- inspect_ai/model/_model.py +66 -88
- inspect_ai/model/_model_output.py +25 -0
- inspect_ai/model/_openai.py +2 -0
- inspect_ai/model/_providers/anthropic.py +13 -23
- inspect_ai/model/_providers/hf.py +27 -1
- inspect_ai/model/_providers/openai_o1.py +8 -2
- inspect_ai/model/_providers/providers.py +18 -4
- inspect_ai/model/_providers/sglang.py +247 -0
- inspect_ai/model/_providers/vllm.py +211 -400
- inspect_ai/scorer/_choice.py +1 -2
- inspect_ai/solver/__init__.py +7 -2
- inspect_ai/solver/_basic_agent.py +3 -10
- inspect_ai/solver/_chain.py +1 -1
- inspect_ai/solver/_fork.py +1 -1
- inspect_ai/solver/_multiple_choice.py +5 -22
- inspect_ai/solver/_plan.py +2 -2
- inspect_ai/solver/_task_state.py +26 -88
- inspect_ai/solver/_transcript.py +6 -7
- inspect_ai/tool/_json_rpc_helpers.py +45 -17
- inspect_ai/tool/_mcp/_mcp.py +8 -5
- inspect_ai/tool/_mcp/_sandbox.py +8 -2
- inspect_ai/tool/_mcp/server.py +3 -1
- inspect_ai/tool/_tool_call.py +4 -1
- inspect_ai/tool/_tool_support_helpers.py +51 -12
- inspect_ai/tool/_tools/_bash_session.py +190 -68
- inspect_ai/tool/_tools/_computer/_computer.py +25 -1
- inspect_ai/tool/_tools/_execute.py +4 -1
- inspect_ai/tool/_tools/_text_editor.py +4 -3
- inspect_ai/tool/_tools/_web_browser/_web_browser.py +10 -3
- inspect_ai/util/__init__.py +16 -0
- inspect_ai/util/_anyio.py +11 -0
- inspect_ai/util/_collect.py +50 -0
- inspect_ai/util/_limit.py +393 -0
- inspect_ai/util/_limited_conversation.py +57 -0
- inspect_ai/util/_span.py +58 -0
- inspect_ai/util/_subtask.py +27 -42
- {inspect_ai-0.3.92.dist-info → inspect_ai-0.3.94.dist-info}/METADATA +1 -1
- {inspect_ai-0.3.92.dist-info → inspect_ai-0.3.94.dist-info}/RECORD +120 -134
- {inspect_ai-0.3.92.dist-info → inspect_ai-0.3.94.dist-info}/WHEEL +1 -1
- inspect_ai/_display/core/group.py +0 -79
- inspect_ai/solver/_limit.py +0 -39
- inspect_ai/tool/_tools/_computer/_resources/Dockerfile +0 -102
- inspect_ai/tool/_tools/_computer/_resources/README.md +0 -30
- inspect_ai/tool/_tools/_computer/_resources/entrypoint/entrypoint.sh +0 -18
- inspect_ai/tool/_tools/_computer/_resources/entrypoint/novnc_startup.sh +0 -20
- inspect_ai/tool/_tools/_computer/_resources/entrypoint/x11vnc_startup.sh +0 -48
- inspect_ai/tool/_tools/_computer/_resources/entrypoint/xfce_startup.sh +0 -13
- inspect_ai/tool/_tools/_computer/_resources/entrypoint/xvfb_startup.sh +0 -48
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/.config/Code/User/globalStorage/state.vscdb +0 -0
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/.config/Code/User/settings.json +0 -9
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml +0 -61
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml +0 -10
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml +0 -91
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/Desktop/Firefox Web Browser.desktop +0 -10
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/Desktop/Terminal.desktop +0 -10
- inspect_ai/tool/_tools/_computer/_resources/image_home_dir/Desktop/Visual Studio Code.desktop +0 -10
- inspect_ai/tool/_tools/_computer/_resources/tool/.pylintrc +0 -8
- inspect_ai/tool/_tools/_computer/_resources/tool/.vscode/settings.json +0 -12
- inspect_ai/tool/_tools/_computer/_resources/tool/_args.py +0 -78
- inspect_ai/tool/_tools/_computer/_resources/tool/_constants.py +0 -22
- inspect_ai/tool/_tools/_computer/_resources/tool/_logger.py +0 -22
- inspect_ai/tool/_tools/_computer/_resources/tool/_run.py +0 -42
- inspect_ai/tool/_tools/_computer/_resources/tool/_tool_result.py +0 -33
- inspect_ai/tool/_tools/_computer/_resources/tool/_x11_client.py +0 -341
- inspect_ai/tool/_tools/_computer/_resources/tool/computer_tool.py +0 -141
- inspect_ai/tool/_tools/_computer/_resources/tool/pyproject.toml +0 -65
- inspect_ai/tool/_tools/_computer/_resources/tool/requirements.txt +0 -0
- inspect_ai/tool/_tools/_computer/test_args.py +0 -151
- /inspect_ai/{tool/_tools/_computer/_resources/tool/__init__.py → _view/www/src/app/log-view/tabs/ModelsTab.module.css} +0 -0
- {inspect_ai-0.3.92.dist-info → inspect_ai-0.3.94.dist-info}/entry_points.txt +0 -0
- {inspect_ai-0.3.92.dist-info → inspect_ai-0.3.94.dist-info}/licenses/LICENSE +0 -0
- {inspect_ai-0.3.92.dist-info → inspect_ai-0.3.94.dist-info}/top_level.txt +0 -0
@@ -1,79 +0,0 @@
|
|
1
|
-
from dataclasses import dataclass
|
2
|
-
from typing import Sequence
|
3
|
-
|
4
|
-
from inspect_ai.log._transcript import Event, StepEvent, SubtaskEvent, ToolEvent
|
5
|
-
|
6
|
-
|
7
|
-
@dataclass
|
8
|
-
class EventGroup:
|
9
|
-
"""Event and (optionally) its embedded event groups.
|
10
|
-
|
11
|
-
- Some events (e.g. SampleInitEvent, LogEvent) have no embedded event groups.
|
12
|
-
- Some events (e.g. ToolEvent, SubtaskEvent) contain lists of event groups.
|
13
|
-
- StepEvent has an implicit of event groups based on its begin/end instances.
|
14
|
-
"""
|
15
|
-
|
16
|
-
event: Event
|
17
|
-
level: int
|
18
|
-
groups: list["EventGroup"] | None = None
|
19
|
-
|
20
|
-
|
21
|
-
def group_events(events: Sequence[Event], level: int = 1) -> list[EventGroup]:
|
22
|
-
"""Transform ordinary list of events into list of event groups."""
|
23
|
-
# groups are either plain events (some of which can have sub-events)
|
24
|
-
# and higher level steps (e.g. solvers/scorers) that contain events
|
25
|
-
event_groups: list[EventGroup] = []
|
26
|
-
|
27
|
-
# track stack of active steps
|
28
|
-
active_steps: list[tuple[StepEvent, list[EventGroup]]] = []
|
29
|
-
|
30
|
-
# iterate though events
|
31
|
-
for event in events:
|
32
|
-
# manage step events
|
33
|
-
if isinstance(event, StepEvent):
|
34
|
-
if event.action == "begin":
|
35
|
-
active_steps.append((event, []))
|
36
|
-
elif event.action == "end":
|
37
|
-
begin_step, step_groups = active_steps.pop()
|
38
|
-
target_group = (
|
39
|
-
active_steps[-1][1] if len(active_steps) else event_groups
|
40
|
-
)
|
41
|
-
target_group.append(
|
42
|
-
EventGroup(
|
43
|
-
event=begin_step,
|
44
|
-
level=level + len(active_steps),
|
45
|
-
groups=step_groups,
|
46
|
-
)
|
47
|
-
)
|
48
|
-
|
49
|
-
# other events
|
50
|
-
else:
|
51
|
-
# target level depends on whether we are appending to a set
|
52
|
-
target_level = level + len(active_steps)
|
53
|
-
|
54
|
-
# tool and subtask events have their own nested event lists
|
55
|
-
if isinstance(event, ToolEvent | SubtaskEvent):
|
56
|
-
group = EventGroup(
|
57
|
-
event=event,
|
58
|
-
groups=group_events(event.events, level=target_level + 1),
|
59
|
-
level=target_level,
|
60
|
-
)
|
61
|
-
else:
|
62
|
-
group = EventGroup(event=event, level=target_level)
|
63
|
-
|
64
|
-
# add to active step if we have one
|
65
|
-
if len(active_steps) > 0:
|
66
|
-
active_steps[-1][1].append(group)
|
67
|
-
# otherwise just add to root list
|
68
|
-
else:
|
69
|
-
event_groups.append(group)
|
70
|
-
|
71
|
-
# if there are active steps alive then collect them (an error
|
72
|
-
# may have prevented them from having end steps)
|
73
|
-
while len(active_steps) > 0:
|
74
|
-
begin_step, step_groups = active_steps.pop()
|
75
|
-
event_groups.append(
|
76
|
-
EventGroup(event=begin_step, level=level, groups=step_groups)
|
77
|
-
)
|
78
|
-
|
79
|
-
return event_groups
|
inspect_ai/solver/_limit.py
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
from typing import Literal
|
2
|
-
|
3
|
-
from ._task_state import TaskState
|
4
|
-
|
5
|
-
|
6
|
-
class SampleLimitExceededError(Exception):
|
7
|
-
"""Exception raised when a sample limit is exceeded.
|
8
|
-
|
9
|
-
Args:
|
10
|
-
type: Type of limit exceeded.
|
11
|
-
value: Value compared to
|
12
|
-
limit: Limit applied.
|
13
|
-
message (str | None): Optional. Human readable message.
|
14
|
-
"""
|
15
|
-
|
16
|
-
def __init__(
|
17
|
-
self,
|
18
|
-
type: Literal["message", "time", "working", "token", "operator", "custom"],
|
19
|
-
*,
|
20
|
-
value: int,
|
21
|
-
limit: int,
|
22
|
-
message: str | None = None,
|
23
|
-
state: TaskState | None = None,
|
24
|
-
) -> None:
|
25
|
-
self.type = type
|
26
|
-
self.value = value
|
27
|
-
self.limit = limit
|
28
|
-
self.message = f"Exceeded {type} limit: {limit:,}"
|
29
|
-
self.state = state
|
30
|
-
super().__init__(message)
|
31
|
-
|
32
|
-
def with_state(self, state: TaskState) -> "SampleLimitExceededError":
|
33
|
-
return SampleLimitExceededError(
|
34
|
-
self.type,
|
35
|
-
value=self.value,
|
36
|
-
limit=self.limit,
|
37
|
-
message=self.message,
|
38
|
-
state=state,
|
39
|
-
)
|
@@ -1,102 +0,0 @@
|
|
1
|
-
FROM docker.io/ubuntu:22.04
|
2
|
-
|
3
|
-
ENV DEBIAN_FRONTEND=noninteractive
|
4
|
-
ENV DEBIAN_PRIORITY=high
|
5
|
-
|
6
|
-
# Core/system layer
|
7
|
-
RUN apt-get update && \
|
8
|
-
apt-get -y upgrade && \
|
9
|
-
apt-get -y install \
|
10
|
-
# A virtual framebuffer for running GUI applications without a physical display.
|
11
|
-
xvfb \
|
12
|
-
# A lightweight desktop environment for UNIX-like operating systems.
|
13
|
-
xfce4 \
|
14
|
-
# The terminal emulator for the xfce4 desktop environment.
|
15
|
-
xfce4-terminal\
|
16
|
-
# A VNC server for sharing X11 desktops.
|
17
|
-
x11vnc \
|
18
|
-
# A web based VNC client
|
19
|
-
novnc \
|
20
|
-
# A WebSocket to TCP proxy/bridge for noVNC
|
21
|
-
websockify \
|
22
|
-
# The Python programming language interpreter.
|
23
|
-
python3 \
|
24
|
-
# The package installer for Python.
|
25
|
-
python3-pip \
|
26
|
-
# A command-line tool for automating X11 applications (e.g., simulating keyboard/mouse inputs).
|
27
|
-
xdotool \
|
28
|
-
# A command-line tool for taking screenshots.
|
29
|
-
scrot \
|
30
|
-
# A suite for image manipulation — needed for scaling images.
|
31
|
-
imagemagick && \
|
32
|
-
apt-get clean
|
33
|
-
|
34
|
-
# Userland apt-get'able apps
|
35
|
-
RUN apt-get install -y --no-install-recommends \
|
36
|
-
# A calculator application.
|
37
|
-
galculator && \
|
38
|
-
apt-get clean
|
39
|
-
|
40
|
-
# install Firefox
|
41
|
-
RUN apt-get install -y software-properties-common && \
|
42
|
-
add-apt-repository ppa:mozillateam/ppa && \
|
43
|
-
apt-get update && \
|
44
|
-
apt-get install -y --no-install-recommends firefox-esr && \
|
45
|
-
apt-get clean
|
46
|
-
|
47
|
-
# install VS Code
|
48
|
-
RUN apt-get install -y \
|
49
|
-
gpg \
|
50
|
-
wget \
|
51
|
-
apt-transport-https \
|
52
|
-
software-properties-common && \
|
53
|
-
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg && \
|
54
|
-
install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg && \
|
55
|
-
sh -c 'echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list' && \
|
56
|
-
apt-get update && \
|
57
|
-
apt-get install -y code && \
|
58
|
-
apt-get clean
|
59
|
-
|
60
|
-
# configure noVNC
|
61
|
-
RUN ln -s /usr/share/novnc/vnc.html /usr/share/novnc/index.html
|
62
|
-
|
63
|
-
# configure python alias
|
64
|
-
RUN ln -s /usr/bin/python3 /usr/bin/python
|
65
|
-
|
66
|
-
|
67
|
-
# We copy requirements.txt by itself so that changes to the scripts will be in a later layer
|
68
|
-
# and we only pip install if requirements.txt changes
|
69
|
-
COPY tool/requirements.txt /opt/inspect/tool/requirements.txt
|
70
|
-
RUN cd /opt/inspect/tool && pip3 install --no-cache-dir -r requirements.txt
|
71
|
-
|
72
|
-
COPY tool/ /opt/inspect/tool
|
73
|
-
COPY entrypoint/ /opt/inspect/entrypoint
|
74
|
-
RUN chmod -R 755 /opt/inspect
|
75
|
-
|
76
|
-
# setup user
|
77
|
-
ENV USERNAME=user
|
78
|
-
ENV HOME=/home/$USERNAME
|
79
|
-
RUN useradd -m -s /bin/bash -d $HOME $USERNAME
|
80
|
-
RUN echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
81
|
-
USER ${USERNAME}
|
82
|
-
WORKDIR $HOME
|
83
|
-
ADD --chown=$USERNAME:$USERNAME image_home_dir/ $HOME
|
84
|
-
|
85
|
-
# configure Firefox to skip all 'first run' UI
|
86
|
-
RUN mkdir -p $HOME/.mozilla/firefox-esr/profile.default && \
|
87
|
-
echo 'user_pref("browser.startup.homepage_override.mstone", "ignore");' >> $HOME/.mozilla/firefox-esr/profile.default/user.js && \
|
88
|
-
echo 'user_pref("browser.aboutwelcome.enabled", false);' >> $HOME/.mozilla/firefox-esr/profile.default/user.js && \
|
89
|
-
echo 'user_pref("datareporting.policy.firstRunURL", "");' >> $HOME/.mozilla/firefox-esr/profile.default/user.js
|
90
|
-
|
91
|
-
EXPOSE 5900
|
92
|
-
EXPOSE 6080
|
93
|
-
|
94
|
-
ARG DISPLAY_NUM=1
|
95
|
-
ARG WIDTH=1920
|
96
|
-
ARG HEIGHT=1080
|
97
|
-
ENV DISPLAY_NUM=$DISPLAY_NUM
|
98
|
-
ENV DISPLAY=:${DISPLAY_NUM}
|
99
|
-
ENV HEIGHT=$HEIGHT
|
100
|
-
ENV WIDTH=$WIDTH
|
101
|
-
|
102
|
-
ENTRYPOINT [ "/opt/inspect/entrypoint/entrypoint.sh" ]
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# About This Image
|
2
|
-
|
3
|
-
This image was inspired by Anthropic's Computer Use Demo [here](https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo/image).
|
4
|
-
|
5
|
-
Its goal is to provide the minimum infrastructure to support the use of Inspect's `computer_tool` to interact with the computer via X11 and `xdotool`, while also providing observability and interaction via VNC and noVNC.
|
6
|
-
|
7
|
-
The image extends this minimal functionality by adding a few basic applications — VS Code, Firefox, XPaint, and galculator.
|
8
|
-
|
9
|
-
## Entrypoint Directory
|
10
|
-
|
11
|
-
1. **Xvfb (X Virtual Framebuffer)**
|
12
|
-
- **Script:** `xvfb_startup.sh`
|
13
|
-
- **Description:** Xvfb is a display server that implements the X11 display server protocol. It runs in memory and does not require a physical display, useful for running graphical applications in a headless environment.
|
14
|
-
|
15
|
-
1. **xfce4**
|
16
|
-
- **Script:** `xfce4_startup.sh`
|
17
|
-
- **Description:** xfce4 is a lightweight desktop environment for UNIX-like operating systems. It aims to be fast, low on system resources, and user-friendly.
|
18
|
-
|
19
|
-
1. **x11vnc**
|
20
|
-
- **Script:** `x11vnc_startup.sh`
|
21
|
-
- **Description:** x11vnc is a VNC server that allows remote access to the X11 display. It enables users to connect to the virtual display environment from a remote machine using a VNC client.
|
22
|
-
|
23
|
-
1. **noVNC**
|
24
|
-
- **Script:** `novnc_startup.sh`
|
25
|
-
- **Description:** noVNC is a VNC client that runs in a web browser. It allows users to access the virtual display environment through a web interface without needing a separate VNC client application.
|
26
|
-
|
27
|
-
## Desktop Directory
|
28
|
-
|
29
|
-
The `Desktop` directory contains launchers for VS Code, Firefox and XPaint.
|
30
|
-
|
@@ -1,18 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
set -e
|
3
|
-
|
4
|
-
# remove marker files
|
5
|
-
rm -f /tmp/.X${DISPLAY_NUM}-lock
|
6
|
-
rm -f /tmp/xfce_started
|
7
|
-
|
8
|
-
/opt/inspect/entrypoint/xvfb_startup.sh
|
9
|
-
/opt/inspect/entrypoint/xfce_startup.sh
|
10
|
-
/opt/inspect/entrypoint/x11vnc_startup.sh
|
11
|
-
/opt/inspect/entrypoint/novnc_startup.sh
|
12
|
-
|
13
|
-
# Run CMD if provided
|
14
|
-
echo "Executing CMD from derived Dockerfile: $@"
|
15
|
-
exec "$@"
|
16
|
-
|
17
|
-
# Keep the container running
|
18
|
-
tail -f /dev/null
|
@@ -1,20 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
echo "starting noVNC"
|
3
|
-
|
4
|
-
# Start noVNC with explicit websocket settings
|
5
|
-
websockify \
|
6
|
-
--web=/usr/share/novnc/ \
|
7
|
-
6080 localhost:5900 \
|
8
|
-
> /tmp/novnc.log 2>&1 &
|
9
|
-
|
10
|
-
# Wait for noVNC to start
|
11
|
-
timeout=10
|
12
|
-
while [ $timeout -gt 0 ]; do
|
13
|
-
if netstat -tuln | grep -q ":6080 "; then
|
14
|
-
break
|
15
|
-
fi
|
16
|
-
sleep 1
|
17
|
-
((timeout--))
|
18
|
-
done
|
19
|
-
|
20
|
-
echo "noVNC started successfully"
|
@@ -1,48 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
echo "starting vnc"
|
3
|
-
|
4
|
-
(x11vnc -display $DISPLAY \
|
5
|
-
-forever \
|
6
|
-
-shared \
|
7
|
-
-wait 50 \
|
8
|
-
-multiptr \
|
9
|
-
-cursor arrow \
|
10
|
-
-rfbport 5900 \
|
11
|
-
-nopw \
|
12
|
-
2>/tmp/x11vnc_stderr.log) &
|
13
|
-
|
14
|
-
x11vnc_pid=$!
|
15
|
-
|
16
|
-
# Wait for x11vnc to start
|
17
|
-
timeout=10
|
18
|
-
while [ $timeout -gt 0 ]; do
|
19
|
-
if netstat -tuln | grep -q ":5900 "; then
|
20
|
-
break
|
21
|
-
fi
|
22
|
-
sleep 1
|
23
|
-
((timeout--))
|
24
|
-
done
|
25
|
-
|
26
|
-
if [ $timeout -eq 0 ]; then
|
27
|
-
echo "x11vnc failed to start, stderr output:" >&2
|
28
|
-
cat /tmp/x11vnc_stderr.log >&2
|
29
|
-
exit 1
|
30
|
-
fi
|
31
|
-
|
32
|
-
: > /tmp/x11vnc_stderr.log
|
33
|
-
|
34
|
-
# Monitor x11vnc process in the background
|
35
|
-
(
|
36
|
-
while true; do
|
37
|
-
if ! kill -0 $x11vnc_pid 2>/dev/null; then
|
38
|
-
echo "x11vnc process crashed, restarting..." >&2
|
39
|
-
if [ -f /tmp/x11vnc_stderr.log ]; then
|
40
|
-
echo "x11vnc stderr output:" >&2
|
41
|
-
cat /tmp/x11vnc_stderr.log >&2
|
42
|
-
rm /tmp/x11vnc_stderr.log
|
43
|
-
fi
|
44
|
-
exec "$0"
|
45
|
-
fi
|
46
|
-
sleep 5
|
47
|
-
done
|
48
|
-
) &
|
@@ -1,48 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
set -e # Exit on error
|
3
|
-
|
4
|
-
DPI=96
|
5
|
-
RES_AND_DEPTH=${WIDTH}x${HEIGHT}x24
|
6
|
-
|
7
|
-
# Function to check if Xvfb is already running
|
8
|
-
check_xvfb_running() {
|
9
|
-
if [ -e /tmp/.X${DISPLAY_NUM}-lock ]; then
|
10
|
-
return 0 # Xvfb is already running
|
11
|
-
else
|
12
|
-
return 1 # Xvfb is not running
|
13
|
-
fi
|
14
|
-
}
|
15
|
-
|
16
|
-
# Function to check if Xvfb is ready
|
17
|
-
wait_for_xvfb() {
|
18
|
-
local timeout=10
|
19
|
-
local start_time=$(date +%s)
|
20
|
-
while ! xdpyinfo >/dev/null 2>&1; do
|
21
|
-
if [ $(($(date +%s) - start_time)) -gt $timeout ]; then
|
22
|
-
echo "Xvfb failed to start within $timeout seconds" >&2
|
23
|
-
return 1
|
24
|
-
fi
|
25
|
-
sleep 0.1
|
26
|
-
done
|
27
|
-
return 0
|
28
|
-
}
|
29
|
-
|
30
|
-
# Check if Xvfb is already running
|
31
|
-
if check_xvfb_running; then
|
32
|
-
echo "Xvfb is already running on display ${DISPLAY}"
|
33
|
-
exit 0
|
34
|
-
fi
|
35
|
-
|
36
|
-
# Start Xvfb
|
37
|
-
Xvfb $DISPLAY -ac -screen 0 $RES_AND_DEPTH -retro -dpi $DPI -nolisten tcp -nolisten unix &
|
38
|
-
XVFB_PID=$!
|
39
|
-
|
40
|
-
# Wait for Xvfb to start
|
41
|
-
if wait_for_xvfb; then
|
42
|
-
echo "Xvfb started successfully on display ${DISPLAY}"
|
43
|
-
echo "Xvfb PID: $XVFB_PID"
|
44
|
-
else
|
45
|
-
echo "Xvfb failed to start"
|
46
|
-
kill $XVFB_PID
|
47
|
-
exit 1
|
48
|
-
fi
|
Binary file
|
@@ -1,61 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
|
3
|
-
<channel name="xfce4-panel" version="1.0">
|
4
|
-
<property name="configver" type="int" value="2"/>
|
5
|
-
<property name="panels" type="array">
|
6
|
-
<value type="int" value="1"/>
|
7
|
-
<property name="dark-mode" type="bool" value="true"/>
|
8
|
-
<property name="panel-1" type="empty">
|
9
|
-
<property name="position" type="string" value="p=6;x=0;y=0"/>
|
10
|
-
<property name="length" type="uint" value="100"/>
|
11
|
-
<property name="position-locked" type="bool" value="true"/>
|
12
|
-
<property name="icon-size" type="uint" value="16"/>
|
13
|
-
<property name="size" type="uint" value="26"/>
|
14
|
-
<property name="plugin-ids" type="array">
|
15
|
-
<value type="int" value="1"/>
|
16
|
-
<value type="int" value="2"/>
|
17
|
-
<value type="int" value="3"/>
|
18
|
-
<value type="int" value="4"/>
|
19
|
-
<value type="int" value="5"/>
|
20
|
-
<value type="int" value="6"/>
|
21
|
-
<value type="int" value="8"/>
|
22
|
-
<value type="int" value="10"/>
|
23
|
-
<value type="int" value="11"/>
|
24
|
-
<value type="int" value="12"/>
|
25
|
-
<value type="int" value="13"/>
|
26
|
-
<value type="int" value="14"/>
|
27
|
-
</property>
|
28
|
-
</property>
|
29
|
-
</property>
|
30
|
-
<property name="plugins" type="empty">
|
31
|
-
<property name="plugin-1" type="string" value="applicationsmenu"/>
|
32
|
-
<property name="plugin-2" type="string" value="tasklist">
|
33
|
-
<property name="grouping" type="uint" value="1"/>
|
34
|
-
</property>
|
35
|
-
<property name="plugin-3" type="string" value="separator">
|
36
|
-
<property name="expand" type="bool" value="true"/>
|
37
|
-
<property name="style" type="uint" value="0"/>
|
38
|
-
</property>
|
39
|
-
<property name="plugin-4" type="string" value="pager"/>
|
40
|
-
<property name="plugin-5" type="string" value="separator">
|
41
|
-
<property name="style" type="uint" value="0"/>
|
42
|
-
</property>
|
43
|
-
<property name="plugin-6" type="string" value="systray">
|
44
|
-
<property name="square-icons" type="bool" value="true"/>
|
45
|
-
</property>
|
46
|
-
<property name="plugin-8" type="string" value="pulseaudio">
|
47
|
-
<property name="enable-keyboard-shortcuts" type="bool" value="true"/>
|
48
|
-
<property name="show-notifications" type="bool" value="true"/>
|
49
|
-
</property>
|
50
|
-
<property name="plugin-9" type="string" value="power-manager-plugin"/>
|
51
|
-
<property name="plugin-10" type="string" value="notification-plugin"/>
|
52
|
-
<property name="plugin-11" type="string" value="separator">
|
53
|
-
<property name="style" type="uint" value="0"/>
|
54
|
-
</property>
|
55
|
-
<property name="plugin-12" type="string" value="clock"/>
|
56
|
-
<property name="plugin-13" type="string" value="separator">
|
57
|
-
<property name="style" type="uint" value="0"/>
|
58
|
-
</property>
|
59
|
-
<property name="plugin-14" type="string" value="actions"/>
|
60
|
-
</property>
|
61
|
-
</channel>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
|
3
|
-
<channel name="xfce4-screensaver" version="1.0">
|
4
|
-
<property name="saver" type="empty">
|
5
|
-
<property name="mode" type="int" value="0" />
|
6
|
-
</property>
|
7
|
-
<property name="lock" type="empty">
|
8
|
-
<property name="enabled" type="bool" value="false" />
|
9
|
-
</property>
|
10
|
-
</channel>
|
@@ -1,91 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
|
3
|
-
<channel name="xfwm4" version="1.0">
|
4
|
-
<property name="general" type="empty">
|
5
|
-
<property name="activate_action" type="string" value="bring" />
|
6
|
-
<property name="borderless_maximize" type="bool" value="true" />
|
7
|
-
<property name="box_move" type="bool" value="false" />
|
8
|
-
<property name="box_resize" type="bool" value="false" />
|
9
|
-
<property name="button_layout" type="string" value="O|SHMC" />
|
10
|
-
<property name="button_offset" type="int" value="0" />
|
11
|
-
<property name="button_spacing" type="int" value="0" />
|
12
|
-
<property name="click_to_focus" type="bool" value="true" />
|
13
|
-
<property name="cycle_apps_only" type="bool" value="false" />
|
14
|
-
<property name="cycle_draw_frame" type="bool" value="true" />
|
15
|
-
<property name="cycle_raise" type="bool" value="false" />
|
16
|
-
<property name="cycle_hidden" type="bool" value="true" />
|
17
|
-
<property name="cycle_minimum" type="bool" value="true" />
|
18
|
-
<property name="cycle_minimized" type="bool" value="false" />
|
19
|
-
<property name="cycle_preview" type="bool" value="true" />
|
20
|
-
<property name="cycle_tabwin_mode" type="int" value="0" />
|
21
|
-
<property name="cycle_workspaces" type="bool" value="false" />
|
22
|
-
<property name="double_click_action" type="string" value="maximize" />
|
23
|
-
<property name="double_click_distance" type="int" value="5" />
|
24
|
-
<property name="double_click_time" type="int" value="250" />
|
25
|
-
<property name="easy_click" type="string" value="Alt" />
|
26
|
-
<property name="focus_delay" type="int" value="250" />
|
27
|
-
<property name="focus_hint" type="bool" value="true" />
|
28
|
-
<property name="focus_new" type="bool" value="true" />
|
29
|
-
<property name="frame_opacity" type="int" value="100" />
|
30
|
-
<property name="frame_border_top" type="int" value="0" />
|
31
|
-
<property name="full_width_title" type="bool" value="true" />
|
32
|
-
<property name="horiz_scroll_opacity" type="bool" value="false" />
|
33
|
-
<property name="inactive_opacity" type="int" value="100" />
|
34
|
-
<property name="maximized_offset" type="int" value="0" />
|
35
|
-
<property name="mousewheel_rollup" type="bool" value="true" />
|
36
|
-
<property name="move_opacity" type="int" value="100" />
|
37
|
-
<property name="placement_mode" type="string" value="center" />
|
38
|
-
<property name="placement_ratio" type="int" value="20" />
|
39
|
-
<property name="popup_opacity" type="int" value="100" />
|
40
|
-
<property name="prevent_focus_stealing" type="bool" value="false" />
|
41
|
-
<property name="raise_delay" type="int" value="250" />
|
42
|
-
<property name="raise_on_click" type="bool" value="true" />
|
43
|
-
<property name="raise_on_focus" type="bool" value="false" />
|
44
|
-
<property name="raise_with_any_button" type="bool" value="true" />
|
45
|
-
<property name="repeat_urgent_blink" type="bool" value="false" />
|
46
|
-
<property name="resize_opacity" type="int" value="100" />
|
47
|
-
<property name="scroll_workspaces" type="bool" value="true" />
|
48
|
-
<property name="shadow_delta_height" type="int" value="0" />
|
49
|
-
<property name="shadow_delta_width" type="int" value="0" />
|
50
|
-
<property name="shadow_delta_x" type="int" value="0" />
|
51
|
-
<property name="shadow_delta_y" type="int" value="-3" />
|
52
|
-
<property name="shadow_opacity" type="int" value="50" />
|
53
|
-
<property name="show_app_icon" type="bool" value="false" />
|
54
|
-
<property name="show_dock_shadow" type="bool" value="true" />
|
55
|
-
<property name="show_frame_shadow" type="bool" value="true" />
|
56
|
-
<property name="show_popup_shadow" type="bool" value="false" />
|
57
|
-
<property name="snap_resist" type="bool" value="false" />
|
58
|
-
<property name="snap_to_border" type="bool" value="true" />
|
59
|
-
<property name="snap_to_windows" type="bool" value="false" />
|
60
|
-
<property name="snap_width" type="int" value="10" />
|
61
|
-
<property name="vblank_mode" type="string" value="auto" />
|
62
|
-
<property name="theme" type="string" value="Default" />
|
63
|
-
<property name="tile_on_move" type="bool" value="true" />
|
64
|
-
<property name="title_alignment" type="string" value="center" />
|
65
|
-
<property name="title_font" type="string" value="Sans Bold 9" />
|
66
|
-
<property name="title_horizontal_offset" type="int" value="0" />
|
67
|
-
<property name="titleless_maximize" type="bool" value="false" />
|
68
|
-
<property name="title_shadow_active" type="string" value="false" />
|
69
|
-
<property name="title_shadow_inactive" type="string" value="false" />
|
70
|
-
<property name="title_vertical_offset_active" type="int" value="0" />
|
71
|
-
<property name="title_vertical_offset_inactive" type="int" value="0" />
|
72
|
-
<property name="toggle_workspaces" type="bool" value="false" />
|
73
|
-
<property name="unredirect_overlays" type="bool" value="true" />
|
74
|
-
<property name="urgent_blink" type="bool" value="false" />
|
75
|
-
<property name="use_compositing" type="bool" value="true" />
|
76
|
-
<property name="workspace_count" type="int" value="1" />
|
77
|
-
<property name="wrap_cycle" type="bool" value="true" />
|
78
|
-
<property name="wrap_layout" type="bool" value="true" />
|
79
|
-
<property name="wrap_resistance" type="int" value="10" />
|
80
|
-
<property name="wrap_windows" type="bool" value="true" />
|
81
|
-
<property name="wrap_workspaces" type="bool" value="false" />
|
82
|
-
<property name="zoom_desktop" type="bool" value="true" />
|
83
|
-
<property name="zoom_pointer" type="bool" value="true" />
|
84
|
-
<property name="workspace_names" type="array">
|
85
|
-
<value type="string" value="Workspace 1" />
|
86
|
-
<value type="string" value="Workspace 2" />
|
87
|
-
<value type="string" value="Workspace 3" />
|
88
|
-
<value type="string" value="Workspace 4" />
|
89
|
-
</property>
|
90
|
-
</property>
|
91
|
-
</channel>
|