Compare commits

..
9 Commits
Author SHA1 Message Date
kun ec5e4c6256 更新 4600Pro/BookOrbit/.env 2026-09-26 01:09:55 +08:00
kun 3def817f7a fix: ignore local IDE workspace and generated caches 2026-09-26 01:07:00 +08:00
kun 8f65336fa7 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	.idea/workspace.xml
2026-09-26 01:04:48 +08:00
kun bb826c05ce update 26.09.26 2026-09-26 01:04:38 +08:00
kun 9d7de90373 Merge remote-tracking branch 'origin/main' 2026-09-22 09:35:03 +08:00
kun 2f595a8226 update 26.9.22 2026-09-22 09:34:55 +08:00
kun 27b5f4771a 更新 480T/hindsight/.env 2026-09-05 06:50:06 +08:00
kun 5ca8c1d4da 更新 480T/hindsight/.env 2026-09-05 05:40:50 +08:00
kun ffd1b2fde9 更新 480T/hindsight/.env 2026-09-05 05:05:49 +08:00
12 changed files with 289 additions and 794 deletions
+9
View File
@@ -0,0 +1,9 @@
# macOS generated files
.DS_Store
# Python generated caches
__pycache__/
*.py[cod]
# PyCharm personal workspace state
.idea/workspace.xml
-4
View File
@@ -1,4 +0,0 @@
<changelist name="在进行更新之前于_2026_8_31_10_29_取消提交了更改_[更改]" date="1788143371090" recycled="true" deleted="true">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_8_31_10_29_取消提交了更改_[更改]/shelved.patch" />
<option name="DESCRIPTION" value="在进行更新之前于 2026/8/31 10:29 取消提交了更改 [更改]" />
</changelist>
-4
View File
@@ -1,4 +0,0 @@
<changelist name="在进行更新之前于_2026_9_1_01_18_取消提交了更改_[更改]" date="1788196719138" recycled="true" deleted="true">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在进行更新之前于_2026_9_1_01_18_取消提交了更改_[更改]/shelved.patch" />
<option name="DESCRIPTION" value="在进行更新之前于 2026/9/1 01:18 取消提交了更改 [更改]" />
</changelist>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-555
View File
@@ -1,555 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="ALL" />
</component>
<component name="ChangeListManager">
<list default="true" id="ae3fb6a0-aca4-4c0a-858b-91952e6dcdd3" name="更改" comment="update 26.9.2">
<change afterPath="$PROJECT_DIR$/480T/WechatOnCloud/.env" afterDir="false" />
<change afterPath="$PROJECT_DIR$/480T/WechatOnCloud/docker-compose.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/480T/n8n_service/.env" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="GitHubPullRequestSearchHistory">{
&quot;lastFilter&quot;: {
&quot;state&quot;: &quot;OPEN&quot;,
&quot;assignee&quot;: &quot;K7Unle&quot;
}
}</component>
<component name="GithubPullRequestsUISettings">{
&quot;selectedUrlAndAccountId&quot;: {
&quot;url&quot;: &quot;https://github.com/odysseus-dev/odysseus.git&quot;,
&quot;accountId&quot;: &quot;59f646c1-e8fd-42ab-afc6-29303ea39a06&quot;
}
}</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 2,
&quot;fromUser&quot;: false
}</component>
<component name="ProjectId" id="3H46bMJcHkyVuOl0gvBGV4kmqAO" />
<component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
"ModuleVcsDetector.initialDetectionPerformed": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
"RunOnceActivity.typescript.service.memoryLimit.init": "true",
"codeWithMe.voiceChat.enabledByDefault": "false",
"git-widget-placeholder": "main",
"last_opened_file_path": "/Users/kun/PycharmProjects/Docker_Compose/480T/WechatOnCloud",
"node.js.detected.package.jshint": "true",
"node.js.selected.package.jshint": "",
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "configurable.group.project"
},
"keyToStringList": {
"com.intellij.ide.scratch.ScratchImplUtil$2/新建临时文件": [
"TEXT"
]
}
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/480T/Mem0" />
<recent name="$PROJECT_DIR$/4600Pro/db-mcp-server" />
<recent name="$PROJECT_DIR$/4600Pro" />
<recent name="$PROJECT_DIR$/4600Pro/firecrawl" />
<recent name="$PROJECT_DIR$/4600Pro/searxng" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/AI团队设计/EVA" />
<recent name="$PROJECT_DIR$/AI团队设计" />
<recent name="$PROJECT_DIR$/4600Pro" />
</key>
</component>
<component name="RunManager">
<configuration default="true" type="DjangoTestsConfigurationType">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="RUN_TOOL" value="" />
<option name="TARGET" value="" />
<option name="SETTINGS_FILE" value="" />
<option name="CUSTOM_SETTINGS" value="false" />
<option name="USE_OPTIONS" value="false" />
<option name="OPTIONS" value="" />
<method v="2" />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="RUN_TOOL" value="" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration default="true" type="Python.Celery" factoryName="Python.Celery.Task">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="RUN_TOOL" value="" />
<method v="2" />
</configuration>
<configuration default="true" type="Python.Celery" factoryName="Python.Celery.App">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="RUN_TOOL" value="" />
<method v="2" />
</configuration>
<configuration default="true" type="Python.FlaskServer">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="RUN_TOOL" value="" />
<option name="launchJavascriptDebuger" value="false" />
<method v="2" />
</configuration>
<configuration default="true" type="Tox" factoryName="Tox">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="RUN_TOOL" value="" />
<method v="2" />
</configuration>
<configuration default="true" type="docs" factoryName="Docutils task">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<option name="RUN_TOOL" value="" />
<option name="docutils_input_file" value="" />
<option name="docutils_output_file" value="" />
<option name="docutils_params" value="" />
<option name="docutils_task" value="" />
<option name="docutils_open_in_browser" value="false" />
<method v="2" />
</configuration>
<configuration default="true" type="docs" factoryName="Sphinx task">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<option name="RUN_TOOL" value="" />
<option name="docutils_input_file" value="" />
<option name="docutils_output_file" value="" />
<option name="docutils_params" value="" />
<option name="docutils_task" value="" />
<option name="docutils_open_in_browser" value="false" />
<method v="2" />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<module name="market-api" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="DEBUG_JUST_MY_CODE" value="false" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="RUN_TOOL" value="" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
<method v="2" />
</configuration>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-js-predefined-d6986cc7102b-4abd2a77f808-JavaScript-PY-262.9437.214" />
<option value="bundled-python-sdk-821f704e66d9-5bd6d13a2a75-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-262.9437.214" />
</set>
</attachedChunks>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="ae3fb6a0-aca4-4c0a-858b-91952e6dcdd3" name="更改" comment="" />
<created>1785115064124</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1785115064124</updated>
<workItem from="1785115065245" duration="1091000" />
<workItem from="1785116797216" duration="42000" />
<workItem from="1785116865103" duration="229000" />
<workItem from="1785117096824" duration="55000" />
<workItem from="1785117158260" duration="1000" />
<workItem from="1785118558426" duration="729000" />
<workItem from="1785119377011" duration="1872000" />
<workItem from="1785220412801" duration="13000" />
<workItem from="1785223191705" duration="1000" />
<workItem from="1785223194581" duration="22000" />
<workItem from="1785392379765" duration="65000" />
<workItem from="1786005163392" duration="201000" />
<workItem from="1786005375680" duration="538000" />
<workItem from="1786065138152" duration="11000" />
<workItem from="1786082842659" duration="893000" />
<workItem from="1786323616451" duration="105000" />
<workItem from="1786409759648" duration="770000" />
<workItem from="1787022222565" duration="1218000" />
<workItem from="1787030835540" duration="2629000" />
<workItem from="1787281083838" duration="1163000" />
<workItem from="1787290752342" duration="56000" />
<workItem from="1787619581117" duration="1502000" />
<workItem from="1787635812810" duration="5000" />
<workItem from="1787635822806" duration="12539000" />
<workItem from="1787705701661" duration="856000" />
<workItem from="1788090668335" duration="1476000" />
<workItem from="1788272932700" duration="860000" />
<workItem from="1788334202246" duration="1878000" />
<workItem from="1788484732453" duration="302000" />
</task>
<task id="LOCAL-00001" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785117134273</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1785117134273</updated>
</task>
<task id="LOCAL-00002" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785119062713</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1785119062713</updated>
</task>
<task id="LOCAL-00003" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785119183055</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1785119183055</updated>
</task>
<task id="LOCAL-00004" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785119242447</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1785119242447</updated>
</task>
<task id="LOCAL-00005" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785119449261</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1785119449261</updated>
</task>
<task id="LOCAL-00006" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785119906941</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1785119906941</updated>
</task>
<task id="LOCAL-00007" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785120129210</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1785120129210</updated>
</task>
<task id="LOCAL-00008" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785120154958</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1785120154958</updated>
</task>
<task id="LOCAL-00009" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785120590256</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1785120590256</updated>
</task>
<task id="LOCAL-00010" summary="update 26.7.27">
<option name="closed" value="true" />
<created>1785120682944</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1785120682944</updated>
</task>
<task id="LOCAL-00011" summary="update 26.7.30">
<option name="closed" value="true" />
<created>1785392423458</created>
<option name="number" value="00011" />
<option name="presentableId" value="LOCAL-00011" />
<option name="project" value="LOCAL" />
<updated>1785392423458</updated>
</task>
<task id="LOCAL-00012" summary="update 26.8.6">
<option name="closed" value="true" />
<created>1786005435040</created>
<option name="number" value="00012" />
<option name="presentableId" value="LOCAL-00012" />
<option name="project" value="LOCAL" />
<updated>1786005435040</updated>
</task>
<task id="LOCAL-00013" summary="update 26.8.7">
<option name="closed" value="true" />
<created>1786083110752</created>
<option name="number" value="00013" />
<option name="presentableId" value="LOCAL-00013" />
<option name="project" value="LOCAL" />
<updated>1786083110752</updated>
</task>
<task id="LOCAL-00014" summary="update 26.8.10">
<option name="closed" value="true" />
<created>1786323673444</created>
<option name="number" value="00014" />
<option name="presentableId" value="LOCAL-00014" />
<option name="project" value="LOCAL" />
<updated>1786323673444</updated>
</task>
<task id="LOCAL-00015" summary="update 26.8.10">
<option name="closed" value="true" />
<created>1786410272062</created>
<option name="number" value="00015" />
<option name="presentableId" value="LOCAL-00015" />
<option name="project" value="LOCAL" />
<updated>1786410272062</updated>
</task>
<task id="LOCAL-00016" summary="update 26.8.11">
<option name="closed" value="true" />
<created>1786410474675</created>
<option name="number" value="00016" />
<option name="presentableId" value="LOCAL-00016" />
<option name="project" value="LOCAL" />
<updated>1786410474675</updated>
</task>
<task id="LOCAL-00017" summary="update 26.8.11">
<option name="closed" value="true" />
<created>1787022400600</created>
<option name="number" value="00017" />
<option name="presentableId" value="LOCAL-00017" />
<option name="project" value="LOCAL" />
<updated>1787022400600</updated>
</task>
<task id="LOCAL-00018" summary="update 26.8.11">
<option name="closed" value="true" />
<created>1787030905479</created>
<option name="number" value="00018" />
<option name="presentableId" value="LOCAL-00018" />
<option name="project" value="LOCAL" />
<updated>1787030905479</updated>
</task>
<task id="LOCAL-00019" summary="update 26.8.11">
<option name="closed" value="true" />
<created>1787031207232</created>
<option name="number" value="00019" />
<option name="presentableId" value="LOCAL-00019" />
<option name="project" value="LOCAL" />
<updated>1787031207232</updated>
</task>
<task id="LOCAL-00020" summary="update 26.8.11">
<option name="closed" value="true" />
<created>1787033233020</created>
<option name="number" value="00020" />
<option name="presentableId" value="LOCAL-00020" />
<option name="project" value="LOCAL" />
<updated>1787033233020</updated>
</task>
<task id="LOCAL-00021" summary="update 26.8.21">
<option name="closed" value="true" />
<created>1787281188731</created>
<option name="number" value="00021" />
<option name="presentableId" value="LOCAL-00021" />
<option name="project" value="LOCAL" />
<updated>1787281188731</updated>
</task>
<task id="LOCAL-00022" summary="update 26.8.25">
<option name="closed" value="true" />
<created>1787620183521</created>
<option name="number" value="00022" />
<option name="presentableId" value="LOCAL-00022" />
<option name="project" value="LOCAL" />
<updated>1787620183521</updated>
</task>
<task id="LOCAL-00023" summary="update 26.8.25">
<option name="closed" value="true" />
<created>1787620202451</created>
<option name="number" value="00023" />
<option name="presentableId" value="LOCAL-00023" />
<option name="project" value="LOCAL" />
<updated>1787620202451</updated>
</task>
<task id="LOCAL-00024" summary="update 26.8.25">
<option name="closed" value="true" />
<created>1787620261315</created>
<option name="number" value="00024" />
<option name="presentableId" value="LOCAL-00024" />
<option name="project" value="LOCAL" />
<updated>1787620261315</updated>
</task>
<task id="LOCAL-00025" summary="update 26.8.25">
<option name="closed" value="true" />
<created>1787648681948</created>
<option name="number" value="00025" />
<option name="presentableId" value="LOCAL-00025" />
<option name="project" value="LOCAL" />
<updated>1787648681948</updated>
</task>
<task id="LOCAL-00026" summary="update 26.8.29">
<option name="closed" value="true" />
<created>1788011791356</created>
<option name="number" value="00026" />
<option name="presentableId" value="LOCAL-00026" />
<option name="project" value="LOCAL" />
<updated>1788011791356</updated>
</task>
<task id="LOCAL-00027" summary="update 26.8.29">
<option name="closed" value="true" />
<created>1788011949750</created>
<option name="number" value="00027" />
<option name="presentableId" value="LOCAL-00027" />
<option name="project" value="LOCAL" />
<updated>1788011949750</updated>
</task>
<task id="LOCAL-00028" summary="update 26.8.29">
<option name="closed" value="true" />
<created>1788012355905</created>
<option name="number" value="00028" />
<option name="presentableId" value="LOCAL-00028" />
<option name="project" value="LOCAL" />
<updated>1788012355905</updated>
</task>
<task id="LOCAL-00029" summary="update 26.8.29">
<option name="closed" value="true" />
<created>1788014249329</created>
<option name="number" value="00029" />
<option name="presentableId" value="LOCAL-00029" />
<option name="project" value="LOCAL" />
<updated>1788014249329</updated>
</task>
<task id="LOCAL-00030" summary="update 26.8.30">
<option name="closed" value="true" />
<created>1788090925000</created>
<option name="number" value="00030" />
<option name="presentableId" value="LOCAL-00030" />
<option name="project" value="LOCAL" />
<updated>1788090925000</updated>
</task>
<option name="localTasksCounter" value="31" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="update 26.7.27" />
<MESSAGE value="update 26.7.30" />
<MESSAGE value="update 26.8.6" />
<MESSAGE value="update 26.8.7" />
<MESSAGE value="update 26.8.10" />
<MESSAGE value="update 26.8.11" />
<MESSAGE value="update 26.8.21" />
<MESSAGE value="update 26.8.25" />
<MESSAGE value="update 26.8.29" />
<MESSAGE value="update 26.8.30" />
<option name="LAST_COMMIT_MESSAGE" value="update 26.8.30" />
</component>
</project>
+107
View File
@@ -0,0 +1,107 @@
# Docker image to run. Pin a sha-* tag or @sha256 digest for stricter deploys.
APP_IMAGE=ghcr.io/bookorbit/bookorbit:latest
# App publish port on host
# For access only from this host (such as a host reverse proxy), use 127.0.0.1:3000.
APP_PORT=2600
# Optional listen address inside the container (IPv4 or IPv6, without brackets).
# Keep the default for bridge networking; use APP_PORT above to restrict host exposure.
# HOST=0.0.0.0
# Host folder that appears as /books in the container.
# Point this at your library root; use an absolute path on NAS/Portainer installs.
BOOKS_HOST_PATH=/volume2/docker/docker_projects/bookorbit/books
APP_DATA_HOST_PATH=/volume2/docker/docker_projects/bookorbit/data/app
POSTGRES_DATA_HOST_PATH=/volume2/docker/docker_projects/bookorbit/data/postgres
# Container runtime UID/GID for files written to app-managed data folders.
# Most users can leave these defaults.
PUID=1000
PGID=1000
# Database credentials
POSTGRES_USER=bookorbit
POSTGRES_PASSWORD=nxY7HUoJYjUgn
POSTGRES_DB=bookorbit
# App secrets
JWT_SECRET=5c1c59712f970672a6cb09fd6e8823f44e024cd8633e11bdae5e616c743d3371
# Fresh installs should generate an independent key with: openssl rand -hex 32
# Existing installs upgrading from an older release must initially copy their current JWT_SECRET here so existing podcast URLs remain readable.
PODCAST_ENCRYPTION_KEY=5c1c59712f970672a6cb09fd6e8823f44e024cd8633e11bdae5e616c743d3371
# Required for the initial /auth/setup endpoint (x-setup-token header)
SETUP_BOOTSTRAP_TOKEN=5c1c59712f970672a6cb09fd6e8823f44e024cd8633e11bdae5e616c743d3371
# Sensitive values can instead be read from mounted files by appending _FILE.
# Leave the direct value blank, then set its _FILE variable to the container path.
# Keep the blank assignment: docker-compose.yml requires these keys to be present.
# A non-empty direct value and its _FILE variable are mutually exclusive.
# The file must be mounted into every service that uses it, and must not be empty.
# POSTGRES_PASSWORD_FILE=/run/secrets/bookorbit_postgres_password
# JWT_SECRET_FILE=/run/secrets/bookorbit_jwt_secret
# PODCAST_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_podcast_encryption_key
# SETUP_BOOTSTRAP_TOKEN_FILE=/run/secrets/bookorbit_setup_bootstrap_token
# External/public URL used by emails and Kobo endpoints
APP_URL=https://bookorbit.example.com
# Node.js JavaScript heap limit in MB. Raise this for very large libraries, 250K+ books.
NODE_MAX_OLD_SPACE_SIZE=2048
# --- Optional overrides (uncomment to set) ---
# If you already run your own PostgreSQL, set DATABASE_URL and remove the
# postgres service from docker-compose.yml. Your instance must have the
# uuid-ossp, pg_trgm, and vector (pgvector) extensions available.
# DATABASE_URL=postgres://user:password@yourhost:5432/bookorbit
# DATABASE_URL_FILE=/run/secrets/bookorbit_database_url
# Or set individual parts (POSTGRES_HOST, POSTGRES_PORT, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB)
# CORS origin for the frontend when served from a different domain than APP_URL
# CLIENT_URL=https://app.example.com
# Container folder used as the top of the library creation folder picker.
# Defaults to / when unset. Set to /books to hide other container root folders.
# LIBRARY_BROWSE_ROOT=/books
# Set to false only if your platform manages bind mount ownership externally.
# BOOKORBIT_FIX_PERMISSIONS=true
# Recommended if you store SMTP provider credentials (generate: openssl rand -hex 32)
# EMAIL_ENCRYPTION_KEY=
# EMAIL_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_email_encryption_key
# Recommended if you store migration source credentials (generate: openssl rand -hex 32)
# MIGRATION_ENCRYPTION_KEY=
# MIGRATION_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_migration_encryption_key
# Required before download-client or indexer credentials can be saved.
# BOOK_REQUEST_ENCRYPTION_KEY=
# BOOK_REQUEST_ENCRYPTION_KEY_FILE=/run/secrets/bookorbit_book_request_encryption_key
# Optional GitHub token used to read release notes, raising the anonymous API rate limit.
# GITHUB_RELEASES_TOKEN=
# GITHUB_RELEASES_TOKEN_FILE=/run/secrets/bookorbit_github_releases_token
# Absolute container path that authorizes local migration backup files.
# Mount a dedicated host directory at this path as read-only before enabling backup mode.
# MIGRATION_IMPORT_ROOT=/imports
# Log level (default: info). Set to debug for verbose output.
# LOG_LEVEL=info
# Allow OIDC issuer/discovery URLs that resolve to private/local addresses.
# Default false. Enable only in trusted self-hosted networks.
# OIDC_ALLOW_LOCAL_ISSUERS=false
# Trust additional PEM-encoded certificate authorities for outbound TLS, including OIDC.
# Mount the CA bundle read-only, set its in-container path here, and restart BookOrbit.
# NODE_EXTRA_CA_CERTS=/path/to/private-ca-bundle.pem
# Disable username/password sign-in after at least one active administrator has linked an enabled
# OIDC provider. Set false and restart to recover access if the identity provider is unavailable.
# DISABLE_LOCAL_AUTH=false
# Optional: allow Cloudflare Web Analytics beacon when using automatic setup.
# Keep unset/false to preserve strict CSP (`script-src 'self'`).
# CSP_ALLOW_CLOUDFLARE_INSIGHTS=false
+96
View File
@@ -0,0 +1,96 @@
name: bookorbit
services:
app:
container_name: bookorbit-app
image: ${APP_IMAGE?required}
restart: unless-stopped
init: true
env_file:
- .env
ports:
- "${APP_PORT:-3000}:${PORT:-3000}"
environment:
NODE_ENV: production
PORT: ${PORT:-3000}
DATABASE_URL: ${DATABASE_URL:-}
POSTGRES_HOST: ${POSTGRES_HOST:-postgres}
POSTGRES_PORT: ${POSTGRES_PORT:-5432}
POSTGRES_USER: ${POSTGRES_USER?required}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?required}
POSTGRES_DB: ${POSTGRES_DB?required}
JWT_SECRET: ${JWT_SECRET?required}
PODCAST_ENCRYPTION_KEY: ${PODCAST_ENCRYPTION_KEY:-}
SETUP_BOOTSTRAP_TOKEN: ${SETUP_BOOTSTRAP_TOKEN?required}
APP_URL: ${APP_URL?required}
CLIENT_URL: ${CLIENT_URL:-${APP_URL?required}}
TZ: ${TZ:-UTC}
PUID: ${PUID:-1000}
PGID: ${PGID:-1000}
NODE_MAX_OLD_SPACE_SIZE: ${NODE_MAX_OLD_SPACE_SIZE:-auto}
BOOK_DOCK_PATH: ${BOOK_DOCK_PATH:-}
LIBRARY_BROWSE_ROOT: ${LIBRARY_BROWSE_ROOT:-}
DISABLE_LOCAL_AUTH: ${DISABLE_LOCAL_AUTH:-false}
depends_on:
postgres:
condition: service_healthy
volumes:
- ${BOOKS_HOST_PATH:-./books}:/books
- ${APP_DATA_HOST_PATH:-./data/app}:/data
read_only: true
tmpfs:
- /tmp
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- FOWNER
- SETGID
- SETUID
security_opt:
- no-new-privileges:true
stop_grace_period: 30s
# Opt-in: add `--profile tts` to your compose commands. BookOrbit reaches it inside the compose
# network at http://kokoro:8880/v1, so no port is published to the host.
kokoro:
container_name: bookorbit-kokoro
image: ${KOKORO_IMAGE:-ghcr.io/remsky/kokoro-fastapi-cpu:v0.8.0}
profiles: ["tts"]
restart: unless-stopped
init: true
expose:
- "8880"
security_opt:
- no-new-privileges:true
stop_grace_period: 30s
healthcheck:
test:
[
"CMD-SHELL",
'python -c "import urllib.request;urllib.request.urlopen(''http://127.0.0.1:8880/v1/audio/voices'')"',
]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
postgres:
container_name: bookorbit-db
image: pgvector/pgvector:pg18
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER?required}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD?required}
POSTGRES_DB: ${POSTGRES_DB?required}
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- ${POSTGRES_DATA_HOST_PATH:-./data/postgres}:/var/lib/postgresql/data
healthcheck:
test:
["CMD-SHELL", 'pg_isready -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}"']
interval: 10s
timeout: 5s
retries: 10
start_period: 20s
-13
View File
@@ -1,13 +0,0 @@
services:
komga:
image: gotson/komga
container_name: komga
volumes:
# 本地卷宗挂载
- /volume2/docker/docker_projects/komga:/config
- /volume1/4600Pro/PornClub/Anime:/data
ports:
- "2600:25600"
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
+71
View File
@@ -0,0 +1,71 @@
services:
app:
image: mauriceboe/trek:latest
container_name: trek
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
tmpfs:
- /tmp:noexec,nosuid,size=128m
ports:
- "3600:3000"
environment:
- NODE_ENV=production
- PORT=3000
- ENCRYPTION_KEY=${ENCRYPTION_KEY:-} # Recommended. Generate with: openssl rand -hex 32. If unset, falls back to data/.jwt_secret (existing installs) or auto-generates a key (fresh installs).
- TZ=${TZ:-UTC} # Timezone for logs, reminders and scheduled tasks (e.g. Europe/Berlin)
- LOG_LEVEL=${LOG_LEVEL:-info} # info = concise user actions; debug = verbose admin-level details
# - TREK_WIKI_DIR=/app/wiki # Where the in-app Help pages (/help) read their content from. Leave unset: the image ships the wiki at /app/wiki and finds it automatically. Only set this to serve your own docs, mounted into the container. If the path does not exist, Help falls back to fetching the public GitHub wiki (needs outbound network, and tracks the latest release rather than your version).
# - DEFAULT_LANGUAGE=en # Default language on the login page for users with no saved preference. Browser/OS language is auto-detected first; this is the fallback. Supported: de, en, es, fr, hu, nl, br, cs, pl, ru, zh, zh-TW, it, ar
# - SESSION_DURATION=30d # How long users stay logged in (trek_session JWT + cookie maxAge). Accepts: 1h | 12h | 7d | 30d | 90d. Default: 24h
# - SESSION_DURATION_REMEMBER=30d # Session length when "Remember me" is ticked at login: longer-lived JWT + persistent cookie that survives browser restarts. Same format as SESSION_DURATION. Default: 30d
- ALLOWED_ORIGINS=${ALLOWED_ORIGINS:-} # Comma-separated origins for CORS and email notification links
# - FORCE_HTTPS=true # Optional. Enables HTTPS redirect, HSTS, CSP upgrade-insecure-requests, and secure cookies behind a TLS proxy
# - HSTS_INCLUDE_SUBDOMAINS=false # When true: adds includeSubDomains to the HSTS header. Only effective when HSTS is active. Leave false if sibling subdomains still run over plain HTTP.
# - COOKIE_SECURE=false # Escape hatch: force session cookies over plain HTTP even in production. Not recommended.
# - TRUST_PROXY=1 # Trusted proxy count for X-Forwarded-For / X-Forwarded-Proto. Required for FORCE_HTTPS to work.
# - ALLOW_INTERNAL_NETWORK=false # Set to true if Immich or other services are hosted on your local network (RFC-1918 IPs). Loopback and link-local addresses remain blocked regardless.
# - ALLOW_LINK_LOCAL_IPS= # Single link-local addresses TREK may reach after all, e.g. 169.254.1.2 for the host gateway of a rootless Podman container. Cloud metadata addresses cannot be listed.
# - HTTP_PROXY=${HTTP_PROXY:-} # Optional. Proxy URL for outbound HTTP requests (e.g. http://192.168.1.10:7890)
# - HTTPS_PROXY=${HTTPS_PROXY:-} # Optional. Proxy URL for outbound HTTPS requests
# - NO_PROXY=${NO_PROXY:-localhost,127.0.0.1} # Optional. Comma-separated hosts and domains that bypass the outbound proxy
# - APP_URL=https://trek.example.com # Public base URL — required when OIDC is enabled (must match the redirect URI registered with your IdP); also used as base URL for links in email notifications
# - OIDC_ISSUER=https://auth.example.com # OpenID Connect provider URL
# - OIDC_CLIENT_ID=trek # OpenID Connect client ID
# - OIDC_CLIENT_SECRET=supersecret # OpenID Connect client secret
# - OIDC_DISPLAY_NAME=SSO # Label shown on the SSO login button
# - OIDC_ONLY=false # Set true to force SSO-only mode: disables password login and registration, overrides Admin > Settings toggles, cannot be changed at runtime
# - OIDC_ADMIN_CLAIM=groups # OIDC claim used to identify admin users
# - OIDC_ADMIN_VALUE=app-trek-admins # Value of the OIDC claim that grants admin role
# - OIDC_SCOPE=openid email profile # Fully overrides the default. Add extra scopes as needed (e.g. add groups if using OIDC_ADMIN_CLAIM)
# - OIDC_DISCOVERY_URL= # Override the OIDC discovery endpoint for providers with non-standard paths (e.g. Authentik)
# - ADMIN_EMAIL=admin@trek.local # Initial admin e-mail — only used on first boot when no users exist
# - ADMIN_PASSWORD=changeme # Initial admin password — only used on first boot when no users exist
# - MCP_RATE_LIMIT=300 # Max MCP API requests per user per minute (default: 300)
# - MCP_MAX_SESSION_PER_USER=20 # Max concurrent MCP sessions per user (default: 20)
# - KITINERARY_EXTRACTOR_PATH= # Optional. Full path to kitinerary-extractor binary. Auto-detected from PATH and /usr/lib/*/libexec/kf6/ when unset.
# - LLM_TIMEOUT_MS=900000 # Optional. Ceiling (ms) for one AI-parsing call before it is abandoned, applied to every provider and to the HTTP client underneath. Generous by default so heavier documents fit; lower it on a cloud provider to fail fast. Must be a whole number of milliseconds between 1 and 2147483647 — anything else stops the server at startup with the reason. (default: 900000)
# - TREK_PLUGINS_IGNORE_TREK_RANGE=true # Optional. Lets plugins whose declared TREK version range predates this build, and plugins that declare none, be installed and activated anyway. Every gate warns instead of refusing; the plugin-API version gate and the Discover compatibility verdict stay hard. Off unless set. (default: off)
# - UNSPLASH_ACCESS_KEY= # Optional. Unsplash Access Key for trip-cover / place-image search. Without one, TREK uses Unsplash's unauthenticated endpoint, which some datacenter/VPS IPs are blocked from (#1449). Free key at unsplash.com/developers. Can also be set per-admin in Admin > Settings; the env var overrides that.
# - TREK_PLACES_ENABLED=false # Optional. Place search (suggestions, full search, category buttons, Road trip search, import geocoding, offline downloads) asks the TREK Places API at https://places.liketrek.com by default, so the server makes outbound requests to that host. Set false to search the way it did before 4.3.0 (OpenStreetMap, or your Google/Amap key) and send nothing there. No switch in the admin panel on purpose: whether searches leave the instance is decided here. (default: true)
# - TREK_PLACES_URL=https://places.liketrek.com # Optional. Base URL of a copy of the Places API you run yourself; it has to answer the same /v1 API. Read from configuration rather than typed by a user, so an address on your LAN or Docker network works without ALLOW_INTERNAL_NETWORK. (default: https://places.liketrek.com)
# - AMAP_API_KEY= # Optional. Amap (高德地图) Web 服务 key for place search and geocoding inside mainland China. Overrides the key set in Admin > Settings > API Keys. A Web 端 (JS API) key is a different credential and is rejected with INVALID_USER_KEY.
# - AMAP_API_SECRET= # Optional. The private secret (数字签名) of that key. Required exactly when the key was created with signing enabled, because such a key rejects every unsigned request. Leave unset otherwise.
# - AMAP_API_BASE=https://restapi.amap.com # Optional. Send the Amap calls through an egress proxy, a cache or a gateway that speaks the same API instead of restapi.amap.com directly. (default: https://restapi.amap.com)
volumes:
- /volume1/docker/docker_projects/trek/data:/app/data
- /volume1/docker/docker_projects/trek/uploads:/app/uploads
# - ./storage-config.json:/app/data/storage-config.json:ro # optional seed-once storage provisioning (wiki: Admin-Storage)
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
+3 -3
View File
@@ -9,10 +9,10 @@ HINDSIGHT_VERSION=latest
# ================================ # ================================
# 第一阶段建议直接用 OpenAI # 第一阶段建议直接用 OpenAI
HINDSIGHT_API_LLM_PROVIDER=zai HINDSIGHT_API_LLM_PROVIDER=deepseek
# 替换为你的 API Key # 替换为你的 API Key
HINDSIGHT_API_LLM_API_KEY=ac914496b1584aac8990ecbf2e04e53a.aiY0MixbHb8rl0Jm HINDSIGHT_API_LLM_API_KEY=sk-2550c20fe4f943cf8bf94aca723dd5cf
# 模型 # 模型
HINDSIGHT_API_LLM_MODEL=GLM-5.3-Flash HINDSIGHT_API_LLM_MODEL=deepseek-v4-pro
+3 -3
View File
@@ -42,8 +42,8 @@ UgreenNas(芯片:N6005,运行内存:32G,储存:1TB固态+35TB机械
8. komga:`http://192.168.0.111:2600` 【漫画阅读器】 8. komga:`http://192.168.0.111:2600` 【漫画阅读器】
9. yuvomi:`http://192.168.0.111:2700` 【家庭管理平台】 9. yuvomi:`http://192.168.0.111:2700` 【家庭管理平台】
10. searxng:`http://192.168.0.111:2800` 【智能体搜素引擎MCP服务】 10. searxng:`http://192.168.0.111:2800` 【智能体搜素引擎MCP服务】
11: db-mcp-server:`http://192.168.0.111:2900` 【智能体数据库MCP服务】 11. db-mcp-server:`http://192.168.0.111:2900` 【智能体数据库MCP服务】
12: wechat2rss:`http://192.168.0.111:3000` 【微信公众号Rss服务】 12. wechat2rss:`http://192.168.0.111:3000` 【微信公众号Rss服务】
### Ultra 7 255H 六盘位 NAS ### Ultra 7 255H 六盘位 NAS
------ 媒体及下载中心 ------ ------ 媒体及下载中心 ------
@@ -57,7 +57,6 @@ UgreenNas(芯片:Ultra 7 255H,运行内存:64G,储存:1TB固态+35TB
5. qBittorrent:`http://192.168.0.111:2400` 【下载器】 5. qBittorrent:`http://192.168.0.111:2400` 【下载器】
6. TG_Downloader:`http://192.168.0.111:2500` 【下载器】 6. TG_Downloader:`http://192.168.0.111:2500` 【下载器】
7. qinglongPanel:`http://192.168.0.111:2600` 【python代码托管】【Frp:ql.kunle777.top】 7. qinglongPanel:`http://192.168.0.111:2600` 【python代码托管】【Frp:ql.kunle777.top】
8. komga:`http://192.168.0.111:2700` 【漫画阅读器】【Frp:komga.kunle777.top】
9. yuvomi:`http://192.168.0.111:2800` 【家庭管理平台】 9. yuvomi:`http://192.168.0.111:2800` 【家庭管理平台】
10. SearXNG:`http://192.168.0.111:2900` 【智能体搜素引擎MCP服务】 10. SearXNG:`http://192.168.0.111:2900` 【智能体搜素引擎MCP服务】
@@ -72,6 +71,7 @@ UgreenNas(芯片:1235U,运行内存:64GB,储存:4TB固态)
6. n8n_service:`http://192.168.0.112:3300` 【自动化平台】 6. n8n_service:`http://192.168.0.112:3300` 【自动化平台】
7. dify:`http://192.168.0.112:3400` 【智能体平台】 7. dify:`http://192.168.0.112:3400` 【智能体平台】
8. minio:http://192.168.0.112:3500 【智能体数据库MCP服务】 8. minio:http://192.168.0.112:3500 【智能体数据库MCP服务】
x. TREK:http://192.168.0.112:3600 【智能体数据库MCP服务】
9. mysql数据库:`tcp://192.168.0.112:4100` 9. mysql数据库:`tcp://192.168.0.112:4100`
10. postgres数据库:`tcp://192.168.0.112:4200` 10. postgres数据库:`tcp://192.168.0.112:4200`
11. redis数据库:`tcp://192.168.0.112:4300` 11. redis数据库:`tcp://192.168.0.112:4300`