qubicl-cli 0.1.0-dev.0 → 0.1.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/README.md +46 -21
- package/dist/SBOM.spdx.json +222 -0
- package/dist/THIRD_PARTY_NOTICES.txt +244 -0
- package/dist/assets/chromium-seccomp.json +181 -0
- package/dist/assets/computer/BROWSER_SKILLS_THIRD_PARTY_NOTICES.txt +23 -0
- package/dist/assets/computer/Dockerfile +191 -49
- package/dist/assets/computer/PLAYWRIGHT_THIRD_PARTY_NOTICES.txt +217 -0
- package/dist/assets/computer/SKILLS_THIRD_PARTY_NOTICES.txt +29 -0
- package/dist/assets/computer/THIRD_PARTY_NOTICES.txt +28 -0
- package/dist/assets/computer/WEB_THIRD_PARTY_NOTICES.txt +42 -0
- package/dist/assets/computer/browser-skills-requirements.txt +12 -0
- package/dist/assets/computer/chromium-wrapper.sh +12 -0
- package/dist/assets/computer/control.mjs +112 -52
- package/dist/assets/computer/entrypoint.sh +272 -35
- package/dist/assets/computer/libreoffice-registrymodifications.xcu +8 -0
- package/dist/assets/computer/manifests/browser.json +72 -0
- package/dist/assets/computer/manifests/computer.json +76 -0
- package/dist/assets/computer/manifests/file-system.json +42 -0
- package/dist/assets/computer/manifests/workstation.json +78 -0
- package/dist/assets/computer/node_modules/playwright-core/LICENSE +202 -0
- package/dist/assets/computer/node_modules/playwright-core/NOTICE +5 -0
- package/dist/assets/computer/node_modules/playwright-core/ThirdPartyNotices.txt +13 -0
- package/dist/assets/computer/node_modules/playwright-core/browsers.json +75 -0
- package/dist/assets/computer/node_modules/playwright-core/index.js +17 -0
- package/dist/assets/computer/node_modules/playwright-core/index.mjs +28 -0
- package/dist/assets/computer/node_modules/playwright-core/lib/bootstrap.js +88 -0
- package/dist/assets/computer/node_modules/playwright-core/lib/coreBundle.js +74830 -0
- package/dist/assets/computer/node_modules/playwright-core/lib/utilsBundle.js +90764 -0
- package/dist/assets/computer/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +2179 -0
- package/dist/assets/computer/node_modules/playwright-core/lib/webp_codec.LICENSE +173 -0
- package/dist/assets/computer/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
- package/dist/assets/computer/node_modules/playwright-core/lib/xdg-open +1267 -0
- package/dist/assets/computer/node_modules/playwright-core/package.json +34 -0
- package/dist/assets/computer/skills/core/docx/LICENSE +21 -0
- package/dist/assets/computer/skills/core/docx/SKILL.md +21 -0
- package/dist/assets/computer/skills/core/docx/references/revisions-and-comments.md +88 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_comments.py +289 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_common.py +94 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_create.py +177 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_edit.py +250 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_read.py +149 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_revisions.py +147 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_template.py +70 -0
- package/dist/assets/computer/skills/core/docx/scripts/docx_validate.py +156 -0
- package/dist/assets/computer/skills/core/ocr-and-documents/LICENSE +21 -0
- package/dist/assets/computer/skills/core/ocr-and-documents/SKILL.md +24 -0
- package/dist/assets/computer/skills/core/ocr-and-documents/scripts/ocr_document.py +132 -0
- package/dist/assets/computer/skills/core/pdf/LICENSE +21 -0
- package/dist/assets/computer/skills/core/pdf/SKILL.md +25 -0
- package/dist/assets/computer/skills/core/pdf/references/forms.md +100 -0
- package/dist/assets/computer/skills/core/pdf/scripts/_raster.py +76 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_create.py +130 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_fill_form.py +97 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_form_layout.py +168 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_make_form.py +145 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_merge.py +50 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_meta.py +115 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_page_image.py +99 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_read.py +153 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_secure.py +71 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_split.py +84 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_stamp.py +143 -0
- package/dist/assets/computer/skills/core/pdf/scripts/pdf_watermark.py +51 -0
- package/dist/assets/computer/skills/core/plan/LICENSE +21 -0
- package/dist/assets/computer/skills/core/plan/SKILL.md +21 -0
- package/dist/assets/computer/skills/core/powerpoint/LICENSE +21 -0
- package/dist/assets/computer/skills/core/powerpoint/SKILL.md +18 -0
- package/dist/assets/computer/skills/core/powerpoint/scripts/pptx_create.py +214 -0
- package/dist/assets/computer/skills/core/powerpoint/scripts/pptx_edit.py +436 -0
- package/dist/assets/computer/skills/core/powerpoint/scripts/pptx_from_template.py +88 -0
- package/dist/assets/computer/skills/core/powerpoint/scripts/pptx_read.py +131 -0
- package/dist/assets/computer/skills/core/powerpoint/scripts/pptx_render.py +93 -0
- package/dist/assets/computer/skills/core/xlsx/LICENSE +21 -0
- package/dist/assets/computer/skills/core/xlsx/SKILL.md +22 -0
- package/dist/assets/computer/skills/core/xlsx/references/restructuring.md +71 -0
- package/dist/assets/computer/skills/core/xlsx/scripts/csv_to_xlsx.py +104 -0
- package/dist/assets/computer/skills/core/xlsx/scripts/xlsx_create.py +259 -0
- package/dist/assets/computer/skills/core/xlsx/scripts/xlsx_edit.py +263 -0
- package/dist/assets/computer/skills/core/xlsx/scripts/xlsx_read.py +160 -0
- package/dist/assets/computer/skills/core/xlsx/scripts/xlsx_recalc.py +110 -0
- package/dist/assets/computer/skills/core/xlsx/scripts/xlsx_restructure.py +337 -0
- package/dist/assets/computer/skills/core/xlsx/scripts/xlsx_to_csv.py +69 -0
- package/dist/assets/computer/skills/core-catalog.json +246 -0
- package/dist/assets/computer/skills-requirements.txt +18 -0
- package/dist/assets/computer/web-provider.py +592 -0
- package/dist/assets/computer/web-requirements.txt +37 -0
- package/dist/assets/gateway/Dockerfile +3 -1
- package/dist/assets/gateway/gateway.mjs +69 -40
- package/dist/assets/image-catalog.json +183 -0
- package/dist/qubicl.mjs +297 -167
- package/package.json +7 -7
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
{
|
|
2
|
+
"defaultAction": "SCMP_ACT_ERRNO",
|
|
3
|
+
"defaultErrnoRet": 1,
|
|
4
|
+
"archMap": [
|
|
5
|
+
{ "architecture": "SCMP_ARCH_X86_64", "subArchitectures": ["SCMP_ARCH_X86", "SCMP_ARCH_X32"] },
|
|
6
|
+
{ "architecture": "SCMP_ARCH_AARCH64", "subArchitectures": ["SCMP_ARCH_ARM"] },
|
|
7
|
+
{ "architecture": "SCMP_ARCH_MIPS64", "subArchitectures": ["SCMP_ARCH_MIPS", "SCMP_ARCH_MIPS64N32"] },
|
|
8
|
+
{ "architecture": "SCMP_ARCH_MIPS64N32", "subArchitectures": ["SCMP_ARCH_MIPS", "SCMP_ARCH_MIPS64"] },
|
|
9
|
+
{ "architecture": "SCMP_ARCH_MIPSEL64", "subArchitectures": ["SCMP_ARCH_MIPSEL", "SCMP_ARCH_MIPSEL64N32"] },
|
|
10
|
+
{ "architecture": "SCMP_ARCH_MIPSEL64N32", "subArchitectures": ["SCMP_ARCH_MIPSEL", "SCMP_ARCH_MIPSEL64"] },
|
|
11
|
+
{ "architecture": "SCMP_ARCH_S390X", "subArchitectures": ["SCMP_ARCH_S390"] },
|
|
12
|
+
{ "architecture": "SCMP_ARCH_RISCV64", "subArchitectures": null }
|
|
13
|
+
],
|
|
14
|
+
"syscalls": [
|
|
15
|
+
{
|
|
16
|
+
"names": [
|
|
17
|
+
"accept", "accept4", "access", "adjtimex", "alarm", "bind", "brk", "capget", "capset",
|
|
18
|
+
"chdir", "chmod", "chown", "chown32", "clock_adjtime", "clock_adjtime64", "clock_getres",
|
|
19
|
+
"clock_getres_time64", "clock_gettime", "clock_gettime64", "clock_nanosleep", "clock_nanosleep_time64",
|
|
20
|
+
"close", "close_range", "connect", "copy_file_range", "creat", "dup", "dup2", "dup3", "epoll_create",
|
|
21
|
+
"epoll_create1", "epoll_ctl", "epoll_ctl_old", "epoll_pwait", "epoll_pwait2", "epoll_wait", "epoll_wait_old",
|
|
22
|
+
"eventfd", "eventfd2", "execve", "execveat", "exit", "exit_group", "faccessat", "faccessat2", "fadvise64",
|
|
23
|
+
"fadvise64_64", "fallocate", "fanotify_mark", "fchdir", "fchmod", "fchmodat", "fchown",
|
|
24
|
+
"fchown32", "fchownat", "fcntl", "fcntl64", "fdatasync", "fgetxattr", "flistxattr", "flock", "fork",
|
|
25
|
+
"fremovexattr", "fsetxattr", "fstat", "fstat64", "fstatat64", "fstatfs", "fstatfs64", "fsync", "ftruncate",
|
|
26
|
+
"ftruncate64", "futex", "futex_time64", "futex_waitv",
|
|
27
|
+
"futimesat", "getcpu", "getcwd", "getdents", "getdents64", "getegid", "getegid32", "geteuid", "geteuid32",
|
|
28
|
+
"getgid", "getgid32", "getgroups", "getgroups32", "getitimer", "getpeername", "getpgid", "getpgrp", "getpid",
|
|
29
|
+
"getppid", "getpriority", "getrandom", "getresgid", "getresgid32", "getresuid", "getresuid32", "getrlimit",
|
|
30
|
+
"get_robust_list", "getrusage", "getsid", "getsockname", "getsockopt", "get_thread_area", "gettid",
|
|
31
|
+
"gettimeofday", "getuid", "getuid32", "getxattr", "inotify_add_watch", "inotify_init",
|
|
32
|
+
"inotify_init1", "inotify_rm_watch", "io_cancel", "ioctl", "io_destroy", "io_getevents", "io_pgetevents",
|
|
33
|
+
"io_pgetevents_time64", "ioprio_get", "ioprio_set", "io_setup", "io_submit", "ipc", "kill", "landlock_add_rule",
|
|
34
|
+
"landlock_create_ruleset", "landlock_restrict_self", "lchown", "lchown32", "lgetxattr", "link", "linkat",
|
|
35
|
+
"listen", "listxattr", "llistxattr", "_llseek", "lremovexattr", "lseek", "lsetxattr",
|
|
36
|
+
"lstat", "lstat64", "madvise", "membarrier", "memfd_create", "memfd_secret", "mincore",
|
|
37
|
+
"mkdir", "mkdirat", "mknod", "mknodat", "mlock", "mlock2", "mlockall", "mmap", "mmap2", "mprotect",
|
|
38
|
+
"mq_getsetattr", "mq_notify", "mq_open", "mq_timedreceive", "mq_timedreceive_time64", "mq_timedsend",
|
|
39
|
+
"mq_timedsend_time64", "mq_unlink", "mremap", "msgctl", "msgget", "msgrcv", "msgsnd", "msync",
|
|
40
|
+
"munlock", "munlockall", "munmap", "nanosleep", "newfstatat", "_newselect", "open",
|
|
41
|
+
"openat", "openat2", "pause", "pidfd_open", "pidfd_send_signal", "pipe", "pipe2", "pkey_alloc", "pkey_free",
|
|
42
|
+
"pkey_mprotect", "poll", "ppoll", "ppoll_time64", "prctl", "pread64", "preadv", "preadv2", "prlimit64",
|
|
43
|
+
"process_mrelease", "pselect6", "pselect6_time64", "pwrite64", "pwritev", "pwritev2", "read", "readahead",
|
|
44
|
+
"readlink", "readlinkat", "readv", "recv", "recvfrom", "recvmmsg", "recvmmsg_time64", "recvmsg",
|
|
45
|
+
"remap_file_pages", "removexattr", "rename", "renameat", "renameat2", "restart_syscall",
|
|
46
|
+
"rmdir", "rseq", "rt_sigaction", "rt_sigpending", "rt_sigprocmask", "rt_sigqueueinfo",
|
|
47
|
+
"rt_sigreturn", "rt_sigsuspend", "rt_sigtimedwait", "rt_sigtimedwait_time64", "rt_tgsigqueueinfo",
|
|
48
|
+
"sched_getaffinity", "sched_getattr", "sched_getparam", "sched_get_priority_max", "sched_get_priority_min",
|
|
49
|
+
"sched_getscheduler", "sched_rr_get_interval", "sched_rr_get_interval_time64", "sched_setaffinity", "sched_setattr",
|
|
50
|
+
"sched_setparam", "sched_setscheduler", "sched_yield", "seccomp", "select", "semctl", "semget", "semop",
|
|
51
|
+
"semtimedop", "semtimedop_time64", "send", "sendfile", "sendfile64", "sendmmsg", "sendmsg", "sendto",
|
|
52
|
+
"setfsgid", "setfsgid32", "setfsuid", "setfsuid32", "setgid", "setgid32", "setgroups", "setgroups32",
|
|
53
|
+
"setitimer", "setpgid", "setpriority", "setregid", "setregid32", "setresgid", "setresgid32", "setresuid",
|
|
54
|
+
"setresuid32", "setreuid", "setreuid32", "setrlimit", "set_robust_list", "setsid", "setsockopt",
|
|
55
|
+
"set_thread_area", "set_tid_address", "setuid", "setuid32", "setxattr", "shmat", "shmctl",
|
|
56
|
+
"shmdt", "shmget", "shutdown", "sigaltstack", "signalfd", "signalfd4", "sigprocmask", "sigreturn",
|
|
57
|
+
"socketcall", "socketpair", "splice", "stat", "stat64", "statfs", "statfs64", "statx", "symlink",
|
|
58
|
+
"symlinkat", "sync", "sync_file_range", "syncfs", "sysinfo", "tee", "tgkill", "time", "timer_create",
|
|
59
|
+
"timer_delete", "timer_getoverrun", "timer_gettime", "timer_gettime64", "timer_settime", "timer_settime64",
|
|
60
|
+
"timerfd_create", "timerfd_gettime", "timerfd_gettime64", "timerfd_settime", "timerfd_settime64", "times",
|
|
61
|
+
"tkill", "truncate", "truncate64", "ugetrlimit", "umask", "uname", "unlink", "unlinkat", "utime",
|
|
62
|
+
"utimensat", "utimensat_time64", "utimes", "vfork", "vmsplice", "wait4", "waitid", "waitpid", "write", "writev"
|
|
63
|
+
],
|
|
64
|
+
"action": "SCMP_ACT_ALLOW"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"names": ["process_vm_readv", "process_vm_writev", "ptrace"],
|
|
68
|
+
"action": "SCMP_ACT_ALLOW",
|
|
69
|
+
"includes": { "minKernel": "4.8" }
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"names": ["socket"],
|
|
73
|
+
"action": "SCMP_ACT_ALLOW",
|
|
74
|
+
"args": [{ "index": 0, "value": 40, "op": "SCMP_CMP_NE" }]
|
|
75
|
+
},
|
|
76
|
+
{ "names": ["personality"], "action": "SCMP_ACT_ALLOW", "args": [{ "index": 0, "value": 0, "op": "SCMP_CMP_EQ" }] },
|
|
77
|
+
{ "names": ["personality"], "action": "SCMP_ACT_ALLOW", "args": [{ "index": 0, "value": 8, "op": "SCMP_CMP_EQ" }] },
|
|
78
|
+
{ "names": ["personality"], "action": "SCMP_ACT_ALLOW", "args": [{ "index": 0, "value": 131072, "op": "SCMP_CMP_EQ" }] },
|
|
79
|
+
{ "names": ["personality"], "action": "SCMP_ACT_ALLOW", "args": [{ "index": 0, "value": 131080, "op": "SCMP_CMP_EQ" }] },
|
|
80
|
+
{ "names": ["personality"], "action": "SCMP_ACT_ALLOW", "args": [{ "index": 0, "value": 4294967295, "op": "SCMP_CMP_EQ" }] },
|
|
81
|
+
{
|
|
82
|
+
"names": ["sync_file_range2", "swapcontext"],
|
|
83
|
+
"action": "SCMP_ACT_ALLOW",
|
|
84
|
+
"includes": { "arches": ["ppc64le"] }
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"names": ["arm_fadvise64_64", "arm_sync_file_range", "sync_file_range2", "breakpoint", "cacheflush", "set_tls"],
|
|
88
|
+
"action": "SCMP_ACT_ALLOW",
|
|
89
|
+
"includes": { "arches": ["arm", "arm64"] }
|
|
90
|
+
},
|
|
91
|
+
{ "names": ["arch_prctl"], "action": "SCMP_ACT_ALLOW", "includes": { "arches": ["amd64", "x32"] } },
|
|
92
|
+
{ "names": ["modify_ldt"], "action": "SCMP_ACT_ALLOW", "includes": { "arches": ["amd64", "x32", "x86"] } },
|
|
93
|
+
{
|
|
94
|
+
"names": ["s390_pci_mmio_read", "s390_pci_mmio_write", "s390_runtime_instr"],
|
|
95
|
+
"action": "SCMP_ACT_ALLOW",
|
|
96
|
+
"includes": { "arches": ["s390", "s390x"] }
|
|
97
|
+
},
|
|
98
|
+
{ "names": ["riscv_flush_icache"], "action": "SCMP_ACT_ALLOW", "includes": { "arches": ["riscv64"] } },
|
|
99
|
+
{ "names": ["open_by_handle_at"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_DAC_READ_SEARCH"] } },
|
|
100
|
+
{
|
|
101
|
+
"names": ["bpf", "clone", "clone3", "fanotify_init", "fsconfig", "fsmount", "fsopen", "fspick",
|
|
102
|
+
"lookup_dcookie", "mount", "mount_setattr", "move_mount", "name_to_handle_at", "open_tree",
|
|
103
|
+
"perf_event_open", "quotactl", "quotactl_fd", "setdomainname", "sethostname",
|
|
104
|
+
"setns", "syslog", "umount", "umount2", "unshare"],
|
|
105
|
+
"action": "SCMP_ACT_ALLOW",
|
|
106
|
+
"includes": { "caps": ["CAP_SYS_ADMIN"] }
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"names": ["clone"],
|
|
110
|
+
"action": "SCMP_ACT_ALLOW",
|
|
111
|
+
"args": [{ "index": 0, "value": 2114060288, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
112
|
+
"excludes": { "caps": ["CAP_SYS_ADMIN"], "arches": ["s390", "s390x"] }
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"names": ["clone"],
|
|
116
|
+
"action": "SCMP_ACT_ALLOW",
|
|
117
|
+
"args": [{ "index": 1, "value": 2114060288, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
118
|
+
"comment": "s390 parameter ordering for clone is different",
|
|
119
|
+
"includes": { "arches": ["s390", "s390x"] },
|
|
120
|
+
"excludes": { "caps": ["CAP_SYS_ADMIN"] }
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"names": ["clone"],
|
|
124
|
+
"action": "SCMP_ACT_ALLOW",
|
|
125
|
+
"args": [{ "index": 0, "value": 2114060288, "valueTwo": 268435456, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
126
|
+
"comment": "Qubicl session only: Chromium user-namespace feature probe.",
|
|
127
|
+
"excludes": { "arches": ["s390", "s390x"] }
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"names": ["clone"],
|
|
131
|
+
"action": "SCMP_ACT_ALLOW",
|
|
132
|
+
"args": [{ "index": 0, "value": 2114060288, "valueTwo": 805306368, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
133
|
+
"comment": "Qubicl session only: Chromium user and PID namespaces.",
|
|
134
|
+
"excludes": { "arches": ["s390", "s390x"] }
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"names": ["clone"],
|
|
138
|
+
"action": "SCMP_ACT_ALLOW",
|
|
139
|
+
"args": [{ "index": 0, "value": 2114060288, "valueTwo": 1342177280, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
140
|
+
"comment": "Qubicl session only: Chromium user and network namespaces.",
|
|
141
|
+
"excludes": { "arches": ["s390", "s390x"] }
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"names": ["clone"],
|
|
145
|
+
"action": "SCMP_ACT_ALLOW",
|
|
146
|
+
"args": [{ "index": 0, "value": 2114060288, "valueTwo": 1879048192, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
147
|
+
"comment": "Qubicl session only: Chromium user, PID, and network namespaces.",
|
|
148
|
+
"excludes": { "arches": ["s390", "s390x"] }
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"names": ["clone"],
|
|
152
|
+
"action": "SCMP_ACT_ALLOW",
|
|
153
|
+
"args": [{ "index": 0, "value": 2114060288, "valueTwo": 536870912, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
154
|
+
"comment": "Qubicl session only: Chromium forks inside its established user namespace into a PID namespace.",
|
|
155
|
+
"excludes": { "arches": ["s390", "s390x"] }
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"names": ["unshare"],
|
|
159
|
+
"action": "SCMP_ACT_ALLOW",
|
|
160
|
+
"args": [{ "index": 0, "value": 2114060288, "valueTwo": 268435456, "op": "SCMP_CMP_MASKED_EQ" }],
|
|
161
|
+
"comment": "Qubicl session only: Chromium enters a second unprivileged user namespace."
|
|
162
|
+
},
|
|
163
|
+
{ "names": ["clone3"], "action": "SCMP_ACT_ERRNO", "errnoRet": 38, "excludes": { "caps": ["CAP_SYS_ADMIN"] } },
|
|
164
|
+
{ "names": ["reboot"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_BOOT"] } },
|
|
165
|
+
{ "names": ["chroot"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_CHROOT"] } },
|
|
166
|
+
{ "names": ["delete_module", "init_module", "finit_module"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_MODULE"] } },
|
|
167
|
+
{ "names": ["acct"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_PACCT"] } },
|
|
168
|
+
{
|
|
169
|
+
"names": ["kcmp", "pidfd_getfd", "process_madvise", "process_vm_readv", "process_vm_writev", "ptrace"],
|
|
170
|
+
"action": "SCMP_ACT_ALLOW",
|
|
171
|
+
"includes": { "caps": ["CAP_SYS_PTRACE"] }
|
|
172
|
+
},
|
|
173
|
+
{ "names": ["iopl", "ioperm"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_RAWIO"] } },
|
|
174
|
+
{ "names": ["settimeofday", "stime", "clock_settime", "clock_settime64"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_TIME"] } },
|
|
175
|
+
{ "names": ["vhangup"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_TTY_CONFIG"] } },
|
|
176
|
+
{ "names": ["get_mempolicy", "mbind", "set_mempolicy"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYS_NICE"] } },
|
|
177
|
+
{ "names": ["syslog"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_SYSLOG"] } },
|
|
178
|
+
{ "names": ["bpf"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_BPF"] } },
|
|
179
|
+
{ "names": ["perf_event_open"], "action": "SCMP_ACT_ALLOW", "includes": { "caps": ["CAP_PERFMON"] } }
|
|
180
|
+
]
|
|
181
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Qubicl browser document-inspection dependencies
|
|
2
|
+
|
|
3
|
+
The exact dependency closure is pinned in browser-skills-requirements.txt.
|
|
4
|
+
Distribution license texts are retained under
|
|
5
|
+
/usr/share/doc/qubicl/skills-python-licenses in browser images. These packages
|
|
6
|
+
are installed only in the isolated /opt/qubicl/skills-venv.
|
|
7
|
+
|
|
8
|
+
Package Version License
|
|
9
|
+
cffi 2.1.1 MIT-0
|
|
10
|
+
charset-normalizer 3.5.1 MIT
|
|
11
|
+
cryptography 50.0.0 Apache-2.0 OR BSD-3-Clause
|
|
12
|
+
pdfminer.six 20260107 MIT
|
|
13
|
+
pdfplumber 0.11.10 MIT
|
|
14
|
+
pillow 12.3.0 MIT-CMU
|
|
15
|
+
pycparser 3.0 BSD-3-Clause
|
|
16
|
+
pypdf 6.16.1 BSD-3-Clause
|
|
17
|
+
pypdfium2 5.13.0 BSD-3-Clause / Apache-2.0 / bundled notices
|
|
18
|
+
reportlab 5.0.1 BSD
|
|
19
|
+
typing_extensions 4.16.0 PSF-2.0
|
|
20
|
+
|
|
21
|
+
No Hermes Agent runtime is installed or required. PyMuPDF, pymupdf4llm, and
|
|
22
|
+
pymupdf-layout are not bundled because their AGPL-3.0-or-commercial licensing
|
|
23
|
+
is outside Qubicl's curated permissive Python dependency policy.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
FROM node:22-trixie-slim@sha256:db8a96a63e5264607ada2d206758876ebbed6a12be2ada7517793cbfb0c2a29c
|
|
1
|
+
FROM node:22-trixie-slim@sha256:db8a96a63e5264607ada2d206758876ebbed6a12be2ada7517793cbfb0c2a29c AS filesystem-base
|
|
2
2
|
|
|
3
3
|
ARG QUBICL_VERSION=development
|
|
4
4
|
ARG QUBICL_REVISION=unknown
|
|
@@ -6,7 +6,7 @@ ARG QUBICL_CREATED=unknown
|
|
|
6
6
|
ARG QUBICL_SOURCE=https://github.com/EldanRing/qubicl
|
|
7
7
|
|
|
8
8
|
LABEL org.opencontainers.image.title="Qubicl computer" \
|
|
9
|
-
org.opencontainers.image.description="Private Docker computer
|
|
9
|
+
org.opencontainers.image.description="Private Docker computer for compatible AI agents" \
|
|
10
10
|
org.opencontainers.image.licenses="Apache-2.0" \
|
|
11
11
|
org.opencontainers.image.source="$QUBICL_SOURCE" \
|
|
12
12
|
org.opencontainers.image.url="$QUBICL_SOURCE" \
|
|
@@ -18,73 +18,215 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|
|
18
18
|
RUN apt-get update \
|
|
19
19
|
&& apt-get upgrade -y \
|
|
20
20
|
&& apt-get install -y --no-install-recommends \
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
scrot \
|
|
40
|
-
sudo \
|
|
41
|
-
thunar \
|
|
42
|
-
tini \
|
|
43
|
-
websockify \
|
|
44
|
-
x11vnc \
|
|
45
|
-
x11-utils \
|
|
46
|
-
x11-xserver-utils \
|
|
47
|
-
xclip \
|
|
48
|
-
xdotool \
|
|
49
|
-
xdg-utils \
|
|
50
|
-
xfce4 \
|
|
51
|
-
xfce4-terminal \
|
|
52
|
-
xserver-xorg-core \
|
|
53
|
-
xvfb \
|
|
21
|
+
ca-certificates \
|
|
22
|
+
curl \
|
|
23
|
+
fd-find \
|
|
24
|
+
file \
|
|
25
|
+
gh \
|
|
26
|
+
git \
|
|
27
|
+
jq \
|
|
28
|
+
procps \
|
|
29
|
+
python3 \
|
|
30
|
+
python3-venv \
|
|
31
|
+
ripgrep \
|
|
32
|
+
sudo \
|
|
33
|
+
tini \
|
|
34
|
+
tree \
|
|
35
|
+
unzip \
|
|
36
|
+
wget \
|
|
37
|
+
zip \
|
|
38
|
+
&& ln -s /usr/bin/fdfind /usr/local/bin/fd \
|
|
54
39
|
&& rm -rf /var/lib/apt/lists/*
|
|
55
40
|
|
|
56
41
|
ARG NPM_VERSION=12.0.2
|
|
57
|
-
# npm 12.0.2's lock still selects vulnerable, semver-compatible transitive versions.
|
|
58
|
-
# Replace only those bundled copies until a later npm release includes the fixes.
|
|
59
42
|
RUN npm install --global "npm@$NPM_VERSION" \
|
|
60
43
|
&& npm install --prefix /tmp/npm-security-patches \
|
|
61
|
-
--ignore-scripts \
|
|
62
|
-
|
|
63
|
-
--no-fund \
|
|
64
|
-
--package-lock=false \
|
|
65
|
-
brace-expansion@5.0.9 \
|
|
66
|
-
ip-address@10.3.1 \
|
|
44
|
+
--ignore-scripts --no-audit --no-fund --package-lock=false \
|
|
45
|
+
brace-expansion@5.0.9 ip-address@10.3.1 tar@7.5.21 \
|
|
67
46
|
&& rm -rf \
|
|
68
47
|
/usr/local/lib/node_modules/npm/node_modules/brace-expansion \
|
|
69
48
|
/usr/local/lib/node_modules/npm/node_modules/ip-address \
|
|
49
|
+
/usr/local/lib/node_modules/npm/node_modules/tar \
|
|
70
50
|
&& cp -a /tmp/npm-security-patches/node_modules/brace-expansion \
|
|
71
51
|
/usr/local/lib/node_modules/npm/node_modules/brace-expansion \
|
|
72
52
|
&& cp -a /tmp/npm-security-patches/node_modules/ip-address \
|
|
73
53
|
/usr/local/lib/node_modules/npm/node_modules/ip-address \
|
|
54
|
+
&& cp -a /tmp/npm-security-patches/node_modules/tar \
|
|
55
|
+
/usr/local/lib/node_modules/npm/node_modules/tar \
|
|
74
56
|
&& rm -rf /tmp/npm-security-patches \
|
|
75
57
|
&& npm cache clean --force
|
|
76
58
|
|
|
77
59
|
RUN groupmod --new-name qubicl node \
|
|
78
60
|
&& usermod --login qubicl --home /home/qubicl --move-home --shell /bin/bash node \
|
|
79
|
-
&&
|
|
80
|
-
&& chmod 0440 /etc/sudoers.d/qubicl \
|
|
81
|
-
&& printf 'CHROMIUM_FLAGS="$CHROMIUM_FLAGS --no-sandbox"\n' >/etc/chromium.d/qubicl-container \
|
|
61
|
+
&& rm -f /etc/sudoers.d/qubicl \
|
|
82
62
|
&& install -d -o qubicl -g qubicl /opt/qubicl
|
|
83
63
|
|
|
84
64
|
COPY --chown=qubicl:qubicl control.mjs /opt/qubicl/control.mjs
|
|
85
|
-
COPY
|
|
65
|
+
COPY --chown=qubicl:qubicl web-provider.py /opt/qubicl/web-provider.py
|
|
66
|
+
COPY web-requirements.txt /opt/qubicl/web-requirements.txt
|
|
67
|
+
COPY --chown=qubicl:qubicl skills /opt/qubicl/skills
|
|
68
|
+
COPY LICENSE THIRD_PARTY_NOTICES.txt WEB_THIRD_PARTY_NOTICES.txt /usr/share/doc/qubicl/
|
|
86
69
|
COPY entrypoint.sh /usr/local/bin/qubicl-entrypoint
|
|
87
|
-
RUN
|
|
70
|
+
RUN python3 -m venv /opt/qubicl/web-venv \
|
|
71
|
+
&& /opt/qubicl/web-venv/bin/pip install --no-cache-dir --requirement /opt/qubicl/web-requirements.txt \
|
|
72
|
+
&& install -d /usr/share/doc/qubicl/web-python-licenses \
|
|
73
|
+
&& find /opt/qubicl/web-venv/lib -type f \( -iname 'LICENSE*' -o -iname 'COPYING*' \) \
|
|
74
|
+
-exec cp --parents '{}' /usr/share/doc/qubicl/web-python-licenses/ \; \
|
|
75
|
+
&& find /opt/qubicl/web-venv -type d -name __pycache__ -prune -exec rm -rf '{}' + \
|
|
76
|
+
&& chmod 0755 /usr/local/bin/qubicl-entrypoint /opt/qubicl/web-provider.py \
|
|
77
|
+
&& chown -R qubicl:qubicl /opt/qubicl/web-venv
|
|
88
78
|
|
|
89
|
-
EXPOSE 3212 6080 6081
|
|
90
79
|
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/qubicl-entrypoint"]
|
|
80
|
+
|
|
81
|
+
FROM filesystem-base AS display-browser-base
|
|
82
|
+
|
|
83
|
+
COPY --chown=qubicl:qubicl node_modules/playwright-core /opt/qubicl/node_modules/playwright-core
|
|
84
|
+
COPY PLAYWRIGHT_THIRD_PARTY_NOTICES.txt /usr/share/doc/qubicl/
|
|
85
|
+
COPY chromium-wrapper.sh /usr/local/bin/qubicl-chromium
|
|
86
|
+
|
|
87
|
+
# noVNC is static browser content at runtime. Extract Debian's signed package
|
|
88
|
+
# without installing its unnecessary dependency on Debian's second Node stack.
|
|
89
|
+
RUN apt-get update \
|
|
90
|
+
&& apt-get install -y --no-install-recommends \
|
|
91
|
+
chromium \
|
|
92
|
+
dbus-x11 \
|
|
93
|
+
fonts-dejavu-core \
|
|
94
|
+
scrot \
|
|
95
|
+
websockify \
|
|
96
|
+
x11-utils \
|
|
97
|
+
x11-xserver-utils \
|
|
98
|
+
x11vnc \
|
|
99
|
+
xclip \
|
|
100
|
+
xdotool \
|
|
101
|
+
xdg-utils \
|
|
102
|
+
xserver-xorg-core \
|
|
103
|
+
xvfb \
|
|
104
|
+
&& install -d -m 0755 -o _apt -g root /tmp/qubicl-novnc-package \
|
|
105
|
+
&& cd /tmp/qubicl-novnc-package \
|
|
106
|
+
&& apt-get download novnc \
|
|
107
|
+
&& dpkg-deb --extract ./novnc_*.deb / \
|
|
108
|
+
&& cd / \
|
|
109
|
+
&& test -s /usr/share/novnc/vnc.html \
|
|
110
|
+
&& test -s /usr/share/doc/novnc/copyright \
|
|
111
|
+
&& rm -rf /tmp/qubicl-novnc-package /var/lib/apt/lists/* \
|
|
112
|
+
&& rm -f /etc/chromium.d/dev-shm \
|
|
113
|
+
&& chmod 0755 /usr/local/bin/qubicl-chromium \
|
|
114
|
+
&& printf 'CHROMIUM_FLAGS="$CHROMIUM_FLAGS --no-first-run --no-default-browser-check"\n' >/etc/chromium.d/qubicl-container
|
|
115
|
+
|
|
116
|
+
FROM display-browser-base AS document-inspection-base
|
|
117
|
+
RUN apt-get update \
|
|
118
|
+
&& apt-get install -y --no-install-recommends \
|
|
119
|
+
poppler-utils \
|
|
120
|
+
tesseract-ocr \
|
|
121
|
+
tesseract-ocr-eng \
|
|
122
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
123
|
+
|
|
124
|
+
FROM document-inspection-base AS browser-runtime
|
|
125
|
+
COPY browser-skills-requirements.txt /opt/qubicl/browser-skills-requirements.txt
|
|
126
|
+
COPY BROWSER_SKILLS_THIRD_PARTY_NOTICES.txt /usr/share/doc/qubicl/
|
|
127
|
+
RUN apt-get update \
|
|
128
|
+
&& apt-get install -y --no-install-recommends openbox \
|
|
129
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
130
|
+
&& python3 -m venv /opt/qubicl/skills-venv \
|
|
131
|
+
&& /opt/qubicl/skills-venv/bin/pip install --no-cache-dir --requirement /opt/qubicl/browser-skills-requirements.txt \
|
|
132
|
+
&& install -d /usr/share/doc/qubicl/skills-python-licenses \
|
|
133
|
+
&& find /opt/qubicl/skills-venv/lib -type f \( -iname 'LICENSE*' -o -iname 'COPYING*' \) \
|
|
134
|
+
-exec cp --parents '{}' /usr/share/doc/qubicl/skills-python-licenses/ \; \
|
|
135
|
+
&& find /opt/qubicl/skills-venv -type d -name __pycache__ -prune -exec rm -rf '{}' + \
|
|
136
|
+
&& chown -R qubicl:qubicl /opt/qubicl/skills-venv
|
|
137
|
+
|
|
138
|
+
FROM document-inspection-base AS computer-runtime
|
|
139
|
+
COPY skills-requirements.txt /opt/qubicl/skills-requirements.txt
|
|
140
|
+
COPY SKILLS_THIRD_PARTY_NOTICES.txt /usr/share/doc/qubicl/
|
|
141
|
+
RUN apt-get update \
|
|
142
|
+
&& apt-get install -y --no-install-recommends \
|
|
143
|
+
mousepad \
|
|
144
|
+
nano \
|
|
145
|
+
openssh-client \
|
|
146
|
+
openssh-server \
|
|
147
|
+
python3-pip \
|
|
148
|
+
thunar \
|
|
149
|
+
vim \
|
|
150
|
+
xfce4-panel \
|
|
151
|
+
xfce4-session \
|
|
152
|
+
xfce4-settings \
|
|
153
|
+
xfce4-terminal \
|
|
154
|
+
xfdesktop4 \
|
|
155
|
+
xfwm4 \
|
|
156
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
157
|
+
&& rm -f /etc/ssh/ssh_host_*_key* \
|
|
158
|
+
&& python3 -m venv /opt/qubicl/skills-venv \
|
|
159
|
+
&& /opt/qubicl/skills-venv/bin/pip install --no-cache-dir --requirement /opt/qubicl/skills-requirements.txt \
|
|
160
|
+
&& install -d /usr/share/doc/qubicl/skills-python-licenses \
|
|
161
|
+
&& find /opt/qubicl/skills-venv/lib -type f \( -iname 'LICENSE*' -o -iname 'COPYING*' \) \
|
|
162
|
+
-exec cp --parents '{}' /usr/share/doc/qubicl/skills-python-licenses/ \; \
|
|
163
|
+
&& find /opt/qubicl/skills-venv -type d -name __pycache__ -prune -exec rm -rf '{}' + \
|
|
164
|
+
&& chown -R qubicl:qubicl /opt/qubicl/skills-venv
|
|
165
|
+
|
|
166
|
+
FROM computer-runtime AS workstation-runtime
|
|
167
|
+
RUN apt-get update \
|
|
168
|
+
&& apt-get install -y --no-install-recommends \
|
|
169
|
+
build-essential \
|
|
170
|
+
iproute2 \
|
|
171
|
+
libreoffice \
|
|
172
|
+
netcat-openbsd \
|
|
173
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
174
|
+
&& install -d -m 0755 /etc/skel/.config/libreoffice/4/user
|
|
175
|
+
|
|
176
|
+
COPY libreoffice-registrymodifications.xcu /etc/skel/.config/libreoffice/4/user/registrymodifications.xcu
|
|
177
|
+
|
|
178
|
+
FROM filesystem-base AS file-system
|
|
179
|
+
ARG QUBICL_MANIFEST_SHA256
|
|
180
|
+
ARG QUBICL_CONTRACT_PRESET
|
|
181
|
+
ARG QUBICL_CONTRACT_COMPATIBILITY
|
|
182
|
+
ARG QUBICL_CONTRACT_CAPABILITIES
|
|
183
|
+
COPY --chown=qubicl:qubicl manifests/file-system.json /opt/qubicl/computer-manifest.json
|
|
184
|
+
ENV QUBICL_IMAGE_STARTUP_PROFILE=file-system
|
|
185
|
+
LABEL dev.qubicl.contract-version="1" \
|
|
186
|
+
dev.qubicl.preset="$QUBICL_CONTRACT_PRESET" \
|
|
187
|
+
dev.qubicl.compatibility="$QUBICL_CONTRACT_COMPATIBILITY" \
|
|
188
|
+
dev.qubicl.capabilities="$QUBICL_CONTRACT_CAPABILITIES" \
|
|
189
|
+
dev.qubicl.manifest-sha256="$QUBICL_MANIFEST_SHA256"
|
|
190
|
+
EXPOSE 3212
|
|
191
|
+
|
|
192
|
+
FROM browser-runtime AS browser
|
|
193
|
+
ARG QUBICL_MANIFEST_SHA256
|
|
194
|
+
ARG QUBICL_CONTRACT_PRESET
|
|
195
|
+
ARG QUBICL_CONTRACT_COMPATIBILITY
|
|
196
|
+
ARG QUBICL_CONTRACT_CAPABILITIES
|
|
197
|
+
COPY --chown=qubicl:qubicl manifests/browser.json /opt/qubicl/computer-manifest.json
|
|
198
|
+
ENV QUBICL_IMAGE_STARTUP_PROFILE=browser
|
|
199
|
+
LABEL dev.qubicl.contract-version="1" \
|
|
200
|
+
dev.qubicl.preset="$QUBICL_CONTRACT_PRESET" \
|
|
201
|
+
dev.qubicl.compatibility="$QUBICL_CONTRACT_COMPATIBILITY" \
|
|
202
|
+
dev.qubicl.capabilities="$QUBICL_CONTRACT_CAPABILITIES" \
|
|
203
|
+
dev.qubicl.manifest-sha256="$QUBICL_MANIFEST_SHA256"
|
|
204
|
+
EXPOSE 3212 6080 6081
|
|
205
|
+
|
|
206
|
+
FROM computer-runtime AS computer
|
|
207
|
+
ARG QUBICL_MANIFEST_SHA256
|
|
208
|
+
ARG QUBICL_CONTRACT_PRESET
|
|
209
|
+
ARG QUBICL_CONTRACT_COMPATIBILITY
|
|
210
|
+
ARG QUBICL_CONTRACT_CAPABILITIES
|
|
211
|
+
COPY --chown=qubicl:qubicl manifests/computer.json /opt/qubicl/computer-manifest.json
|
|
212
|
+
ENV QUBICL_IMAGE_STARTUP_PROFILE=desktop
|
|
213
|
+
LABEL dev.qubicl.contract-version="1" \
|
|
214
|
+
dev.qubicl.preset="$QUBICL_CONTRACT_PRESET" \
|
|
215
|
+
dev.qubicl.compatibility="$QUBICL_CONTRACT_COMPATIBILITY" \
|
|
216
|
+
dev.qubicl.capabilities="$QUBICL_CONTRACT_CAPABILITIES" \
|
|
217
|
+
dev.qubicl.manifest-sha256="$QUBICL_MANIFEST_SHA256"
|
|
218
|
+
EXPOSE 3212 6080 6081
|
|
219
|
+
|
|
220
|
+
FROM workstation-runtime AS workstation
|
|
221
|
+
ARG QUBICL_MANIFEST_SHA256
|
|
222
|
+
ARG QUBICL_CONTRACT_PRESET
|
|
223
|
+
ARG QUBICL_CONTRACT_COMPATIBILITY
|
|
224
|
+
ARG QUBICL_CONTRACT_CAPABILITIES
|
|
225
|
+
COPY --chown=qubicl:qubicl manifests/workstation.json /opt/qubicl/computer-manifest.json
|
|
226
|
+
ENV QUBICL_IMAGE_STARTUP_PROFILE=workstation
|
|
227
|
+
LABEL dev.qubicl.contract-version="1" \
|
|
228
|
+
dev.qubicl.preset="$QUBICL_CONTRACT_PRESET" \
|
|
229
|
+
dev.qubicl.compatibility="$QUBICL_CONTRACT_COMPATIBILITY" \
|
|
230
|
+
dev.qubicl.capabilities="$QUBICL_CONTRACT_CAPABILITIES" \
|
|
231
|
+
dev.qubicl.manifest-sha256="$QUBICL_MANIFEST_SHA256"
|
|
232
|
+
EXPOSE 3212 6080 6081
|