diff --git a/etc/miss.sh b/etc/miss.sh
index 2fad1d7d..532c853f 100644
--- a/etc/miss.sh
+++ b/etc/miss.sh
@@ -11,20 +11,20 @@ ish_miss_prepare_project
ish_miss_prepare_contexts
ish_miss_prepare_intshell
-ish_miss_prepare_learning
ish_miss_prepare_volcanos
+ish_miss_prepare_learning
ish_miss_prepare_toolkits
ish_miss_prepare_icebergs
ish_miss_prepare_release
-ish_miss_prepare icons
+# ish_miss_prepare go-git
+# ish_miss_prepare go-qrcode
+# ish_miss_prepare websocket
+# ish_miss_prepare wubi-dict
+# ish_miss_prepare word-dict
+# ish_miss_prepare webview
ish_miss_prepare matrix
-ish_miss_prepare go-git
-ish_miss_prepare go-qrcode
-ish_miss_prepare websocket
-ish_miss_prepare webview
-ish_miss_prepare wubi-dict
-ish_miss_prepare word-dict
+ish_miss_prepare icons
ish_miss_make
[ -z "$*" ] || ish_miss_serve "$@"
diff --git a/src/document/commands/base/web/dream.shy b/src/document/commands/base/web/dream.shy
new file mode 100644
index 00000000..27ad0715
--- /dev/null
+++ b/src/document/commands/base/web/dream.shy
@@ -0,0 +1,13 @@
+title "dream"
+spark `dream 命令,工作空间管理。`
+
+chapter "界面"
+spark demo dream
+
+chapter "参数"
+
+chapter "操作"
+
+chapter "监听事件"
+
+chapter "配置"
diff --git a/src/document/commands/index.shy b/src/document/commands/index.shy
index ade2604c..1f007fd8 100644
--- a/src/document/commands/index.shy
+++ b/src/document/commands/index.shy
@@ -1,42 +1,40 @@
navmenu `
基础模块 base/
+ aaa aaa/
+ user user.shy
+ cli cli/
+ daemon daemon.shy
+ system system.shy
ctx ctx/
command command.shy
config config.shy
- cli cli/
- system system.shy
- daemon daemon.shy
- web web/
- serve serve.shy
- space space.shy
- aaa aaa/
- user user.shy
-
- lex lex/
- yac yac/
- ssh ssh/
- gdb gdb/
-
+ nfs nfs/
+ cat cat.shy
+ dir dir.shy
tcp tcp/
host host.shy
- nfs nfs/
- dir dir.shy
- cat cat.shy
- mdb mdb/
- log log/
-
-功能模块 core/
+ web web/
+ space space.shy
+ dream dream.shy
+ serve serve.shy
+ space space.shy
+核心模块 core/
+ location usr/icebergs/core/chat/location.shy
code code/
compile compile.shy
publish publish.shy
+ xterm usr/icebergs/core/code/xterm.shy
+ plan usr/icebergs/core/team/plan.shy
wiki wiki/
word word.shy
- chat chat/
- team team/
- mall mall/
-
其它模块 misc/
- tmux tmux/
- session session.shy
- buffer buffer.shy
-`
+ chrome.chrome usr/icebergs/misc/chrome/chrome.shy
+ git.git usr/icebergs/misc/git/git.shy
+ git.search usr/icebergs/misc/git/search.shy
+ java.java usr/icebergs/misc/java/java.shy
+ java.spring usr/icebergs/misc/java/spring.shy
+ node.node usr/icebergs/misc/node/node.shy
+ node.npm usr/icebergs/misc/node/npm.shy
+ node.vue usr/icebergs/misc/node/vue.shy
+ tmux.tmux usr/icebergs/misc/tmux/tmux.shy
+`
\ No newline at end of file
diff --git a/src/document/download/content.shy b/src/document/download/content.shy
index bbd946e1..bdbf7361 100644
--- a/src/document/download/content.shy
+++ b/src/document/download/content.shy
@@ -1,48 +1,42 @@
title "快速下载"
chapter "下载程序"
spark `Contexts 使用 Golang 开发,支持交叉编译,所以在各种操作系统上都只需要一个 bin 文件,直接下载执行即可。`
-spark `为了方便下载并快速启动,可以使用如下命令。
+spark `
+为了方便下载并快速启动,可以使用如下命令。
自动选择下载命令 curl 或 wget,
自动识别出操作系统与处理器类型,然后下载所需的 bin 文件,并自动启动服务进程。
-点击下面的命令,即可直接复制,然后打开命令行终端,执行一下即可。`
+点击下面的命令,即可直接复制,然后打开命令行终端,执行一下即可。
+`
web.code.publish binary
spark `在 Windows 系统上,可以下载 Git-Bash,在 Git-Bash 的命令行中下载。`
chapter "使用方式"
-spark `下载成功后,会自动启动服务进程,并会启动一个可交互的 shell。
+spark `
+下载成功后,会自动启动服务进程,并会启动一个可交互的 shell。
既可以在命令行中,通过命令的方式,使用 Contexts 提供的所有软件工具,
-也可以在浏览器中,通过网页的方式,使用所有的软件工具。`
+也可以在浏览器中,通过网页的方式,使用所有的软件工具。
+`
spark `在启动的 shell 中执行命令,输入命令 exit,并输入回车键,即可退出服务进程。`
spark `也可以通过信号控制进程,Ctrl+C 重启进程,Ctrl+\\ 退出进程。`
spark `再次启动服务进程,输入命令 ./bin/ice.bin 即可。`
section "目录结构"
-spark `
-下载成功后,Contexts 会以当前目录为工作空间,相关的数据与文件也只会保存在当前目录。所以下载之前,最好先创建一个目录 contexts。
-`
+spark `下载成功后,Contexts 会以当前目录为工作空间,相关的数据与文件也只会保存在当前目录。所以下载之前,最好先创建一个目录 contexts。`
order `
./bin/ice.bin 程序文件
./var/conf/ 配置目录
./var/data/ 数据目录
./var/log/ 日志目录
`
-spark `
-其中 ./bin/ice.bin 就是下载的程序文件,直接运行即可使用。其它的文件,都是在程序运行时生成的文件。
-`
+spark `其中 ./bin/ice.bin 就是下载的程序文件,直接运行即可使用。其它的文件,都是在程序运行时生成的文件。`
section "终端命令"
spark `
contexts 可以创建任意多个工作空间,为了保证每个工作空间的完整性与独立性,每个工作空间下都会保存运行所需的所有文件。
所以并不需要将 ice.bin 文件放到全局的 PATH 中,在当前工作空间的目录中,完成所有操作。
`
-spark `
-Contexts 也支持在命令行终端中执行一次性命令。
-`
+spark `Contexts 也支持在命令行终端中执行一次性命令。`
spark `查看网卡信息`
-shell `
-./bin/ice.bin tcp.host
-`
+shell `./bin/ice.bin tcp.host`
spark `执行本机系统命令,pwd 查看当前路径。`
-shell `
-./bin/ice.bin cli.system pwd
-`
+shell `./bin/ice.bin cli.system pwd`
diff --git a/src/document/started/feature/repos.shy b/src/document/started/feature/repos.shy
new file mode 100644
index 00000000..f9c19fb7
--- /dev/null
+++ b/src/document/started/feature/repos.shy
@@ -0,0 +1,18 @@
+title "应用市场"
+spark `对于操作系统来说,进程与文件就是最基本的元素。`
+spark `对于工具系统来说,空间与源码就是最基本的元素。`
+spark `
+就像程序文件可以用来启动进程,项目源码可以直接启动 Contexts 的工作空间,工作空间的所有配置与数据也会保存到项目源码中。
+所以代码平台直接可以成为应用市场,项目源码可以一键启动工作空间。
+`
+chapter "代码平台"
+spark `
+Contexts 提供了完整的前后端框架与工具,可以快速开发出新的项目与模块。
+基于 Contexts 框架开发的项目,都可以直接用来启动 Contexts 的空间。
+这些项目可以存放到任意的平台上,在启动工作空间时,指定代码地址即可。
+`
+spark `
+为了方便用户使用,Contexts 提供了代码平台 https://repos.shylinux.com/explore/repos。
+也可以通过命令工具 web.code.git.search 来访问。在项目列表中,点启动按钮,可以直接下载代码并启动工作空间。
+`
+spark demo web.code.git.search args repos
diff --git a/src/document/started/feature/share.shy b/src/document/started/feature/share.shy
new file mode 100644
index 00000000..96bae265
--- /dev/null
+++ b/src/document/started/feature/share.shy
@@ -0,0 +1,6 @@
+title "共享链接"
+spark `在 Contexts 的工具系统中,所有的工作空间与命令工具,都可以一键共享,就可以实现多设备协同,或是多人协同使用。`
+
+chapter "共享工具"
+chapter "共享群组"
+chapter "共享空间"
\ No newline at end of file
diff --git a/src/document/started/feature/space.shy b/src/document/started/feature/space.shy
index a0387cc4..e14a2101 100644
--- a/src/document/started/feature/space.shy
+++ b/src/document/started/feature/space.shy
@@ -1,11 +1,15 @@
title "工作空间"
-spark `Contexts 下载并启动后,会以当前运行目录为工作空间,加载启动脚本和保存数据与文件。
+spark `
+Contexts 下载并启动后,会以当前运行目录为工作空间,加载启动脚本和保存数据与文件。
Contexts 不推荐使用全局的资源或家目录的文件,为了减少全局依赖与资源冲突。从而可以在一台机器上启动任意多个空间。
-Contexts 推荐使用空间来管理项目与任务。`
-spark `Contexts 每个空间都是一个独立的目录,与独立的守护进程。
-每个空间既可以使用相同的 Contexts,也可以使用不同的 Contexts,即不同的工具集合。因为每个项目内容可能是不一样的,使用的工具也可能是不一样的。`
+Contexts 推荐使用空间来管理项目与任务。
+`
+spark `
+Contexts 每个空间都是一个独立的目录,与独立的守护进程。
+每个空间既可以使用相同的 Contexts,也可以使用不同的 Contexts,即不同的工具集合。因为每个项目内容可能是不一样的,使用的工具也可能是不一样的。
+`
-chapter "创建空间"
+chapter "空间管理"
section "启动服务"
spark `首先,启动 Contexts 服务。并打开后台管理系统。http://localhost:9020/chat/portal/`
shell `
@@ -14,13 +18,8 @@ open http://localhost:9020
`
section "打开工具"
-spark `如果导航栏未定制,在左边导航栏中打开运维群 -> 应用,然后在右边工作区中,找到 dream,即空间管理的工具。`
-spark `http://localhost:9020/chat/portal/?river=operate&storm=web&index=web.dream`
-iframe "http://localhost:9020/chat/portal/?river=operate&storm=web&index=web.dream"
-spark `或在搜索框中,直接搜索 dream 即可打开空间管理的工具。`
-spark `http://localhost:9020?_search=dream`
-iframe "http://localhost:9020?_search=dream"
-spark `或是直接打开命令网页,http://localhost:9020/chat/cmd/web.dream`
+spark `打开管理系统后,点击标题栏中的 "空间",打开空间管理工具,`
+spark `或是直接通过地址打开空间管理工具 http://localhost:9020/chat/cmd/dream`
spark demo dream
section "创建空间"
@@ -28,11 +27,13 @@ spark `点击工具栏中的创建按钮,即可打开创建对话框。`
spark `空间创建有 name、repos、binary、template 四个参数,其中 name 是必选参数,指定空间名,创建空间时,Contexts 会默认给空间名加一个时间前缀。`
order `
repos 指定 git 仓库地址,Contexts 将此仓库下载到本地,然后把此目录当成工作空间。
-binary 指定 bin 文件,Contexts 会自动下载并使用这个 bin 文件,来启动守护进程。
+binary 指定 bin 文件,Contexts 会自动下载并使用这个 bin 文件,来直接启动守护进程。
template 指定模板目录,空间创建时,会从模板目录中复制所需要的文件。
`
-spark `空间创建成功后,会在 ./usr/local/work 目录下创建一个空间的目录。并启动一个守护进程。
-守护进程会自动连接服务进程,从而使用服务进程提供的网页,来访问此空间。`
+spark `
+空间创建成功后,会在 ./usr/local/work 目录下创建一个空间的目录。并启动一个守护进程。
+守护进程会自动连接服务进程,从而使用服务进程提供的网页,来访问此空间。
+`
section "使用空间"
spark `空间创建成功后,会自动打开空间首页。之后也可以在空间工具中,随时打开任意空间的首页。`
@@ -45,13 +46,18 @@ spark `Contexts 中的空间,除有独立的目录与进程,用来进行资
spark `虽然工作空间,默认没有分配端口,没有启动任何服务,但是可以通过服务进程作反向代理,将工作空间内的工具、文件、资源对外发布。`
section "服务源"
-spark `Contexts 的工作空间启动后,可以通过服务进程中的空间管理工具来操作。
-也可以在单独网页中使用。例如 redis-story 项目的首页地址是 http://localhost:9020/chat/pod/20230511-redis-story`
+spark `
+Contexts 的工作空间启动后,可以通过服务进程中的空间管理工具来操作。
+也可以在单独网页中使用。例如 redis-story 项目的首页地址是 http://localhost:9020/chat/pod/20230511-redis-story
+`
iframe "http://localhost:9020/chat/pod/20230511-redis-story"
-spark `每个工作空间,都可以灵活的配置自己的首页。Contexts 中的所有工具,都有自己的网页界面,都可以作为空间的首页来使用。
-例如 redis-story 项目,就选择 web.code.macos.desktop 命令作为自己的首页,这样打开 redis-story 空间,就是一个电脑桌面,完全用图标和窗口来使用所有工具。`
+spark `
+每个工作空间,都可以灵活的配置自己的首页。Contexts 中的所有工具,都有自己的网页界面,都可以作为空间的首页来使用。
+例如 redis-story 项目,就选择 web.code.macos.desktop 命令作为自己的首页,这样打开 redis-story 空间,就是一个电脑桌面,完全用图标和窗口来使用所有工具。
+`
-spark `因为 Contexts 的工作空间,就是一个工作目录加一个守护进程,资源占有非常少,比虚拟机或是容器占有更少的资源。
+spark `
+因为 Contexts 的工作空间,就是一个工作目录加一个守护进程,资源占有非常少,比虚拟机或是容器占有更少的资源。
Contexts 的工作空间,为项目管理与服务部署,提供了一个更加轻量、更加完备的解决方案。
`
spark `每个工作空间下的所有软件工具也可以单独使用。如下地址,pod 和 cmd 分别指定空间名与命令名。`
@@ -62,16 +68,22 @@ section "镜像源"
spark `Contexts 使用 Golang 开发,所以具备了交叉编译的功能。Contexts 封装了一个编译工具 web.code.compile,可以方便的将本空间的代码编译成指定系统与架构的程序,并将相关资源一起打包。`
spark `http://localhost:9020/chat/cmd/compile`
spark `编译后的程序文件会放到空间目录的 ./usr/publish/ 目录下,通过服务进程作了一个代理,就可以在其它机器,直接下载这个空间的程序文件,并起动任意多个完全相同的空间。`
-spark `这种使用方式,其实就是最快速的 devops,
+spark `
+这种使用方式,其实就是最快速的 devops,
原始空间就是开发环境,在其它机器起动的空间就是测试环境或生产环境,
-从开发环境到生产环境,之间所有环节完全打通,甚至可以做到,从开发到上线,只需要一秒钟。并且开发环境与生产环境,完全同时在线,可以实现更快速的闭环互动,全面加速整个研发流程。`
-spark `如果直接用 wget 或 curl 命令,直接访问工作空间的地址,服务进程检测到请求头 UserAgent 判断出是命令行中的请求。则会直接返回空间的程序文件。
-因为 bin 文件中,打包了完整的资源文件,所以这样就可以在另一台设备上,快速部署出一个完全一样的工作空间。这个命令只是简单的下载程序文件,在实际使用时,会从空间中复制一个功能更完整的下载命令。`
+从开发环境到生产环境,之间所有环节完全打通,甚至可以做到,从开发到上线,只需要一秒钟。并且开发环境与生产环境,完全同时在线,可以实现更快速的闭环互动,全面加速整个研发流程。
+`
+spark `
+如果直接用 wget 或 curl 命令,直接访问工作空间的地址,服务进程检测到请求头 UserAgent 判断出是命令行中的请求。则会直接返回空间的程序文件。
+因为 bin 文件中,打包了完整的资源文件,所以这样就可以在另一台设备上,快速部署出一个完全一样的工作空间。这个命令只是简单的下载程序文件,在实际使用时,会从空间中复制一个功能更完整的下载命令。
+`
shell `wget http://localhost:9020/chat/pod/20230511-redis-story`
section "代码源"
-spark `每个工作空间,都可以绑定一个代码库,在空间目录下的所有文件,都可以被提交到代码库里,包括代码、配置、数据等。
-不同机器的上工作空间就可以通过代码库,来同步代码与数据,并且记录每次变更的信息。同一台机器上的不同空间,当然也可以共用一个代码库。`
+spark `
+每个工作空间,都可以绑定一个代码库,在空间目录下的所有文件,都可以被提交到代码库里,包括代码、配置、数据等。
+不同机器的上工作空间就可以通过代码库,来同步代码与数据,并且记录每次变更的信息。同一台机器上的不同空间,当然也可以共用一个代码库。
+`
spark `每个空间的地址,可以直接当成代码地址来使用。服务节点,会自动去查询工作空间的仓库地址,做一个内部重定向。`
shell `git clone http://localhost:9020/chat/pod/20230511-redis-story`
diff --git a/src/document/started/index.shy b/src/document/started/index.shy
index 75125355..a4476d9f 100644
--- a/src/document/started/index.shy
+++ b/src/document/started/index.shy
@@ -23,7 +23,8 @@ navmenu `
"应用桌面" desktop.shy
"高级特性" feature/
- "创建空间" space.shy
+ "应用市场" repos.shy
+ "工作空间" space.shy
"组建集群" cluster.shy
"共享链接" share.shy
"认证授权" auth.shy
diff --git a/src/document/started/share.shy b/src/document/started/share.shy
new file mode 100644
index 00000000..c53329c7
--- /dev/null
+++ b/src/document/started/share.shy
@@ -0,0 +1 @@
+title "共享链接"
\ No newline at end of file
diff --git a/src/template/web.chat.header/theme/black.css b/src/template/web.chat.header/theme/black.css
index 25b435fc..ccce74c3 100644
--- a/src/template/web.chat.header/theme/black.css
+++ b/src/template/web.chat.header/theme/black.css
@@ -1,9 +1,8 @@
body.black {
--body-fg-color:cyan;
+ --box-border:darkcyan solid 1px;
--legend-bg-color:#061c3c9e;
--input-bg-color:transparent;
- --box-border: darkcyan solid 1px;
- /* --panel-output-bg-color: var(--body-bg-color); */
}
body.black fieldset.panel.auto { background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); }
body.black fieldset.panel.auto>div.output { background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); }
diff --git a/src/template/web.chat.header/theme/blue.css b/src/template/web.chat.header/theme/blue.css
index 7834d2a0..63db0032 100644
--- a/src/template/web.chat.header/theme/blue.css
+++ b/src/template/web.chat.header/theme/blue.css
@@ -1,5 +1,5 @@
body.blue {
+ --box-border:#9c9cb070 solid 1px;
--legend-bg-color:var(--ui-blue-10);
--input-bg-color:var(--ui-geekblue-10);
- --box-border:#9c9cb070 solid 1px;
}
diff --git a/src/template/web.chat.header/theme/dark.css b/src/template/web.chat.header/theme/dark.css
index 6adc5ac4..ef5185f0 100644
--- a/src/template/web.chat.header/theme/dark.css
+++ b/src/template/web.chat.header/theme/dark.css
@@ -1,5 +1,5 @@
body.dark {
--legend-bg-color:black;
--input-bg-color:#202123;
- --panel-output-bg-color: var(--body-bg-color);
+ --panel-output-bg-color:var(--body-bg-color);
}
diff --git a/src/template/web.chat.header/theme/light.css b/src/template/web.chat.header/theme/light.css
index 6b9ed96c..7b7a2291 100644
--- a/src/template/web.chat.header/theme/light.css
+++ b/src/template/web.chat.header/theme/light.css
@@ -1,22 +1,21 @@
body.light {
- --body-bg-color:#4a566e;
- --body-fg-color:black;
- --legend-bg-color:aliceblue;
- --input-bg-color:white;
+ --body-bg-color:#4a566e; --body-fg-color:black;
--box-border:lightgray solid 1px;
--box-shadow:gray 2px 2px 8px;
+ --hover-fg-color:var(--input-fg-color);
+ --legend-bg-color:aliceblue;
+ --input-bg-color:white;
--panel-output-bg-color: var(--body-bg-color);
--panel-output-fg-color:#d0d3da;
--panel-input-bg-color:#6b7488;
--panel-input-fg-color:white;
--panel-hover-fg-color:white;
- --hover-fg-color:var(--input-fg-color);
--code-fg-color:white;
--code-comment:green; --code-keyword:darkblue; --code-package:blue;
--code-datatype:cornflowerblue; --code-function:darkcyan;
--code-constant:gray; --code-string:brown; --code-object:purple;
}
-body.light fieldset.panel:not(.main) input { background-color:var(--panel-input-bg-color); color:var(--panel-input-fg-color); }
-body.light fieldset.panel:not(.main) input::placeholder { background-color:var(--panel-input-bg-color); color:var(--panel-fg-color); }
-body.light fieldset.panel:not(.main) { --hover-fg-color:white; }
+body.light fieldset.panel:not(.main):not(.auto) input { background-color:var(--panel-input-bg-color); color:var(--panel-input-fg-color); }
+body.light fieldset.panel:not(.main):not(.auto) input::placeholder { background-color:var(--panel-input-bg-color); color:var(--panel-fg-color); }
+body.light fieldset.panel:not(.main):not(.auto) { --hover-fg-color:white; }
diff --git a/src/template/web.chat.header/theme/red.css b/src/template/web.chat.header/theme/red.css
index 70c41a87..6b5081c0 100644
--- a/src/template/web.chat.header/theme/red.css
+++ b/src/template/web.chat.header/theme/red.css
@@ -1,7 +1,6 @@
body.red {
+ --box-border:#9c9cb070 solid 1px;
--legend-bg-color:var(--ui-volcano-9);
--input-bg-color:var(--ui-red-10);
- /* --box-border:red solid 1px; */
- --box-border:#9c9cb070 solid 1px;
}
diff --git a/src/template/web.chat.header/theme/silver.css b/src/template/web.chat.header/theme/silver.css
index a9daf791..2b69d025 100644
--- a/src/template/web.chat.header/theme/silver.css
+++ b/src/template/web.chat.header/theme/silver.css
@@ -1,5 +1,5 @@
body.silver {
+ --box-border: gray solid 1px;
--legend-bg-color:#2d323e;
--input-bg-color:#202430;
- --box-border: gray solid 1px;
}
diff --git a/src/template/web.chat.header/theme/white.css b/src/template/web.chat.header/theme/white.css
index 1c1b4024..06afd4d7 100644
--- a/src/template/web.chat.header/theme/white.css
+++ b/src/template/web.chat.header/theme/white.css
@@ -1,15 +1,14 @@
body.white {
--body-fg-color:black;
- --legend-bg-color:#ffffffc2;
- --input-bg-color:transparent;
--box-border:lightgray solid 1px;
--box-shadow:gray 2px 2px 8px;
+ --hover-fg-color:var(--input-fg-color);
+ --legend-bg-color:#ffffffc2;
+ --input-bg-color:transparent;
--panel-output-fg-color:lavender;
- /* --panel-output-bg-color: var(--plugin-bg-color); */
--panel-input-bg-color:var(--input-bg-color);
--panel-input-fg-color:lavender;
--panel-hover-fg-color:white;
- --hover-fg-color:var(--input-fg-color);
--code-fg-color:white;
--code-comment:green; --code-keyword:darkblue; --code-package:blue;
diff --git a/src/template/web.code.publish/binary.sh b/src/template/web.code.publish/binary.sh
index af09f135..84153bb5 100644
--- a/src/template/web.code.publish/binary.sh
+++ b/src/template/web.code.publish/binary.sh
@@ -1,2 +1,2 @@
mkdir contexts; cd contexts
-ctx_dev={{.Option "domain"}}{{.Option "ctx_env"}} temp=$(mktemp); if curl -h &>/dev/null; then curl -o $temp -fsSL $ctx_dev; else wget -O $temp -q $ctx_dev; fi; source $temp binary
+export ctx_dev={{.Option "domain"}}{{.Option "ctx_env"}} temp=$(mktemp); if curl -h &>/dev/null; then curl -o $temp -fsSL $ctx_dev; else wget -O $temp -q $ctx_dev; fi; source $temp binary