Compare commits
111 Commits
ddbd720841
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eef9f656ba | ||
|
|
317309f60e | ||
|
|
e34c46ce66 | ||
|
|
3d2c534e18 | ||
|
|
0e054aaf97 | ||
|
|
ebfdaff1a6 | ||
|
|
30aa609fa9 | ||
|
|
d4f4402719 | ||
|
|
3b525db7a2 | ||
|
|
6e1827866a | ||
|
|
cfebfc0b35 | ||
|
|
8f880faaa1 | ||
|
|
4449f064d9 | ||
|
|
cbaf0f6a22 | ||
|
|
500c666f23 | ||
|
|
83fd5cf552 | ||
|
|
b778e0ce4f | ||
|
|
792f0a3608 | ||
|
|
65dead53d6 | ||
|
|
027220049e | ||
|
|
bee249f515 | ||
| 2464dbd26b | |||
| 80759eb781 | |||
| 9f5d11a793 | |||
| 6570cf5678 | |||
|
|
7b17f95810 | ||
|
|
84995a571d | ||
| f94310db65 | |||
|
|
bac7d6abac | ||
|
|
19b5e92647 | ||
|
|
5c01a73962 | ||
|
|
15a1746a0b | ||
|
|
0b89f18e18 | ||
|
|
78c17a5783 | ||
|
|
d31a5032b4 | ||
|
|
4beab05314 | ||
|
|
8af6c47544 | ||
|
|
49d124f931 | ||
|
|
dff3dc0215 | ||
|
|
f0f1759f3e | ||
|
|
ca69de73ee | ||
|
|
24c6f6aff4 | ||
|
|
fa918cb672 | ||
|
|
88a17def35 | ||
|
|
fe049e37d1 | ||
|
|
aefc961c3f | ||
|
|
673832ddee | ||
| beaf5626ee | |||
| db1d1c17fd | |||
| f046b0027f | |||
|
|
fc626521af | ||
|
|
d15c0ea194 | ||
|
|
4508bc7339 | ||
|
|
9b33688311 | ||
|
|
2dcf9e3de2 | ||
|
|
1f7d265f16 | ||
|
|
c4791dc7d5 | ||
|
|
da18194eb1 | ||
|
|
77efae17ba | ||
|
|
3991cd237d | ||
|
|
afddfac2c4 | ||
|
|
67e3657721 | ||
|
|
ba811e9f09 | ||
|
|
1ba5ac5c75 | ||
|
|
777835fb2a | ||
|
|
cb069cad21 | ||
|
|
ecf586302e | ||
|
|
14232be932 | ||
|
|
c518429b08 | ||
|
|
84d91a2528 | ||
|
|
cb29d70208 | ||
|
|
4bdec224b5 | ||
|
|
2fc1b21023 | ||
|
|
248c7724a6 | ||
|
|
6d91ea3d86 | ||
|
|
a4195dc4b6 | ||
|
|
54d289c924 | ||
|
|
a06c9faac5 | ||
|
|
0236499c58 | ||
|
|
a728c0ea3f | ||
|
|
d541209f4b | ||
|
|
503f214e9c | ||
|
|
435d5a419e | ||
|
|
6d01833a25 | ||
|
|
a379b626af | ||
|
|
f90eb337d6 | ||
|
|
73681b08f5 | ||
| a06556cc6c | |||
| 6ba2e61871 | |||
| 982bdc7c7a | |||
|
|
c8cf27df08 | ||
|
|
6368738ade | ||
|
|
13469e8ec3 | ||
|
|
1af6527640 | ||
|
|
3a770e2f7d | ||
|
|
c8a36fc0fe | ||
|
|
ff82c8366a | ||
|
|
3d48567989 | ||
|
|
d29ce2c95e | ||
|
|
1b698583c1 | ||
|
|
db81ef2378 | ||
|
|
b9f0700a2e | ||
|
|
f17e70400d | ||
| dfb5c8266b | |||
|
|
e72b615907 | ||
|
|
501752871b | ||
|
|
2ba8c52cbe | ||
|
|
59186d9a0b | ||
|
|
42489c82cd | ||
|
|
f7078a5218 | ||
|
|
84a283deb5 |
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Obsidian
|
||||||
|
.obsidian/workspace.json
|
||||||
|
.obsidian/workspace-mobile.json
|
||||||
|
.obsidian/plugins/*/data.json
|
||||||
|
.obsidian/plugins/*/.git_credentials_input
|
||||||
|
.obsidian/cache
|
||||||
|
|
||||||
|
# Claude Code локальные worktree-ы агентов
|
||||||
|
.claude/worktrees/
|
||||||
|
|
||||||
|
# System
|
||||||
|
.DS_Store
|
||||||
|
.trash/
|
||||||
16
.obsidian/app.json
vendored
Normal file
16
.obsidian/app.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"strictLineBreaks": false,
|
||||||
|
"showLineNumber": true,
|
||||||
|
"spellcheck": false,
|
||||||
|
"defaultViewMode": "source",
|
||||||
|
"livePreview": true,
|
||||||
|
"readableLineLength": true,
|
||||||
|
"showFrontmatter": true,
|
||||||
|
"foldHeading": true,
|
||||||
|
"foldIndent": true,
|
||||||
|
"newLinkFormat": "relative",
|
||||||
|
"attachmentFolderPath": "attachments",
|
||||||
|
"trashOption": "local",
|
||||||
|
"alwaysUpdateLinks": true,
|
||||||
|
"promptDelete": false
|
||||||
|
}
|
||||||
6
.obsidian/appearance.json
vendored
Normal file
6
.obsidian/appearance.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"baseFontSize": 16,
|
||||||
|
"theme": "obsidian",
|
||||||
|
"translucency": false,
|
||||||
|
"nativeMenus": true
|
||||||
|
}
|
||||||
6
.obsidian/community-plugins.json
vendored
Normal file
6
.obsidian/community-plugins.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[
|
||||||
|
"obsidian-git",
|
||||||
|
"dataview",
|
||||||
|
"templater-obsidian",
|
||||||
|
"terminal"
|
||||||
|
]
|
||||||
33
.obsidian/core-plugins.json
vendored
Normal file
33
.obsidian/core-plugins.json
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"file-explorer": true,
|
||||||
|
"global-search": true,
|
||||||
|
"switcher": true,
|
||||||
|
"graph": true,
|
||||||
|
"backlink": true,
|
||||||
|
"outgoing-link": true,
|
||||||
|
"tag-pane": true,
|
||||||
|
"page-preview": true,
|
||||||
|
"daily-notes": true,
|
||||||
|
"templates": true,
|
||||||
|
"note-composer": false,
|
||||||
|
"command-palette": true,
|
||||||
|
"slash-command": false,
|
||||||
|
"editor-status": false,
|
||||||
|
"markdown-importer": true,
|
||||||
|
"zk-prefixer": false,
|
||||||
|
"random-note": false,
|
||||||
|
"outline": true,
|
||||||
|
"word-count": true,
|
||||||
|
"slides": false,
|
||||||
|
"audio-recorder": false,
|
||||||
|
"workspaces": false,
|
||||||
|
"file-recovery": true,
|
||||||
|
"publish": false,
|
||||||
|
"sync": false,
|
||||||
|
"canvas": true,
|
||||||
|
"footnotes": false,
|
||||||
|
"properties": true,
|
||||||
|
"bookmarks": true,
|
||||||
|
"bases": true,
|
||||||
|
"webviewer": false
|
||||||
|
}
|
||||||
6
.obsidian/daily-notes.json
vendored
Normal file
6
.obsidian/daily-notes.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"folder": "daily",
|
||||||
|
"format": "YYYY-MM-DD",
|
||||||
|
"template": "templates/daily-note",
|
||||||
|
"autorun": false
|
||||||
|
}
|
||||||
22
.obsidian/graph.json
vendored
Normal file
22
.obsidian/graph.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"collapse-filter": true,
|
||||||
|
"search": "",
|
||||||
|
"showTags": false,
|
||||||
|
"showAttachments": false,
|
||||||
|
"hideUnresolved": false,
|
||||||
|
"showOrphans": true,
|
||||||
|
"collapse-color-groups": true,
|
||||||
|
"colorGroups": [],
|
||||||
|
"collapse-display": true,
|
||||||
|
"showArrow": false,
|
||||||
|
"textFadeMultiplier": 0,
|
||||||
|
"nodeSizeMultiplier": 1,
|
||||||
|
"lineSizeMultiplier": 1,
|
||||||
|
"collapse-forces": true,
|
||||||
|
"centerStrength": 0.518713248970312,
|
||||||
|
"repelStrength": 10,
|
||||||
|
"linkStrength": 1,
|
||||||
|
"linkDistance": 250,
|
||||||
|
"scale": 1.0128658356055165,
|
||||||
|
"close": true
|
||||||
|
}
|
||||||
1
.obsidian/hotkeys.json
vendored
Normal file
1
.obsidian/hotkeys.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
20876
.obsidian/plugins/dataview/main.js
vendored
Normal file
20876
.obsidian/plugins/dataview/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/dataview/manifest.json
vendored
Normal file
11
.obsidian/plugins/dataview/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "dataview",
|
||||||
|
"name": "Dataview",
|
||||||
|
"version": "0.5.68",
|
||||||
|
"minAppVersion": "0.13.11",
|
||||||
|
"description": "Complex data views for the data-obsessed.",
|
||||||
|
"author": "Michael Brenan <blacksmithgu@gmail.com>",
|
||||||
|
"authorUrl": "https://github.com/blacksmithgu",
|
||||||
|
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
141
.obsidian/plugins/dataview/styles.css
vendored
Normal file
141
.obsidian/plugins/dataview/styles.css
vendored
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
.block-language-dataview {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************/
|
||||||
|
/** Table Views **/
|
||||||
|
/*****************/
|
||||||
|
|
||||||
|
/* List View Default Styling; rendered internally as a table. */
|
||||||
|
.table-view-table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > thead > tr, .table-view-table > tbody > tr {
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > tbody > tr:hover {
|
||||||
|
background-color: var(--table-row-background-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > thead > tr > th {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: larger;
|
||||||
|
border-top: none;
|
||||||
|
border-left: none;
|
||||||
|
border-right: none;
|
||||||
|
border-bottom: solid;
|
||||||
|
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table > tbody > tr > td {
|
||||||
|
text-align: left;
|
||||||
|
border: none;
|
||||||
|
font-weight: 400;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-view-table ul, .table-view-table ol {
|
||||||
|
margin-block-start: 0.2em !important;
|
||||||
|
margin-block-end: 0.2em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Rendered value styling for any view. */
|
||||||
|
.dataview-result-list-root-ul {
|
||||||
|
padding: 0em !important;
|
||||||
|
margin: 0em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview-result-list-ul {
|
||||||
|
margin-block-start: 0.2em !important;
|
||||||
|
margin-block-end: 0.2em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generic grouping styling. */
|
||||||
|
.dataview.result-group {
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************/
|
||||||
|
/** Inline Fields **/
|
||||||
|
/*******************/
|
||||||
|
|
||||||
|
.dataview.inline-field-key {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
color: var(--nav-item-color-selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.inline-field-value {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
background-color: var(--background-secondary-alt);
|
||||||
|
color: var(--nav-item-color-selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.inline-field-standalone-value {
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
background-color: var(--background-secondary-alt);
|
||||||
|
color: var(--nav-item-color-selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************/
|
||||||
|
/** Task View **/
|
||||||
|
/***************/
|
||||||
|
|
||||||
|
.dataview.task-list-item, .dataview.task-list-basic-item {
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
transition: 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
|
||||||
|
background-color: var(--text-selection);
|
||||||
|
box-shadow: -40px 0 0 var(--text-selection);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************/
|
||||||
|
/** Error Views **/
|
||||||
|
/*****************/
|
||||||
|
|
||||||
|
div.dataview-error-box {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 150px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border: 4px dashed var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview-error-message {
|
||||||
|
color: var(--text-muted);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
/** Additional Metadata **/
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
.dataview.small-text {
|
||||||
|
font-size: smaller;
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.small-text::before {
|
||||||
|
content: "(";
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataview.small-text::after {
|
||||||
|
content: ")";
|
||||||
|
}
|
||||||
450
.obsidian/plugins/obsidian-git/main.js
vendored
Normal file
450
.obsidian/plugins/obsidian-git/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/obsidian-git/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-git/manifest.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"author": "Vinzent",
|
||||||
|
"authorUrl": "https://github.com/Vinzent03",
|
||||||
|
"id": "obsidian-git",
|
||||||
|
"name": "Git",
|
||||||
|
"description": "Integrate Git version control with automatic backup and other advanced features.",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"fundingUrl": "https://ko-fi.com/vinzent",
|
||||||
|
"version": "2.38.1"
|
||||||
|
}
|
||||||
710
.obsidian/plugins/obsidian-git/styles.css
vendored
Normal file
710
.obsidian/plugins/obsidian-git/styles.css
vendored
Normal file
@@ -0,0 +1,710 @@
|
|||||||
|
@keyframes loading {
|
||||||
|
0% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-signs-gutter {
|
||||||
|
.cm-gutterElement {
|
||||||
|
/* Needed to align the sign properly for different line heigts. Such as
|
||||||
|
* when having a heading or list item.
|
||||||
|
*/
|
||||||
|
padding-top: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"] .button-border {
|
||||||
|
border: 2px solid var(--interactive-accent);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"] .view-content {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-history-view"] .view-content {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading > svg {
|
||||||
|
animation: 2s linear infinite loading;
|
||||||
|
transform-origin: 50% 50%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-center {
|
||||||
|
margin: auto;
|
||||||
|
text-align: center;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-textarea {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-center-button {
|
||||||
|
display: block;
|
||||||
|
margin: 20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip.mod-left {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip.mod-right {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Limits the scrollbar to the view body */
|
||||||
|
.git-view {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Re-enable wrapping of nav buttns to prevent overflow on smaller screens #*/
|
||||||
|
.workspace-drawer .git-view .nav-buttons-container {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-tools {
|
||||||
|
display: flex;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
.git-tools .type {
|
||||||
|
padding-left: var(--size-2-1);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-tools .type[data-type="M"] {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
.git-tools .type[data-type="D"] {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.git-tools .buttons {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.git-tools .buttons > * {
|
||||||
|
padding: 0 0;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"] .tree-item-self,
|
||||||
|
.workspace-leaf-content[data-type="git-history-view"] .tree-item-self {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"]
|
||||||
|
.tree-item-self:hover
|
||||||
|
.clickable-icon,
|
||||||
|
.workspace-leaf-content[data-type="git-history-view"]
|
||||||
|
.tree-item-self:hover
|
||||||
|
.clickable-icon {
|
||||||
|
color: var(--icon-color-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Highlight an item as active if it's diff is currently opened */
|
||||||
|
.is-active .git-tools .buttons > * {
|
||||||
|
color: var(--nav-item-color-active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-author {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-date {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-ref {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ====== diff2html ======
|
||||||
|
The following styles are adapted from the obsidian-version-history plugin by
|
||||||
|
@kometenstaub https://github.com/kometenstaub/obsidian-version-history-diff/blob/main/src/styles.scss
|
||||||
|
which itself is adapted from the diff2html library with the following original license:
|
||||||
|
|
||||||
|
https://github.com/rtfpessoa/diff2html/blob/master/LICENSE.md
|
||||||
|
|
||||||
|
Copyright 2014-2016 Rodrigo Fernandes https://rtfpessoa.github.io/
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
||||||
|
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
||||||
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
||||||
|
Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||||
|
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.theme-dark,
|
||||||
|
.theme-light {
|
||||||
|
--git-delete-bg: #ff475040;
|
||||||
|
--git-delete-hl: #96050a75;
|
||||||
|
--git-insert-bg: #68d36840;
|
||||||
|
--git-insert-hl: #23c02350;
|
||||||
|
--git-change-bg: #ffd55840;
|
||||||
|
--git-selected: #3572b0;
|
||||||
|
|
||||||
|
--git-delete: #c33;
|
||||||
|
--git-insert: #399839;
|
||||||
|
--git-change: #d0b44c;
|
||||||
|
--git-move: #3572b0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-diff {
|
||||||
|
.d2h-d-none {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.d2h-wrapper {
|
||||||
|
text-align: left;
|
||||||
|
border-radius: 0.25em;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.d2h-file-header.d2h-file-header {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
font-family:
|
||||||
|
Source Sans Pro,
|
||||||
|
Helvetica Neue,
|
||||||
|
Helvetica,
|
||||||
|
Arial,
|
||||||
|
sans-serif;
|
||||||
|
height: 35px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
.d2h-file-header,
|
||||||
|
.d2h-file-stats {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.d2h-file-header {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.d2h-file-stats {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
.d2h-lines-added {
|
||||||
|
border: 1px solid var(--color-green);
|
||||||
|
border-radius: 5px 0 0 5px;
|
||||||
|
color: var(--color-green);
|
||||||
|
padding: 2px;
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-lines-deleted {
|
||||||
|
border: 1px solid var(--color-red);
|
||||||
|
border-radius: 0 5px 5px 0;
|
||||||
|
color: var(--color-red);
|
||||||
|
margin-left: 1px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-file-name-wrapper {
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
font-size: 15px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-file-name {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-size: var(--h5-size);
|
||||||
|
}
|
||||||
|
.d2h-file-wrapper {
|
||||||
|
border: 1px solid var(--background-secondary-alt);
|
||||||
|
border-radius: 3px;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
.d2h-file-collapse {
|
||||||
|
-webkit-box-pack: end;
|
||||||
|
-ms-flex-pack: end;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
border: 1px solid var(--background-secondary-alt);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: none;
|
||||||
|
font-size: 12px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
.d2h-file-collapse.d2h-selected {
|
||||||
|
background-color: var(--git-selected);
|
||||||
|
}
|
||||||
|
.d2h-file-collapse-input {
|
||||||
|
margin: 0 4px 0 0;
|
||||||
|
}
|
||||||
|
.d2h-diff-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
font-size: var(--code-size);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-files-diff {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-file-diff {
|
||||||
|
/*
|
||||||
|
overflow-y: scroll;
|
||||||
|
*/
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: var(--font-text-size);
|
||||||
|
line-height: var(--line-height-normal);
|
||||||
|
}
|
||||||
|
.d2h-file-side-diff {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: -8px;
|
||||||
|
margin-right: -4px;
|
||||||
|
overflow-x: scroll;
|
||||||
|
overflow-y: hidden;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
.d2h-code-line {
|
||||||
|
padding-left: 6em;
|
||||||
|
padding-right: 1.5em;
|
||||||
|
}
|
||||||
|
.d2h-code-line,
|
||||||
|
.d2h-code-side-line {
|
||||||
|
display: inline-block;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-code-side-line {
|
||||||
|
/* needed to be changed */
|
||||||
|
padding-left: 0.5em;
|
||||||
|
padding-right: 0.5em;
|
||||||
|
}
|
||||||
|
.d2h-code-line-ctn {
|
||||||
|
word-wrap: normal;
|
||||||
|
background: none;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-user-select: text;
|
||||||
|
-moz-user-select: text;
|
||||||
|
-ms-user-select: text;
|
||||||
|
user-select: text;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 100%;
|
||||||
|
/* only works for line-by-line */
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
.d2h-code-line del,
|
||||||
|
.d2h-code-side-line del {
|
||||||
|
background-color: var(--git-delete-hl);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
.d2h-code-line del,
|
||||||
|
.d2h-code-line ins,
|
||||||
|
.d2h-code-side-line del,
|
||||||
|
.d2h-code-side-line ins {
|
||||||
|
border-radius: 0.2em;
|
||||||
|
display: inline-block;
|
||||||
|
margin-top: -1px;
|
||||||
|
text-decoration: none;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-code-line ins,
|
||||||
|
.d2h-code-side-line ins {
|
||||||
|
background-color: var(--git-insert-hl);
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.d2h-code-line-prefix {
|
||||||
|
word-wrap: normal;
|
||||||
|
background: none;
|
||||||
|
display: inline;
|
||||||
|
padding: 0;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
.line-num1 {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.line-num1,
|
||||||
|
.line-num2 {
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
/*
|
||||||
|
padding: 0 0.5em;
|
||||||
|
*/
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
width: 2.5em;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.line-num2 {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.d2h-code-linenumber {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border: solid var(--background-modifier-border);
|
||||||
|
border-width: 0 1px;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: var(--text-faint);
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
position: absolute;
|
||||||
|
text-align: right;
|
||||||
|
width: 5.5em;
|
||||||
|
}
|
||||||
|
.d2h-code-linenumber:after {
|
||||||
|
content: "\200b";
|
||||||
|
}
|
||||||
|
.d2h-code-side-linenumber {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border: solid var(--background-modifier-border);
|
||||||
|
border-width: 0 1px;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: var(--text-faint);
|
||||||
|
cursor: pointer;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0 0.5em;
|
||||||
|
text-align: right;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
width: 4em;
|
||||||
|
/* needed to be changed */
|
||||||
|
display: table-cell;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.d2h-code-side-linenumber:after {
|
||||||
|
content: "\200b";
|
||||||
|
}
|
||||||
|
.d2h-code-side-emptyplaceholder,
|
||||||
|
.d2h-emptyplaceholder {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border-color: var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
.d2h-code-line-prefix,
|
||||||
|
.d2h-code-linenumber,
|
||||||
|
.d2h-code-side-linenumber,
|
||||||
|
.d2h-emptyplaceholder {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.d2h-code-linenumber,
|
||||||
|
.d2h-code-side-linenumber {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
.d2h-del {
|
||||||
|
background-color: var(--git-delete-bg);
|
||||||
|
border-color: var(--git-delete-hl);
|
||||||
|
}
|
||||||
|
.d2h-ins {
|
||||||
|
background-color: var(--git-insert-bg);
|
||||||
|
border-color: var(--git-insert-hl);
|
||||||
|
}
|
||||||
|
.d2h-info {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border-color: var(--background-modifier-border);
|
||||||
|
color: var(--text-faint);
|
||||||
|
}
|
||||||
|
.d2h-del,
|
||||||
|
.d2h-ins,
|
||||||
|
.d2h-file-diff .d2h-change {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
.d2h-file-diff .d2h-del.d2h-change {
|
||||||
|
background-color: var(--git-change-bg);
|
||||||
|
}
|
||||||
|
.d2h-file-diff .d2h-ins.d2h-change {
|
||||||
|
background-color: var(--git-insert-bg);
|
||||||
|
}
|
||||||
|
.d2h-file-list-wrapper {
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: default;
|
||||||
|
-webkit-user-drag: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.d2h-file-list-header {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.d2h-file-list-title {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.d2h-file-list-line {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.d2h-file-list {
|
||||||
|
}
|
||||||
|
.d2h-file-list > li {
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
margin: 0;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
.d2h-file-list > li:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.d2h-file-switch {
|
||||||
|
cursor: pointer;
|
||||||
|
display: none;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
.d2h-icon {
|
||||||
|
fill: currentColor;
|
||||||
|
margin-right: 10px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-deleted {
|
||||||
|
color: var(--git-delete);
|
||||||
|
}
|
||||||
|
.d2h-added {
|
||||||
|
color: var(--git-insert);
|
||||||
|
}
|
||||||
|
.d2h-changed {
|
||||||
|
color: var(--git-change);
|
||||||
|
}
|
||||||
|
.d2h-moved {
|
||||||
|
color: var(--git-move);
|
||||||
|
}
|
||||||
|
.d2h-tag {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
font-size: 10px;
|
||||||
|
margin-left: 5px;
|
||||||
|
padding: 0 2px;
|
||||||
|
}
|
||||||
|
.d2h-deleted-tag {
|
||||||
|
border: 1px solid var(--git-delete);
|
||||||
|
}
|
||||||
|
.d2h-added-tag {
|
||||||
|
border: 1px solid var(--git-insert);
|
||||||
|
}
|
||||||
|
.d2h-changed-tag {
|
||||||
|
border: 1px solid var(--git-change);
|
||||||
|
}
|
||||||
|
.d2h-moved-tag {
|
||||||
|
border: 1px solid var(--git-move);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* needed for line-by-line*/
|
||||||
|
|
||||||
|
.d2h-diff-tbody {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ====================== Line Authoring Information ====================== */
|
||||||
|
|
||||||
|
.cm-gutterElement.obs-git-blame-gutter {
|
||||||
|
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
|
||||||
|
border-width: 0px 2px 0.2px 2px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: var(--background-secondary);
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-gutterElement.obs-git-blame-gutter > div,
|
||||||
|
.line-author-settings-preview {
|
||||||
|
/* delegate text color to settings */
|
||||||
|
color: var(--obs-git-gutter-text);
|
||||||
|
font-family: monospace;
|
||||||
|
height: 100%; /* ensure, that age-based background color occupies entire parent */
|
||||||
|
text-align: right;
|
||||||
|
padding: 0px 6px 0px 6px;
|
||||||
|
white-space: pre; /* Keep spaces and do not collapse them. */
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 800px) {
|
||||||
|
/* hide git blame gutter not to superpose text */
|
||||||
|
.cm-gutterElement.obs-git-blame-gutter {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-unified-diff-view,
|
||||||
|
.git-split-diff-view .cm-deletedLine .cm-changedText {
|
||||||
|
background-color: #ee443330;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-unified-diff-view,
|
||||||
|
.git-split-diff-view .cm-insertedLine .cm-changedText {
|
||||||
|
background-color: #22bb2230;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
|
||||||
|
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
|
||||||
|
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Override styling of Codemirror merge view "collapsed lines" indicator */
|
||||||
|
.git-split-diff-view .ͼ2 .cm-collapsedLines {
|
||||||
|
background: var(--interactive-normal);
|
||||||
|
border-radius: var(--radius-m);
|
||||||
|
color: var(--text-accent);
|
||||||
|
font-size: var(--font-small);
|
||||||
|
padding: var(--size-4-1) var(--size-4-1);
|
||||||
|
}
|
||||||
|
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
|
||||||
|
background: var(--interactive-hover);
|
||||||
|
color: var(--text-accent-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-signs-gutter {
|
||||||
|
.cm-gutterElement {
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker:hover {
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-add {
|
||||||
|
background-color: var(--color-green);
|
||||||
|
justify-self: center;
|
||||||
|
height: inherit;
|
||||||
|
width: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-change {
|
||||||
|
background-color: var(--color-yellow);
|
||||||
|
justify-self: center;
|
||||||
|
height: inherit;
|
||||||
|
width: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-changedelete {
|
||||||
|
color: var(--color-yellow);
|
||||||
|
font-weight: var(--font-bold);
|
||||||
|
font-size: 1rem;
|
||||||
|
justify-self: center;
|
||||||
|
height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-delete {
|
||||||
|
background-color: var(--color-red);
|
||||||
|
height: 0.2rem;
|
||||||
|
width: 0.8rem;
|
||||||
|
align-self: end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-topdelete {
|
||||||
|
background-color: var(--color-red);
|
||||||
|
height: 0.2rem;
|
||||||
|
width: 0.8rem;
|
||||||
|
align-self: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-change {
|
||||||
|
width: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-add {
|
||||||
|
width: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-delete {
|
||||||
|
height: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-topdelete {
|
||||||
|
height: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-changedelete {
|
||||||
|
font-weight: var(--font-bold);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.staged {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-diff {
|
||||||
|
.cm-merge-revert {
|
||||||
|
width: 4em;
|
||||||
|
}
|
||||||
|
/* Ensure that merge revert markers are positioned correctly */
|
||||||
|
.cm-merge-revert > * {
|
||||||
|
position: absolute;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prevent shifting of the editor when git signs gutter is the only gutter present */
|
||||||
|
.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
|
||||||
|
margin-inline-end: 0;
|
||||||
|
.git-signs-gutter {
|
||||||
|
margin-inline-start: -1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-changes-status-bar-colored {
|
||||||
|
.git-add {
|
||||||
|
color: var(--color-green);
|
||||||
|
}
|
||||||
|
.git-change {
|
||||||
|
color: var(--color-yellow);
|
||||||
|
}
|
||||||
|
.git-delete {
|
||||||
|
color: var(--color-red);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-changes-status-bar .git-add {
|
||||||
|
margin-right: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-changes-status-bar .git-change {
|
||||||
|
margin-right: 0.3em;
|
||||||
|
}
|
||||||
43
.obsidian/plugins/templater-obsidian/main.js
vendored
Normal file
43
.obsidian/plugins/templater-obsidian/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
.obsidian/plugins/templater-obsidian/manifest.json
vendored
Normal file
11
.obsidian/plugins/templater-obsidian/manifest.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "templater-obsidian",
|
||||||
|
"name": "Templater",
|
||||||
|
"version": "2.19.0",
|
||||||
|
"description": "Create and use templates",
|
||||||
|
"minAppVersion": "1.12.2",
|
||||||
|
"author": "SilentVoid",
|
||||||
|
"authorUrl": "https://github.com/SilentVoid13",
|
||||||
|
"helpUrl": "https://silentvoid13.github.io/Templater/",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
226
.obsidian/plugins/templater-obsidian/styles.css
vendored
Normal file
226
.obsidian/plugins/templater-obsidian/styles.css
vendored
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
.templater_search {
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div {
|
||||||
|
border-top: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div > .setting-item {
|
||||||
|
border-top: none !important;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div > .setting-item > .setting-item-control {
|
||||||
|
justify-content: space-around;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div
|
||||||
|
> .setting-item
|
||||||
|
> .setting-item-control
|
||||||
|
> .setting-editor-extra-setting-button {
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_donating {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_title {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 5px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_template {
|
||||||
|
align-self: center;
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_cmd {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater_div2 > .setting-item {
|
||||||
|
align-content: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-prompt-div,
|
||||||
|
.templater-multisuggester-div {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-prompt-form {
|
||||||
|
display: flex;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-prompt-input,
|
||||||
|
.templater-multisuggester-input {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-button-div {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea.templater-prompt-input {
|
||||||
|
height: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea.templater-prompt-input:focus {
|
||||||
|
border-color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.templater-multisuggester-list {
|
||||||
|
margin: 1.5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .templater-command-bg {
|
||||||
|
left: 0px;
|
||||||
|
right: 0px;
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command {
|
||||||
|
font-size: 0.85em;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .templater-inline .cm-templater-command {
|
||||||
|
background-color: var(--background-primary-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
|
||||||
|
color: var(--code-property, #008bff);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
|
||||||
|
color: var(--code-function, #c0d700);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-keyword {
|
||||||
|
color: var(--code-keyword, #00a7aa);
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-atom {
|
||||||
|
color: var(--code-normal, #f39b35);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-value,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-number,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-type {
|
||||||
|
color: var(--code-value, #a06fca);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-def,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
|
||||||
|
color: var(--code-normal, var(--text-normal));
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-property,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-attribute {
|
||||||
|
color: var(--code-function, #98e342);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-variable,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-variable-2,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-variable-3,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-meta {
|
||||||
|
color: var(--code-property, #d4d4d4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-callee,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-operator,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-qualifier,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-builtin {
|
||||||
|
color: var(--code-operator, #fc4384);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-tag {
|
||||||
|
color: var(--code-tag, #fc4384);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-comment,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
|
||||||
|
color: var(--code-comment, #696d70);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-string,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-string-2 {
|
||||||
|
color: var(--code-string, #e6db74);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-header,
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-hr {
|
||||||
|
color: var(--code-keyword, #da7dae);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-link {
|
||||||
|
color: var(--code-normal, #696d70);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-s-obsidian .cm-templater-command.cm-error {
|
||||||
|
border-bottom: 1px solid #c42412;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-hints {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 10;
|
||||||
|
overflow: hidden;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
padding: 2px;
|
||||||
|
|
||||||
|
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||||
|
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||||
|
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid silver;
|
||||||
|
|
||||||
|
background: white;
|
||||||
|
font-size: 90%;
|
||||||
|
font-family: monospace;
|
||||||
|
|
||||||
|
max-height: 20em;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CodeMirror-hint {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 4px;
|
||||||
|
border-radius: 2px;
|
||||||
|
white-space: pre;
|
||||||
|
color: black;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.CodeMirror-hint-active {
|
||||||
|
background: #08f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
304
.obsidian/plugins/terminal/main.js
vendored
Normal file
304
.obsidian/plugins/terminal/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
14
.obsidian/plugins/terminal/manifest.json
vendored
Normal file
14
.obsidian/plugins/terminal/manifest.json
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"author": "polyipseity",
|
||||||
|
"description": "Integrate consoles, shells, and terminals.",
|
||||||
|
"fundingUrl": {
|
||||||
|
"Buy Me a Coffee": "https://buymeacoffee.com/polyipseity",
|
||||||
|
"GitHub Sponsors": "https://github.com/sponsors/polyipseity"
|
||||||
|
},
|
||||||
|
"version": "3.23.0",
|
||||||
|
"authorUrl": "https://github.com/polyipseity",
|
||||||
|
"id": "terminal",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"minAppVersion": "1.4.11",
|
||||||
|
"name": "Terminal"
|
||||||
|
}
|
||||||
32
.obsidian/plugins/terminal/styles.css
vendored
Normal file
32
.obsidian/plugins/terminal/styles.css
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
.obsidian-plugin-library\:icon{fill:none;stroke:currentColor}.obsidian-plugin-library\:await-css{display:unset!important}.obsidian-plugin-library\:hide-status-bar{display:none}/**
|
||||||
|
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
||||||
|
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
||||||
|
* https://github.com/chjj/term.js
|
||||||
|
* @license MIT
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* Originally forked from (with the author's permission):
|
||||||
|
* Fabrice Bellard's javascript vt100 for jslinux:
|
||||||
|
* http://bellard.org/jslinux/
|
||||||
|
* Copyright (c) 2011 Fabrice Bellard
|
||||||
|
* The original design remains. The terminal itself
|
||||||
|
* has been extended to include xterm CSI codes, among
|
||||||
|
* other features.
|
||||||
|
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.workspace-leaf-content[data-type="terminal:terminal"] .view-content{overflow:clip;display:flex;flex-direction:column}.terminal\:terminal{flex:1;min-width:0;min-height:0}.is-phone .workspace-leaf-content[data-type="terminal:terminal"] .view-content{padding-bottom:max(var(--size-4-4),calc(var(--icon-l) + var(--size-4-2) + max(var(--size-4-2),var(--safe-area-inset-bottom))))}
|
||||||
3
.obsidian/templates.json
vendored
Normal file
3
.obsidian/templates.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"folder": "templates"
|
||||||
|
}
|
||||||
BIN
.sync_3db9100e9b7e.db
Normal file
BIN
.sync_3db9100e9b7e.db
Normal file
Binary file not shown.
66
CLAUDE.md
66
CLAUDE.md
@@ -5,30 +5,53 @@
|
|||||||
|
|
||||||
## Язык: русский
|
## Язык: русский
|
||||||
|
|
||||||
## Структура
|
## Структура (Obsidian vault)
|
||||||
- `projects/dttb/` — домашний сервер (Proxmox, сеть, все сервисы)
|
- `projects/dttb/` — домашний сервер (Proxmox, сеть, все сервисы)
|
||||||
- `network-topology.md` — полная карта сети 10.0.0.0/24
|
- `network-topology.md` — полная карта сети 10.0.0.0/24
|
||||||
- `proxmox-inventory.md` — все VM/LXC
|
- `proxmox-inventory.md` — все VM/LXC
|
||||||
- `credentials.md` — пароли и ключи ⚠️
|
- `credentials.md` — пароли и ключи
|
||||||
- `npm-proxy-hosts.md` — домены *.dttb.ru
|
- `npm-proxy-hosts.md` — домены *.dttb.ru
|
||||||
- `projects/niikn/` — проект НИИКН
|
- `projects/niikn/` — проект НИИКН
|
||||||
|
- `projects/glavtorg/` — проект Главторг (Windows-сервер, 1С)
|
||||||
- `decisions/` — принятые решения (формат: YYYY-MM-DD-тема.md)
|
- `decisions/` — принятые решения (формат: YYYY-MM-DD-тема.md)
|
||||||
- `snippets/` — полезный код и конфиги
|
- `snippets/` — полезный код и конфиги
|
||||||
- `notes/` — заметки из чатов с ИИ
|
- `notes/` — заметки из чатов с ИИ
|
||||||
|
- `daily/` — ежедневные заметки (YYYY-MM-DD.md)
|
||||||
|
- `templates/` — шаблоны (daily-note, decision)
|
||||||
|
|
||||||
|
## Obsidian-конвенции
|
||||||
|
- Используй `[[двойные скобки]]` для внутренних ссылок
|
||||||
|
- Теги `#topic` для фильтрации
|
||||||
|
- Daily notes в формате YYYY-MM-DD
|
||||||
|
- Разделяй факты (decisions/) от рабочих заметок (notes/)
|
||||||
|
|
||||||
## Инфраструктура
|
## Инфраструктура
|
||||||
- **Proxmox:** 10.0.0.250 (root/1qaz!QAZ)
|
- **Proxmox:** 10.0.0.250 (root/1qaz!QAZ)
|
||||||
- **Gitea:** git.dttb.ru (oleg/OL260380eg)
|
- **Gitea:** git.dttb.ru (oleg/OL260380eg) — LXC 136 (10.0.0.189)
|
||||||
- **Nextcloud:** dttb.ru (admin/1qaz!QAZ)
|
- **Nextcloud AIO:** dttb.ru (admin/1qaz!QAZ) — VM 250 (10.0.0.230:11001)
|
||||||
- **NPM:** 10.0.0.195:81 (it5870@yandex.ru/1qaz!QAZ)
|
- **NPM:** 10.0.0.195:81 (it5870@yandex.ru/1qaz!QAZ) — LXC 103
|
||||||
- **Clawdbot (Максимка):** 10.0.0.206 (bot.dttb.ru)
|
- **code-server:** ai.dttb.ru — LXC 132 (10.0.0.179) + OmniRoute + CLIProxy
|
||||||
|
- **OpenClaw:** bot.dttb.ru — LXC 137 (10.0.0.239) — основной AI-бот
|
||||||
|
|
||||||
## Правила
|
## Синхронизация knowledge-base
|
||||||
1. Проверяй базу перед работой — решение может уже быть
|
См. [[decisions/2026-04-17-nextcloud-sync-schema]]. Три-четыре хоста держат vault в синхроне через Gitea:
|
||||||
2. Сохраняй новые решения в `decisions/`
|
- **Mac** `~/knowledge-base` — RW, git + rclone-bisync на Nextcloud (Stop-hook)
|
||||||
3. Полезный код → `snippets/`
|
- **code-server LXC 132** `/root/knowledge-base` — RW, cron `*/5` `kb-autosync.sh`
|
||||||
4. Обновляй inventory при изменениях в инфраструктуре
|
- **openclaw LXC 137** `/root/knowledge-base` — RO, cron `*/15` `kb-pull.sh`
|
||||||
5. Коммить на русском: `git add -A && git commit -m "описание" && git push`
|
- **Nextcloud** `/Knowledge Base/` — сервисная копия для iPhone/веб-доступа
|
||||||
|
|
||||||
|
## Частые команды
|
||||||
|
- Список VM: `sshpass -p '1qaz!QAZ' ssh -o StrictHostKeyChecking=no root@10.0.0.250 qm list`
|
||||||
|
- Список LXC: `sshpass -p '1qaz!QAZ' ssh -o StrictHostKeyChecking=no root@10.0.0.250 pct list`
|
||||||
|
- Проверить хост: `ping -c3 <ip>`
|
||||||
|
- Домены NPM: смотри `projects/dttb/npm-proxy-hosts.md`
|
||||||
|
- Карта сети: смотри `projects/dttb/network-topology.md`
|
||||||
|
|
||||||
|
## Как работать
|
||||||
|
- Перед правкой — читай текущее состояние файла
|
||||||
|
- Не предлагай решения, которые уже описаны в `decisions/`
|
||||||
|
- При изменениях в инфраструктуре — обнови `proxmox-inventory.md` и `network-topology.md`
|
||||||
|
- Отвечай кратко, без воды и повторений
|
||||||
|
|
||||||
## Ресёрч через OmniRoute (бесплатные модели)
|
## Ресёрч через OmniRoute (бесплатные модели)
|
||||||
|
|
||||||
@@ -41,18 +64,25 @@
|
|||||||
- `research_compare(query, models?)` — сравнить ответы нескольких моделей
|
- `research_compare(query, models?)` — сравнить ответы нескольких моделей
|
||||||
- `models_list()` — список доступных бесплатных моделей
|
- `models_list()` — список доступных бесплатных моделей
|
||||||
|
|
||||||
### Рекомендуемые модели для ресёрча
|
|
||||||
- `kr/claude-sonnet-4.5` — основная (Kiro/AWS, бесплатно)
|
|
||||||
- `cx/gpt-5.4` — альтернатива (Codex/OpenAI, бесплатно)
|
|
||||||
- `gh/claude-opus-4.6` — GitHub Models (бесплатно, лимиты)
|
|
||||||
- `gemini-cli/gemini-2.5-pro` — Google Gemini
|
|
||||||
|
|
||||||
### Когда использовать research
|
### Когда использовать research
|
||||||
- Поиск best practices и подходов к задаче
|
- Поиск best practices и подходов к задаче
|
||||||
- Сравнение технологий/решений
|
- Сравнение технологий/решений
|
||||||
- Генерация конфигов и шаблонов для проверки
|
- Генерация конфигов и шаблонов для проверки
|
||||||
- НЕ используй для простых задач где ответ очевиден
|
- НЕ используй для простых задач где ответ очевиден
|
||||||
|
|
||||||
|
## Правила
|
||||||
|
1. Проверяй базу перед работой — решение может уже быть
|
||||||
|
2. Сохраняй новые решения в `decisions/`
|
||||||
|
3. Полезный код → `snippets/`
|
||||||
|
4. Обновляй inventory при изменениях в инфраструктуре
|
||||||
|
5. Коммить на русском: `git add -A && git commit -m "описание" && git push`
|
||||||
|
|
||||||
|
### Рекомендуемые модели для ресёрча через research-тул
|
||||||
|
- `kr/claude-sonnet-4.5` — основная (Kiro/AWS, бесплатно)
|
||||||
|
- `cx/gpt-5.4` — альтернатива (Codex/OpenAI, бесплатно)
|
||||||
|
- `gh/claude-opus-4.6` — GitHub Models (бесплатно, лимиты)
|
||||||
|
- `gemini-cli/gemini-2.5-pro` — Google Gemini
|
||||||
|
|
||||||
### CLI скрипт
|
### CLI скрипт
|
||||||
```bash
|
```bash
|
||||||
research "вопрос" # через Sonnet 4.5
|
research "вопрос" # через Sonnet 4.5
|
||||||
|
|||||||
21
README.md
21
README.md
@@ -22,3 +22,24 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
*Создано: 2026-02-26*
|
*Создано: 2026-02-26*
|
||||||
|
|
||||||
|
<!-- kb-auto-index -->
|
||||||
|
## Карта базы
|
||||||
|
|
||||||
|
- [[decisions/README]]
|
||||||
|
- [[notes/README]]
|
||||||
|
- [[snippets/README]]
|
||||||
|
- [[projects/dttb/README]]
|
||||||
|
- [[projects/niikn/README]]
|
||||||
|
- [[projects/glavtorg/README]]
|
||||||
|
- [[projects/krasnogorsk/README]]
|
||||||
|
- [[projects/mmfb/proxmox-inventory]]
|
||||||
|
- [[claude-memory/MEMORY]]
|
||||||
|
- [[projects/all-projects-summary]]
|
||||||
|
- [[projects/bitrix-sites]]
|
||||||
|
- [[projects/clawdbot-bots]]
|
||||||
|
- [[projects/homelab-proxmox]]
|
||||||
|
- [[projects/infrastructure-overview]]
|
||||||
|
- [[projects/nextcloud]]
|
||||||
|
- [[projects/unresolved-issues]]
|
||||||
|
- [[projects/video-surveillance]]
|
||||||
|
|||||||
0
audit/.gitkeep
Normal file
0
audit/.gitkeep
Normal file
63
audit/2026-04-17-drift.md
Normal file
63
audit/2026-04-17-drift.md
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: audit
|
||||||
|
source: kb-audit.py
|
||||||
|
tags: [audit, drift, infrastructure]
|
||||||
|
---
|
||||||
|
|
||||||
|
# KB drift audit — 2026-04-17
|
||||||
|
|
||||||
|
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
|
||||||
|
|
||||||
|
- Живых гостей Proxmox: **36**
|
||||||
|
- Упомянуто в inventory: **39**
|
||||||
|
- В обоих: 36 / только в live: 0 / отсутствуют в live: 0
|
||||||
|
- Известны как удалённые: 3 (в `## 🗑️ Удалённые`)
|
||||||
|
|
||||||
|
## ✓ Удалённые хосты (задокументированы): 129, 133, 135
|
||||||
|
|
||||||
|
## ✓ Inventory полностью совпадает с живой инфраструктурой
|
||||||
|
|
||||||
|
## Полный живой список
|
||||||
|
|
||||||
|
| VMID | Type | Status | Name |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 100 | VM | stopped | NV |
|
||||||
|
| 101 | LXC | stopped | n8n |
|
||||||
|
| 102 | LXC | stopped | SMB |
|
||||||
|
| 103 | LXC | running | NPM |
|
||||||
|
| 104 | VM | stopped | Agent-DVR |
|
||||||
|
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
|
||||||
|
| 106 | VM | running | pbs |
|
||||||
|
| 107 | VM | running | Mailcow |
|
||||||
|
| 108 | LXC | stopped | zabbix |
|
||||||
|
| 109 | VM | stopped | itilelegent |
|
||||||
|
| 110 | VM | stopped | Cloud |
|
||||||
|
| 111 | VM | running | WinServer2025 |
|
||||||
|
| 112 | VM | stopped | cloud-dttb |
|
||||||
|
| 113 | LXC | running | VaultWarden |
|
||||||
|
| 114 | LXC | running | LinkWarden |
|
||||||
|
| 115 | LXC | running | watchyourlan |
|
||||||
|
| 116 | LXC | running | rustdeskserver |
|
||||||
|
| 117 | LXC | stopped | motioneye |
|
||||||
|
| 118 | LXC | stopped | plex |
|
||||||
|
| 119 | LXC | stopped | myspeed |
|
||||||
|
| 120 | VM | stopped | 7 |
|
||||||
|
| 121 | LXC | stopped | docker-windows |
|
||||||
|
| 122 | LXC | stopped | qbittorrent |
|
||||||
|
| 123 | LXC | stopped | proxmox-local |
|
||||||
|
| 124 | VM | stopped | Matrix |
|
||||||
|
| 125 | VM | stopped | datacentr |
|
||||||
|
| 126 | LXC | stopped | debian |
|
||||||
|
| 127 | VM | running | haos-17.0 |
|
||||||
|
| 130 | VM | stopped | Zima-OS |
|
||||||
|
| 132 | LXC | running | code-server |
|
||||||
|
| 134 | LXC | running | ZnamSecurityBot |
|
||||||
|
| 136 | LXC | running | gitea |
|
||||||
|
| 137 | LXC | running | openclaw |
|
||||||
|
| 138 | LXC | running | vpn-proxy |
|
||||||
|
| 139 | LXC | running | yaroslav-assistant |
|
||||||
|
| 250 | VM | running | Nextcloud-AIO |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*
|
||||||
13
audit/2026-04-17-proposed.md
Normal file
13
audit/2026-04-17-proposed.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: audit-proposed
|
||||||
|
source: kb-audit-propose.sh (Opus 4.7)
|
||||||
|
tags: [audit, proposed, inventory]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Предложенные правки inventory — 2026-04-17
|
||||||
|
|
||||||
|
Сгенерировано Claude Opus на основе [[2026-04-17-drift|drift-отчёта]].
|
||||||
|
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
|
||||||
|
|
||||||
|
Задача носила исследовательско-аналитический характер (сверка drift-отчёта), кода править не требуется — `ExitPlanMode` не нужен. Анализ выше, план-заметка сохранена в `/root/.claude/plans/drift-transient-bonbon.md`. Жду твоих указаний: закрывать аудит, удалять `.tmp`, или копать глубже (IP/NPM-сверка)?
|
||||||
34
audit/2026-04-18-creds-drift.md
Normal file
34
audit/2026-04-18-creds-drift.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: audit
|
||||||
|
source: kb-audit-creds.py
|
||||||
|
tags: [audit, creds, reachability]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Credentials reachability — 2026-04-18
|
||||||
|
|
||||||
|
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
|
||||||
|
Проверяется только reachability (HTTP status), не реальный логин.
|
||||||
|
|
||||||
|
- Всего URL: **12**
|
||||||
|
- ✓ Reachable: 12 / ⚠ Questionable: 0 / ❌ Unreachable: 0
|
||||||
|
|
||||||
|
## ✓ Все ответили нормально
|
||||||
|
|
||||||
|
| URL | Status | Категория |
|
||||||
|
|---|---|---|
|
||||||
|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
|
||||||
|
| `https://pve.dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
|
||||||
|
| `http://git.dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `http://10.0.0.195:81` | 200 | ✓ reachable |
|
||||||
|
| `https://npm.dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `https://dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
|
||||||
|
| `https://vps.sweb.ru` | 200 | ✓ reachable |
|
||||||
|
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
|
||||||
|
| `https://mail.niikn.com` | 200 | ✓ reachable |
|
||||||
|
| `http://192.168.1.22:81` | 200 | ✓ reachable |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически через `scripts/kb-audit-creds.py`.*
|
||||||
53
audit/2026-04-18-dns-drift.md
Normal file
53
audit/2026-04-18-dns-drift.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: audit
|
||||||
|
source: kb-audit-dns.py
|
||||||
|
tags: [audit, dns]
|
||||||
|
---
|
||||||
|
|
||||||
|
# DNS resolve audit — 2026-04-18
|
||||||
|
|
||||||
|
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
|
||||||
|
|
||||||
|
- Всего доменов: **22**
|
||||||
|
- NXDOMAIN на 8.8.8.8: 1 / пустой ответ локально: 1 / split-horizon: 0
|
||||||
|
|
||||||
|
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
|
||||||
|
|
||||||
|
| Домен | Локальный IP |
|
||||||
|
|---|---|
|
||||||
|
| `itilegent.ru` | (тоже нет) |
|
||||||
|
|
||||||
|
## ⚠ Пустой локальный резолв (роутер не знает)
|
||||||
|
|
||||||
|
- `itilegent.ru` (публичный: -)
|
||||||
|
|
||||||
|
## Полная таблица резолва
|
||||||
|
|
||||||
|
| Домен | 8.8.8.8 | 10.0.0.1 |
|
||||||
|
|---|---|---|
|
||||||
|
| `ai.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `bit.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `bitrix24.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `bot.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `git.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `home.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `ip.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `itilegent.ru` | — | — |
|
||||||
|
| `link.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `mail.dttb.ru` | 10.0.0.107 | 10.0.0.107 |
|
||||||
|
| `matrix.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `npm.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `office.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `plex.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `porteiner.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `pve.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `rec.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `remot.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `router.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `vpn.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
| `z.dttb.ru` | 10.0.0.195 | 10.0.0.195 |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически через `scripts/kb-audit-dns.py`.*
|
||||||
55
audit/2026-04-18-health.md
Normal file
55
audit/2026-04-18-health.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: audit
|
||||||
|
source: kb-health.py
|
||||||
|
score: 45
|
||||||
|
tags: [audit, health, metric]
|
||||||
|
---
|
||||||
|
|
||||||
|
# KB health — 2026-04-18
|
||||||
|
|
||||||
|
**Score (меньше = лучше): `45`**
|
||||||
|
Проверено файлов: 159
|
||||||
|
|
||||||
|
## Разбивка
|
||||||
|
|
||||||
|
| Категория | Кол-во | Вес | Штраф |
|
||||||
|
|---|---:|---:|---:|
|
||||||
|
| broken_wikilinks | 0 | 10 | 0 |
|
||||||
|
| broken_paths | 3 | 10 | 30 |
|
||||||
|
| missing_frontmatter | 0 | 3 | 0 |
|
||||||
|
| orphan_files | 0 | 2 | 0 |
|
||||||
|
| undated_todos | 0 | 1 | 0 |
|
||||||
|
| duplicate_basenames | 3 | 5 | 15 |
|
||||||
|
| **ИТОГО** | | | **45** |
|
||||||
|
|
||||||
|
## Битые relative-пути
|
||||||
|
|
||||||
|
| Откуда | Путь |
|
||||||
|
|---|---|
|
||||||
|
| `decisions/2026-04-14-niikn-openwrt-awg-fix.md` | `/root/.claude/knowledge-base/projects/niikn/openwrt-bypass.md` |
|
||||||
|
| `decisions/2026-04-14-niikn-openwrt-awg-fix.md` | `/root/.claude/projects/-root/memory/niikn-vpn-status.md` |
|
||||||
|
| `claude-memory/niikn-vpn-status.md` | `/root/.claude/knowledge-base/projects/niikn/openwrt-bypass.md` |
|
||||||
|
|
||||||
|
## Дубликаты имён (3)
|
||||||
|
|
||||||
|
- `README.md`:
|
||||||
|
- `README.md`
|
||||||
|
- `decisions/README.md`
|
||||||
|
- `notes/README.md`
|
||||||
|
- `projects/krasnogorsk/README.md`
|
||||||
|
- `projects/dttb/README.md`
|
||||||
|
- `projects/glavtorg/README.md`
|
||||||
|
- `projects/niikn/README.md`
|
||||||
|
- `projects/dttb/nextcloud-talk-bot/README.md`
|
||||||
|
- `snippets/README.md`
|
||||||
|
- `scripts/README.md`
|
||||||
|
- `nextcloud.md`:
|
||||||
|
- `projects/nextcloud.md`
|
||||||
|
- `projects/dttb/nextcloud.md`
|
||||||
|
- `proxmox-inventory.md`:
|
||||||
|
- `projects/dttb/proxmox-inventory.md`
|
||||||
|
- `projects/mmfb/proxmox-inventory.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*
|
||||||
59
audit/2026-04-18-npm-drift.md
Normal file
59
audit/2026-04-18-npm-drift.md
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: audit
|
||||||
|
source: kb-audit-npm.py
|
||||||
|
tags: [audit, drift, npm]
|
||||||
|
---
|
||||||
|
|
||||||
|
# NPM drift audit — 2026-04-18
|
||||||
|
|
||||||
|
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
|
||||||
|
|
||||||
|
- Живых proxy hosts: **22**
|
||||||
|
- В KB: **20**
|
||||||
|
- Совпадений: 20 / новых: 2 / удалённых из NPM: 0 / с изменениями: 2
|
||||||
|
|
||||||
|
## ⚠ Новые hosts (в NPM есть, в KB нет)
|
||||||
|
|
||||||
|
| ID | Домены | Backend | SSL | Enabled |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
|
||||||
|
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
|
||||||
|
|
||||||
|
## 🔄 Изменения (ID совпадает, но что-то сменилось)
|
||||||
|
|
||||||
|
### #12 `bitrix24.dttb.ru`
|
||||||
|
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
|
||||||
|
|
||||||
|
### #22 `git.dttb.ru`
|
||||||
|
- ssl: KB=✗ → live=✓
|
||||||
|
|
||||||
|
## Полный живой список
|
||||||
|
|
||||||
|
| ID | Домены | Backend | SSL | Enabled |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
|
||||||
|
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
|
||||||
|
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
|
||||||
|
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
|
||||||
|
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
|
||||||
|
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
|
||||||
|
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
|
||||||
|
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
|
||||||
|
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
|
||||||
|
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
|
||||||
|
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
|
||||||
|
| 14 | `remot.dttb.ru` | `10.0.0.43:21114` | ✓ | on |
|
||||||
|
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
|
||||||
|
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
|
||||||
|
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
|
||||||
|
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
|
||||||
|
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
|
||||||
|
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
|
||||||
|
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
|
||||||
|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
|
||||||
|
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
|
||||||
|
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически через `scripts/kb-audit-npm.py`.*
|
||||||
34
audit/2026-04-19-creds-drift.md
Normal file
34
audit/2026-04-19-creds-drift.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-19
|
||||||
|
type: audit
|
||||||
|
source: kb-audit-creds.py
|
||||||
|
tags: [audit, creds, reachability]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Credentials reachability — 2026-04-19
|
||||||
|
|
||||||
|
Ping-проверка URL из [[../projects/dttb/credentials|credentials.md]].
|
||||||
|
Проверяется только reachability (HTTP status), не реальный логин.
|
||||||
|
|
||||||
|
- Всего URL: **12**
|
||||||
|
- ✓ Reachable: 12 / ⚠ Questionable: 0 / ❌ Unreachable: 0
|
||||||
|
|
||||||
|
## ✓ Все ответили нормально
|
||||||
|
|
||||||
|
| URL | Status | Категория |
|
||||||
|
|---|---|---|
|
||||||
|
| `https://10.0.0.250:8006` | 200 | ✓ reachable |
|
||||||
|
| `https://pve.dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `http://10.0.0.189:3000` | 200 | ✓ reachable |
|
||||||
|
| `http://git.dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `http://10.0.0.195:81` | 200 | ✓ reachable |
|
||||||
|
| `https://npm.dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `https://dttb.ru` | 200 | ✓ reachable |
|
||||||
|
| `https://dttb.ru/remote.php/dav/files/admin` | 401 | ✓ auth-required (сервер жив) |
|
||||||
|
| `https://vps.sweb.ru` | 200 | ✓ reachable |
|
||||||
|
| `https://api.sweb.ru/domains/dns` | 200 | ✓ reachable |
|
||||||
|
| `https://mail.niikn.com` | 200 | ✓ reachable |
|
||||||
|
| `http://192.168.1.22:81` | 200 | ✓ reachable |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически через `scripts/kb-audit-creds.py`.*
|
||||||
81
audit/2026-04-19-dns-drift.md
Normal file
81
audit/2026-04-19-dns-drift.md
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-19
|
||||||
|
type: audit
|
||||||
|
source: kb-audit-dns.py
|
||||||
|
tags: [audit, dns]
|
||||||
|
---
|
||||||
|
|
||||||
|
# DNS resolve audit — 2026-04-19
|
||||||
|
|
||||||
|
Резолвим все домены из NPM через публичный DNS (8.8.8.8) и локальный роутер (10.0.0.1).
|
||||||
|
|
||||||
|
- Всего доменов: **22**
|
||||||
|
- NXDOMAIN на 8.8.8.8: 2 / пустой ответ локально: 1 / split-horizon: 20
|
||||||
|
|
||||||
|
## ❌ NXDOMAIN / не резолвится на 8.8.8.8 (публичный DNS)
|
||||||
|
|
||||||
|
| Домен | Локальный IP |
|
||||||
|
|---|---|
|
||||||
|
| `itilegent.ru` | (тоже нет) |
|
||||||
|
| `vpn.dttb.ru` | 10.0.0.195 |
|
||||||
|
|
||||||
|
## ⚠ Split-horizon — разные IP снаружи и внутри
|
||||||
|
|
||||||
|
Это нормально для *.dttb.ru (внешний Let's Encrypt IP vs локальный 10.0.0.195). Но неожиданный split может быть багом.
|
||||||
|
|
||||||
|
| Домен | Публичный (8.8.8.8) | Локальный (10.0.0.1) |
|
||||||
|
|---|---|---|
|
||||||
|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
|
||||||
|
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
|
||||||
|
## ⚠ Пустой локальный резолв (роутер не знает)
|
||||||
|
|
||||||
|
- `itilegent.ru` (публичный: -)
|
||||||
|
|
||||||
|
## Полная таблица резолва
|
||||||
|
|
||||||
|
| Домен | 8.8.8.8 | 10.0.0.1 |
|
||||||
|
|---|---|---|
|
||||||
|
| `ai.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `bit.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `bitrix24.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `bot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `git.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `home.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `ip.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `itilegent.ru` | — | — |
|
||||||
|
| `link.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `mail.dttb.ru` | 176.62.183.186 | 10.0.0.107 |
|
||||||
|
| `matrix.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `npm.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `office.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `plex.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `porteiner.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `pve.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `rec.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `remot.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `router.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
| `vpn.dttb.ru` | — | 10.0.0.195 |
|
||||||
|
| `z.dttb.ru` | 176.62.183.186 | 10.0.0.195 |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически через `scripts/kb-audit-dns.py`.*
|
||||||
63
audit/2026-04-19-drift.md
Normal file
63
audit/2026-04-19-drift.md
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-19
|
||||||
|
type: audit
|
||||||
|
source: kb-audit.py
|
||||||
|
tags: [audit, drift, infrastructure]
|
||||||
|
---
|
||||||
|
|
||||||
|
# KB drift audit — 2026-04-19
|
||||||
|
|
||||||
|
Сравнение живого `pct list` / `qm list` с [[../projects/dttb/proxmox-inventory|proxmox-inventory.md]]
|
||||||
|
|
||||||
|
- Живых гостей Proxmox: **36**
|
||||||
|
- Упомянуто в inventory: **39**
|
||||||
|
- В обоих: 36 / только в live: 0 / отсутствуют в live: 0
|
||||||
|
- Известны как удалённые: 3 (в `## 🗑️ Удалённые`)
|
||||||
|
|
||||||
|
## ✓ Удалённые хосты (задокументированы): 129, 133, 135
|
||||||
|
|
||||||
|
## ✓ Inventory полностью совпадает с живой инфраструктурой
|
||||||
|
|
||||||
|
## Полный живой список
|
||||||
|
|
||||||
|
| VMID | Type | Status | Name |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 100 | VM | stopped | NV |
|
||||||
|
| 101 | LXC | stopped | n8n |
|
||||||
|
| 102 | LXC | stopped | SMB |
|
||||||
|
| 103 | LXC | running | NPM |
|
||||||
|
| 104 | VM | stopped | Agent-DVR |
|
||||||
|
| 105 | VM | stopped | Nextcloud-AIO-dttb.ru |
|
||||||
|
| 106 | VM | running | pbs |
|
||||||
|
| 107 | VM | running | Mailcow |
|
||||||
|
| 108 | LXC | stopped | zabbix |
|
||||||
|
| 109 | VM | stopped | itilelegent |
|
||||||
|
| 110 | VM | stopped | Cloud |
|
||||||
|
| 111 | VM | running | WinServer2025 |
|
||||||
|
| 112 | VM | stopped | cloud-dttb |
|
||||||
|
| 113 | LXC | running | VaultWarden |
|
||||||
|
| 114 | LXC | running | LinkWarden |
|
||||||
|
| 115 | LXC | running | watchyourlan |
|
||||||
|
| 116 | LXC | running | rustdeskserver |
|
||||||
|
| 117 | LXC | stopped | motioneye |
|
||||||
|
| 118 | LXC | stopped | plex |
|
||||||
|
| 119 | LXC | stopped | myspeed |
|
||||||
|
| 120 | VM | stopped | 7 |
|
||||||
|
| 121 | LXC | stopped | docker-windows |
|
||||||
|
| 122 | LXC | stopped | qbittorrent |
|
||||||
|
| 123 | LXC | stopped | proxmox-local |
|
||||||
|
| 124 | VM | stopped | Matrix |
|
||||||
|
| 125 | VM | stopped | datacentr |
|
||||||
|
| 126 | LXC | stopped | debian |
|
||||||
|
| 127 | VM | running | haos-17.0 |
|
||||||
|
| 130 | VM | stopped | Zima-OS |
|
||||||
|
| 132 | LXC | running | code-server |
|
||||||
|
| 134 | LXC | running | ZnamSecurityBot |
|
||||||
|
| 136 | LXC | running | gitea |
|
||||||
|
| 137 | LXC | running | openclaw |
|
||||||
|
| 138 | LXC | running | vpn-proxy |
|
||||||
|
| 139 | LXC | running | yaroslav-assistant |
|
||||||
|
| 250 | VM | running | Nextcloud-AIO |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически сгенерировано `scripts/kb-audit.py`. Применять правки — вручную после ревью.*
|
||||||
47
audit/2026-04-19-health.md
Normal file
47
audit/2026-04-19-health.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-19
|
||||||
|
type: audit
|
||||||
|
source: kb-health.py
|
||||||
|
score: 15
|
||||||
|
tags: [audit, health, metric]
|
||||||
|
---
|
||||||
|
|
||||||
|
# KB health — 2026-04-19
|
||||||
|
|
||||||
|
**Score (меньше = лучше): `15`**
|
||||||
|
Проверено файлов: 194
|
||||||
|
|
||||||
|
## Разбивка
|
||||||
|
|
||||||
|
| Категория | Кол-во | Вес | Штраф |
|
||||||
|
|---|---:|---:|---:|
|
||||||
|
| broken_wikilinks | 0 | 10 | 0 |
|
||||||
|
| broken_paths | 0 | 10 | 0 |
|
||||||
|
| missing_frontmatter | 0 | 3 | 0 |
|
||||||
|
| orphan_files | 0 | 2 | 0 |
|
||||||
|
| undated_todos | 0 | 1 | 0 |
|
||||||
|
| duplicate_basenames | 3 | 5 | 15 |
|
||||||
|
| **ИТОГО** | | | **15** |
|
||||||
|
|
||||||
|
## Дубликаты имён (3)
|
||||||
|
|
||||||
|
- `README.md`:
|
||||||
|
- `README.md`
|
||||||
|
- `decisions/README.md`
|
||||||
|
- `notes/README.md`
|
||||||
|
- `projects/dttb/README.md`
|
||||||
|
- `projects/glavtorg/README.md`
|
||||||
|
- `projects/niikn/README.md`
|
||||||
|
- `projects/krasnogorsk/README.md`
|
||||||
|
- `projects/dttb/nextcloud-talk-bot/README.md`
|
||||||
|
- `snippets/README.md`
|
||||||
|
- `scripts/README.md`
|
||||||
|
- `nextcloud.md`:
|
||||||
|
- `projects/nextcloud.md`
|
||||||
|
- `projects/dttb/nextcloud.md`
|
||||||
|
- `proxmox-inventory.md`:
|
||||||
|
- `projects/dttb/proxmox-inventory.md`
|
||||||
|
- `projects/mmfb/proxmox-inventory.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
*Генерируется `scripts/kb-health.py`. JSON-версия в `audit/health-latest.json` для agent-loop.*
|
||||||
59
audit/2026-04-19-npm-drift.md
Normal file
59
audit/2026-04-19-npm-drift.md
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-19
|
||||||
|
type: audit
|
||||||
|
source: kb-audit-npm.py
|
||||||
|
tags: [audit, drift, npm]
|
||||||
|
---
|
||||||
|
|
||||||
|
# NPM drift audit — 2026-04-19
|
||||||
|
|
||||||
|
Сверка [[../projects/dttb/npm-proxy-hosts|npm-proxy-hosts.md]] с NPM API (https://npm.dttb.ru).
|
||||||
|
|
||||||
|
- Живых proxy hosts: **22**
|
||||||
|
- В KB: **20**
|
||||||
|
- Совпадений: 20 / новых: 2 / удалённых из NPM: 0 / с изменениями: 2
|
||||||
|
|
||||||
|
## ⚠ Новые hosts (в NPM есть, в KB нет)
|
||||||
|
|
||||||
|
| ID | Домены | Backend | SSL | Enabled |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
|
||||||
|
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
|
||||||
|
|
||||||
|
## 🔄 Изменения (ID совпадает, но что-то сменилось)
|
||||||
|
|
||||||
|
### #12 `bitrix24.dttb.ru`
|
||||||
|
- backend: KB=`10.0.0.223:8080` → live=`10.0.0.224:8080`
|
||||||
|
|
||||||
|
### #22 `git.dttb.ru`
|
||||||
|
- ssl: KB=✗ → live=✓
|
||||||
|
|
||||||
|
## Полный живой список
|
||||||
|
|
||||||
|
| ID | Домены | Backend | SSL | Enabled |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 1 | `dttb.ru` | `10.0.0.230:11001` | ✓ | on |
|
||||||
|
| 2 | `office.dttb.ru` | `10.0.0.169:8080` | ✓ | on |
|
||||||
|
| 3 | `itilegent.ru` | `10.0.0.223:8080` | ✓ | on |
|
||||||
|
| 4 | `npm.dttb.ru` | `10.0.0.195:81` | ✓ | on |
|
||||||
|
| 5 | `porteiner.dttb.ru` | `10.0.0.10:9443` | ✓ | on |
|
||||||
|
| 6 | `pve.dttb.ru` | `10.0.0.250:8006` | ✓ | on |
|
||||||
|
| 9 | `ai.dttb.ru` | `10.0.0.179:8080` | ✓ | on |
|
||||||
|
| 10 | `bit.dttb.ru` | `10.0.0.217:8080` | ✓ | on |
|
||||||
|
| 11 | `link.dttb.ru` | `10.0.0.184:3000` | ✓ | on |
|
||||||
|
| 12 | `bitrix24.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
|
||||||
|
| 13 | `ip.dttb.ru` | `10.0.0.112:8840` | ✓ | on |
|
||||||
|
| 14 | `remot.dttb.ru` | `10.0.0.43:21114` | ✓ | on |
|
||||||
|
| 15 | `plex.dttb.ru` | `10.0.0.200:32400` | ✓ | on |
|
||||||
|
| 16 | `home.dttb.ru` | `10.0.0.155:8123` | ✓ | on |
|
||||||
|
| 17 | `z.dttb.ru` | `10.0.0.220:80` | ✓ | on |
|
||||||
|
| 21 | `rec.dttb.ru` | `10.0.0.227:8091` | ✓ | on |
|
||||||
|
| 22 | `git.dttb.ru` | `10.0.0.189:3000` | ✓ | on |
|
||||||
|
| 23 | `matrix.dttb.ru` | `10.0.0.224:8080` | ✓ | on |
|
||||||
|
| 25 | `mail.dttb.ru` | `10.0.0.107:443` | ✓ | on |
|
||||||
|
| 26 | `router.dttb.ru` | `10.0.0.1:8080` | ✓ | on |
|
||||||
|
| 27 | `vpn.dttb.ru` | `10.0.0.141:8443` | - | on |
|
||||||
|
| 28 | `bot.dttb.ru` | `10.0.0.239:18789` | ✓ | on |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автоматически через `scripts/kb-audit-npm.py`.*
|
||||||
35
audit/2026-04-19-proposed.md
Normal file
35
audit/2026-04-19-proposed.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-19
|
||||||
|
type: audit-proposed
|
||||||
|
source: kb-audit-propose.sh (Opus 4.7)
|
||||||
|
tags: [audit, proposed, inventory]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Предложенные правки inventory — 2026-04-19
|
||||||
|
|
||||||
|
Сгенерировано Claude Opus на основе [[2026-04-19-drift|drift-отчёта]].
|
||||||
|
**Правки НЕ применены.** Ревью — ты. Apply — вручную.
|
||||||
|
|
||||||
|
## Результат анализа
|
||||||
|
|
||||||
|
### 1. Резюме
|
||||||
|
|
||||||
|
**Drift отсутствует.** Отчёт аудита явно говорит: «✓ Inventory полностью совпадает с живой инфраструктурой». Все 36 живых гостей совпадают с inventory, 3 удалённых (129, 133, 135) задокументированы. Сводная таблица (15 VM, 21 LXC, 16 running, 20 stopped) точно соответствует живому списку.
|
||||||
|
|
||||||
|
### 2. Конкретные правки
|
||||||
|
|
||||||
|
**Нет правок.** Я проверил по пунктам:
|
||||||
|
|
||||||
|
- Все VMID из live-списка присутствуют в inventory — **совпадает**
|
||||||
|
- Все имена гостей — **совпадают**
|
||||||
|
- Все статусы (running/stopped) — **совпадают**
|
||||||
|
- Все типы (VM/LXC) — **совпадают**
|
||||||
|
- Удалённые 129, 133, 135 — **задокументированы в секции «Удалённые»**
|
||||||
|
- Сводная таблица (15 VM / 21 LXC / 36 total / 16 running / 20 stopped) — **точна**
|
||||||
|
|
||||||
|
### 3. Предупреждения
|
||||||
|
|
||||||
|
- **Единственное замечание в самом inventory** (не из drift-отчёта): у LXC 116 (rustdeskserver) есть пометка «в NPM записан 10.0.0.43 — устарело, проверить» — это pre-existing заметка, не связанная с drift, но стоит когда-нибудь проверить и закрыть.
|
||||||
|
- Дата `date:` в frontmatter inventory (`2026-02-26`) отстаёт от реального последнего обновления (`2026-04-17` в тексте). Можно синхронизировать, но это косметика, не drift.
|
||||||
|
|
||||||
|
**Вывод: inventory актуален, правки не требуются.**
|
||||||
21
audit/health-latest.json
Normal file
21
audit/health-latest.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"date": "2026-04-19",
|
||||||
|
"score": 15,
|
||||||
|
"counts": {
|
||||||
|
"broken_wikilinks": 0,
|
||||||
|
"broken_paths": 0,
|
||||||
|
"missing_frontmatter": 0,
|
||||||
|
"orphan_files": 0,
|
||||||
|
"undated_todos": 0,
|
||||||
|
"duplicate_basenames": 3
|
||||||
|
},
|
||||||
|
"weights": {
|
||||||
|
"broken_wikilinks": 10,
|
||||||
|
"broken_paths": 10,
|
||||||
|
"missing_frontmatter": 3,
|
||||||
|
"orphan_files": 2,
|
||||||
|
"undated_todos": 1,
|
||||||
|
"duplicate_basenames": 5
|
||||||
|
},
|
||||||
|
"files_scanned": 194
|
||||||
|
}
|
||||||
21
daily/2026-04-17.md
Normal file
21
daily/2026-04-17.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: daily
|
||||||
|
---
|
||||||
|
|
||||||
|
# 2026-04-17
|
||||||
|
|
||||||
|
## Приоритеты дня
|
||||||
|
- [ ] (2026-04-17)
|
||||||
|
|
||||||
|
## Инфраструктура
|
||||||
|
<!-- Что менял, чинил, настраивал -->
|
||||||
|
|
||||||
|
## Заметки
|
||||||
|
<!-- Идеи, находки, инсайты -->
|
||||||
|
|
||||||
|
## Проекты
|
||||||
|
<!-- Прогресс по активным проектам -->
|
||||||
|
|
||||||
|
## Итог дня
|
||||||
|
<!-- Что сделано, что осталось -->
|
||||||
84
daily/2026-04-18.md
Normal file
84
daily/2026-04-18.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: daily
|
||||||
|
tags: [daily, kb-improvements, summary]
|
||||||
|
---
|
||||||
|
|
||||||
|
# 2026-04-18
|
||||||
|
|
||||||
|
## Итог дня — много сделано
|
||||||
|
|
||||||
|
### Закрыто из вчерашнего плана
|
||||||
|
- [x] **Fix B**: `.zshenv` unset 7 env-переменных от Claude Desktop → `claude` работает в Obsidian-terminal без 401
|
||||||
|
- [x] **Консолидация auto-memory**: 14 → 12 файлов, openclaw-feedback смёржен в `project_openclaw_bot.md`, создан `feedback_env_cleanup.md` + `feedback_sync_architecture.md`
|
||||||
|
- [x] **Audit расширен**: `kb-audit-npm.py`, `kb-audit-creds.py`, `kb-audit-dns.py` — в воскресном cron
|
||||||
|
- [x] **KB health + level 4 agent-loop** (karpathy-style):
|
||||||
|
- `scripts/kb-health.py` — 6 категорий штрафов, JSON для сравнения
|
||||||
|
- `scripts/kb-agent-loop.sh` — Opus правит в ветке, auto-merge если score ниже
|
||||||
|
- **Первый прогон: 493 → 45** (−91%). Opus сам написал helper `kb-add-indexes.py`
|
||||||
|
- [x] **iPhone Obsidian через iCloud**:
|
||||||
|
- vault скопирован в `~/Library/Mobile Documents/iCloud~md~obsidian/Documents/knowledge-base`
|
||||||
|
- `sync-icloud.sh` — rclone bisync local↔local (не падает в launchd)
|
||||||
|
- в Stop-hook: после sync.sh → sync-icloud.sh
|
||||||
|
- iPhone Obsidian видит vault в iCloud-разделе
|
||||||
|
- [x] **Фото Mac → Nextcloud**: `osxphotos export` → 697 файлов (3.1 GB) в `~/Library/CloudStorage/Nextcloud-admin@dttb․ru/Photos/` с раскладкой `YYYY/YYYY-MM/`. File Provider аплодит на сервер в фоне.
|
||||||
|
|
||||||
|
### Отложено на 2026-04-19
|
||||||
|
См. [[2026-04-19]].
|
||||||
|
|
||||||
|
## Инфраструктура — новые компоненты
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.config/nextcloud-kb/
|
||||||
|
├── sync.sh ← rclone bisync WebDAV ↔ Nextcloud (ручной + Stop-hook)
|
||||||
|
├── sync-icloud.sh ← NEW rclone bisync local ↔ iCloud Obsidian
|
||||||
|
└── session-saver.py ← сохраняет transcript в notes/claude/
|
||||||
|
|
||||||
|
knowledge-base/scripts/
|
||||||
|
├── kb-audit.py / kb-audit-apply.py / kb-audit-propose.sh ← Proxmox inventory drift
|
||||||
|
├── kb-audit-npm.py / kb-audit-creds.py / kb-audit-dns.py ← NEW расширение
|
||||||
|
├── kb-health.py ← NEW метрика качества KB
|
||||||
|
├── kb-agent-loop.sh ← NEW karpathy-style self-healing
|
||||||
|
├── kb-add-indexes.py ← NEW написан Opus для решения orphan_files
|
||||||
|
└── kb_audit_helpers.py ← общие функции
|
||||||
|
|
||||||
|
cron on code-server:
|
||||||
|
*/5 * * * * kb-autosync.sh
|
||||||
|
0 6 * * 0 audit + apply + health + agent-loop + propose (одной цепочкой)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Полная картина синхронизации сейчас
|
||||||
|
|
||||||
|
```
|
||||||
|
iPhone Obsidian (iCloud vault) iPhone-Nextcloud-app (photos, files)
|
||||||
|
↕ iCloud sync ↕ WebDAV
|
||||||
|
↕ ↕
|
||||||
|
~/Library/Mobile Documents/... Nextcloud dttb.ru (VM 250)
|
||||||
|
↕ sync-icloud.sh (Stop-hook) ↕ macOS File Provider
|
||||||
|
↕ ↕
|
||||||
|
╚══════════════════════════════════════════╝
|
||||||
|
↕
|
||||||
|
~/knowledge-base (Mac primary)
|
||||||
|
↕ git push/pull, obsidian-git autoPush
|
||||||
|
↕
|
||||||
|
Gitea git.dttb.ru (LXC 136)
|
||||||
|
↕
|
||||||
|
code-server LXC 132 (RW, cron */5)
|
||||||
|
openclaw LXC 137 (RO, cron */15)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Метрики
|
||||||
|
|
||||||
|
- KB health score: **45** (было утром 493)
|
||||||
|
- Коммитов за день: ~25 (включая 2 от `kb-agent-loop`)
|
||||||
|
- Файлов в vault: 169 md (с frontmatter: все)
|
||||||
|
- Память Claude Code: 12 файлов (с 14)
|
||||||
|
- Photos экспортировано: 697 файлов / 3.1 GB
|
||||||
|
|
||||||
|
## Что работает автоматом теперь
|
||||||
|
|
||||||
|
1. **Stop Claude-сессии** → save transcript → sync to Nextcloud WebDAV → sync to iCloud
|
||||||
|
2. **Каждые 5 мин на code-server** → pull + auto-commit + push
|
||||||
|
3. **Каждые 15 мин на openclaw** → pull (read-only, self-heal)
|
||||||
|
4. **Каждые 5 мин Obsidian-git** → auto-commit + auto-push
|
||||||
|
5. **Каждое воскресенье 06:00** → full audit chain + agent-loop self-healing
|
||||||
88
daily/2026-04-19.md
Normal file
88
daily/2026-04-19.md
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-19
|
||||||
|
type: daily
|
||||||
|
tags: [planning, kb-improvements]
|
||||||
|
---
|
||||||
|
|
||||||
|
# 2026-04-19
|
||||||
|
|
||||||
|
## Вчера сделано за день
|
||||||
|
|
||||||
|
См. [[2026-04-18]] — 6 крупных пунктов закрыто:
|
||||||
|
- Fix B env cleanup, консолидация auto-memory, расширение audit (NPM/Creds/DNS)
|
||||||
|
- KB health metric + level 4 agent-loop (**score 493 → 45**, Opus сам написал helper)
|
||||||
|
- iPhone Obsidian через iCloud, Mac-фото в Nextcloud (697 файлов)
|
||||||
|
|
||||||
|
## Приоритеты сегодня
|
||||||
|
|
||||||
|
### A. iPhone auto-upload фото в Nextcloud (5 мин)
|
||||||
|
На iPhone → Nextcloud app → Настройки → Автозагрузка:
|
||||||
|
1. Включить «Автоматически загружать фото» и «…видео»
|
||||||
|
2. Каталог: `/Photos/iPhone-upload/`
|
||||||
|
3. Только по Wi-Fi
|
||||||
|
4. Включить «Загружать существующие»
|
||||||
|
|
||||||
|
Работает в фоне часы-сутки. После — можно освобождать iCloud.
|
||||||
|
|
||||||
|
### B. Проверить что Mac-фото доехали на dttb.ru сервер
|
||||||
|
Вчера File Provider начал upload 3.1 GB. Проверить:
|
||||||
|
```bash
|
||||||
|
curl -sku admin:'1qaz!QAZ' -X PROPFIND \
|
||||||
|
"https://dttb.ru/remote.php/dav/files/admin/Photos/" -H "Depth: 1" \
|
||||||
|
| python3 -c "import sys,xml.etree.ElementTree as ET; \
|
||||||
|
r=ET.fromstring(sys.stdin.read()); \
|
||||||
|
print(len(r.findall('{DAV:}response')), 'objects')"
|
||||||
|
```
|
||||||
|
|
||||||
|
### C. Второй прогон agent-loop (10 мин) — эксперимент
|
||||||
|
Запустить вручную — посмотреть уйдёт ли score с 45 ниже (там остались duplicate_basenames=3 и broken_paths=3):
|
||||||
|
```bash
|
||||||
|
ssh root@10.0.0.250 'pct exec 132 -- bash -c "bash /root/knowledge-base/scripts/kb-agent-loop.sh"'
|
||||||
|
tail /var/log/kb-agent-loop.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Большие задачи на будущее (не сегодня)
|
||||||
|
|
||||||
|
### RAG для openclaw-бота (~день) ⭐⭐
|
||||||
|
- Эмбеддинги .md файлов через OmniRoute (бесплатно)
|
||||||
|
- SQLite/Qdrant локально на openclaw
|
||||||
|
- `post-commit` git hook обновляет эмбеддинги при изменениях
|
||||||
|
- Бот в Telegram делает vector search → топ-5 файлов в контекст Opus
|
||||||
|
- **Цель**: «найди что я писал про VPN в марте» → за секунду релевантный ответ
|
||||||
|
|
||||||
|
### Тест восстановления из PBS (~час)
|
||||||
|
- Потерять симулированно LXC 136 (gitea) → сколько минут до работы?
|
||||||
|
- Потерять VM 250 (Nextcloud) → то же
|
||||||
|
- Задокументировать runbook в `decisions/`
|
||||||
|
- **Цель**: узнать проблему с бэкапами сейчас, а не когда что-то реально потеряно
|
||||||
|
|
||||||
|
### Openclaw: реальная делегация (~1-2 часа)
|
||||||
|
Два пути:
|
||||||
|
- **Второй Telegram-бот** с профилем opus-only через CLIProxy — новая переменная окружения
|
||||||
|
- **Regex-hook в message-handler** — сложно, openclaw минифицирован, нужен обход
|
||||||
|
|
||||||
|
### Auto-apply для NPM drift (~30 мин)
|
||||||
|
По аналогии с `kb-audit-apply.py` (Proxmox): новые proxy hosts автоматом добавлять в `npm-proxy-hosts.md`.
|
||||||
|
|
||||||
|
### Session-saver v2 (~час)
|
||||||
|
Парсить transcript Claude и флажить:
|
||||||
|
- Упомянутые IP/хосты, которых нет в inventory
|
||||||
|
- TODO появившиеся в диалоге
|
||||||
|
- Команды, которые стоит в `snippets/`
|
||||||
|
|
||||||
|
## Инфраструктура
|
||||||
|
|
||||||
|
Без изменений после вчера. Вся автоматика работает:
|
||||||
|
- Stop-hook: session-saver → sync (Nextcloud) → sync-icloud
|
||||||
|
- code-server cron */5: auto-sync git
|
||||||
|
- openclaw cron */15: RO pull (self-heal)
|
||||||
|
- obsidian-git 5 мин autoPush
|
||||||
|
- воскр 06:00: full audit + agent-loop
|
||||||
|
|
||||||
|
## Заметки
|
||||||
|
|
||||||
|
Level 4 agent-loop реально работает — Opus за 7 минут снёс 448 штрафов из 463. Сам написал `kb-add-indexes.py` когда увидел массовую задачу. Это эквивалент karpathy/autoresearch для KB: метрика-ветка-merge-reset.
|
||||||
|
|
||||||
|
## Итог дня
|
||||||
|
|
||||||
|
(заполнить вечером)
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-02-26
|
||||||
|
type: decision
|
||||||
|
tags: [decision, bot]
|
||||||
|
---
|
||||||
|
|
||||||
# Исправление clawdbot на LXC 129 — cliproxy провайдер
|
# Исправление clawdbot на LXC 129 — cliproxy провайдер
|
||||||
|
|
||||||
**Дата:** 2026-02-26
|
**Дата:** 2026-02-26
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-03-03
|
||||||
|
type: decision
|
||||||
|
tags: [decision, mail]
|
||||||
|
---
|
||||||
|
|
||||||
# Сценарий настройки почтового сервера (Mailcow)
|
# Сценарий настройки почтового сервера (Mailcow)
|
||||||
|
|
||||||
> Отработан на niikn.com (2026-03-03). Следующий: dttb.ru.
|
> Отработан на niikn.com (2026-03-03). Следующий: dttb.ru.
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-03-04
|
||||||
|
type: decision
|
||||||
|
tags: [decision, matrix]
|
||||||
|
---
|
||||||
|
|
||||||
# Matrix НИИКН — настройка matrix.niikn.com
|
# Matrix НИИКН — настройка matrix.niikn.com
|
||||||
|
|
||||||
**Дата:** 2026-03-04
|
**Дата:** 2026-03-04
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-14
|
||||||
|
type: decision
|
||||||
|
tags: [decision, network]
|
||||||
|
---
|
||||||
|
|
||||||
# 2026-04-14: Восстановление системы обхода блокировок НИИКН
|
# 2026-04-14: Восстановление системы обхода блокировок НИИКН
|
||||||
|
|
||||||
## Проблема
|
## Проблема
|
||||||
|
|||||||
56
decisions/2026-04-14-openclaw-claude-code-pipeline.md
Normal file
56
decisions/2026-04-14-openclaw-claude-code-pipeline.md
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-14
|
||||||
|
type: decision
|
||||||
|
tags: [decision, bot]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Связка OmniRoute + Claude Code на code-server
|
||||||
|
|
||||||
|
**Дата:** 2026-04-14
|
||||||
|
**Статус:** Реализовано
|
||||||
|
|
||||||
|
## Проблема
|
||||||
|
|
||||||
|
CLIProxy (cliproxy.service) на code-server постоянно протухал (~8ч), требовал ручного обновления OAuth через SSH-туннель. OpenClaw (Clawdbot) через CLIProxy работал нестабильно.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
Разделить ресёрч и исполнение:
|
||||||
|
- **Ресёрч** — бесплатные модели через OmniRoute (localhost:20128)
|
||||||
|
- **Исполнение** — Claude Code CLI через Max подписку (прямой OAuth, без CLIProxy)
|
||||||
|
|
||||||
|
## Что сделано
|
||||||
|
|
||||||
|
### 1. MCP-сервер omniroute-research
|
||||||
|
- **Путь:** `/root/mcp-omniroute/server.js`
|
||||||
|
- **Тулы:** `research`, `research_compare`, `models_list`
|
||||||
|
- **Подключение:** через `~/.claude/settings.json` → mcpServers
|
||||||
|
- Claude Code может вызывать бесплатные модели для ресёрча прямо из диалога
|
||||||
|
|
||||||
|
### 2. Скрипт research
|
||||||
|
- **Путь:** `/usr/local/bin/research`
|
||||||
|
- **Парсер:** `/usr/local/bin/parse_response.py`
|
||||||
|
- **Использование:** `research "вопрос"` или `research -m cx/gpt-5.4 "вопрос"`
|
||||||
|
- Модели: kr/claude-sonnet-4.5, cx/gpt-5.4, gemini-cli/gemini-2.5-pro, gh/gpt-5.2-codex
|
||||||
|
|
||||||
|
### 3. Очистка CLIProxy из Claude Code
|
||||||
|
- Удалены `ANTHROPIC_API_KEY` и `ANTHROPIC_BASE_URL` из `.bashrc`, `.profile`
|
||||||
|
- Удалены env-переменные из `~/.claude/settings.json`
|
||||||
|
- CLIProxy (cliproxy.service) оставлен для Clawdbot-2/Znam (LXC 134)
|
||||||
|
- Claude Code теперь авторизуется напрямую через Max подписку
|
||||||
|
|
||||||
|
### 4. settings.json обновлён
|
||||||
|
- Добавлен mcpServers.omniroute
|
||||||
|
- Добавлены permissions для MCP тулов и research скрипта
|
||||||
|
- Убраны env-переменные CLIProxy
|
||||||
|
|
||||||
|
## Архитектура
|
||||||
|
|
||||||
|
```
|
||||||
|
Claude Code (Opus 4.6, Max) ─── прямой OAuth ─── Anthropic
|
||||||
|
│
|
||||||
|
└── MCP: omniroute ─── localhost:20128 ─── Kiro/Codex/Gemini/GitHub (FREE)
|
||||||
|
```
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
- [ ] Выполнить `claude auth login --claudeai` на code-server для прямой авторизации Max (2026-04-14)
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-16
|
||||||
|
type: decision
|
||||||
|
tags: [decision]
|
||||||
|
---
|
||||||
|
|
||||||
# Миграция UniFi Controller — Переделки (2026-04-16)
|
# Миграция UniFi Controller — Переделки (2026-04-16)
|
||||||
|
|
||||||
## Что было
|
## Что было
|
||||||
@@ -86,10 +92,10 @@ DNAT через NetBird ломал inform-пакеты (MTU 1280 vs 1500). **Р
|
|||||||
- **SSH к устройствам**: batlaew / 20iPUHpzpMXnp9Rx
|
- **SSH к устройствам**: batlaew / 20iPUHpzpMXnp9Rx
|
||||||
|
|
||||||
## Что осталось
|
## Что осталось
|
||||||
- [ ] Подключить остальные точки доступа (U6 LR, U6+) когда будут запитаны
|
- [ ] Подключить остальные точки доступа (U6 LR, U6+) когда будут запитаны (2026-04-16)
|
||||||
- [ ] Настроить WiFi сети окончательно (если нужны дополнительные SSID)
|
- [ ] Настроить WiFi сети окончательно (если нужны дополнительные SSID) (2026-04-16)
|
||||||
- [ ] Обновить прошивки устройств (контроллер предлагает update)
|
- [ ] Обновить прошивки устройств (контроллер предлагает update) (2026-04-16)
|
||||||
- [ ] Убрать alias 192.168.1.1/24 на OpenWrt (когда все устройства на 192.168.2.x)
|
- [ ] Убрать alias 192.168.1.1/24 на OpenWrt (когда все устройства на 192.168.2.x) (2026-04-16)
|
||||||
|
|
||||||
## 2026-04-17: Auto-discovery для новых AP
|
## 2026-04-17: Auto-discovery для новых AP
|
||||||
|
|
||||||
|
|||||||
115
decisions/2026-04-17-code-server-upgrade.md
Normal file
115
decisions/2026-04-17-code-server-upgrade.md
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: decision
|
||||||
|
tags: [decision]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Обновление и расширение ресурсов code-server (LXC 132)
|
||||||
|
|
||||||
|
**Дата:** 2026-04-17
|
||||||
|
**Статус:** Реализовано
|
||||||
|
|
||||||
|
## Симптомы (до работ)
|
||||||
|
|
||||||
|
- OpenClaw (Clawdbot AI через code-server) часто сбоит
|
||||||
|
- Load average на LXC 132: **4.3** при 2 vCPU (перегрузка 2×)
|
||||||
|
- RAM: 1 GB из 8 GB (проблема не в памяти)
|
||||||
|
- Claude Code extension: 2.1.111 (актуальная 2.1.112)
|
||||||
|
|
||||||
|
## Найденные проблемы
|
||||||
|
|
||||||
|
### 1. Нехватка CPU
|
||||||
|
- 2 vCPU, load avg 4.3 — процессор узкое место
|
||||||
|
- top показывает 44% busy (us+sy), но load 4.3 → много процессов ждут
|
||||||
|
|
||||||
|
### 2. Сбои OmniRoute (journalctl -u omniroute)
|
||||||
|
- `[HealthCheck] ✗ kiro/... refresh failed` — Kiro OAuth токен не рефрешится
|
||||||
|
- `[Claude Usage] OAuth endpoint returned 429` — rate-limit от Anthropic
|
||||||
|
- `[HealthCheck] Error: [ProxyDispatcher] Context proxy host is required` — сломан конфиг proxy
|
||||||
|
|
||||||
|
### 3. Устаревший Claude Code
|
||||||
|
- На code-server 2.1.111, локально обновили до 2.1.112
|
||||||
|
|
||||||
|
## План работ
|
||||||
|
|
||||||
|
1. [x] apt update + upgrade в LXC 132
|
||||||
|
2. [x] Обновить Claude Code CLI (npm global)
|
||||||
|
3. [x] Остановить LXC 132, увеличить CPU 2→4, запустить
|
||||||
|
4. [x] ~~Отключить SOCKS5~~ (было не причиной — оставил false, но баг был в другом)
|
||||||
|
5. [x] **Обновить OmniRoute 3.6.5 → 3.6.7** — починило `[ProxyDispatcher] Context proxy host is required`
|
||||||
|
6. [x] Обновить proxmox-inventory.md
|
||||||
|
7. [x] Проверить что OpenClaw стабилен — OmniRoute 3.6.7 работает без ошибок, токены рефрешатся
|
||||||
|
|
||||||
|
## Выполненные действия
|
||||||
|
|
||||||
|
### Обновления
|
||||||
|
- Claude Code CLI: 2.1.107 → 2.1.112 (`npm install -g @anthropic-ai/claude-code`)
|
||||||
|
- Локально (MacBook): 2.1.109 → 2.1.112
|
||||||
|
- apt upgrade: binutils, netplan.io, python3.12-dev, libpam-systemd, polkitd и др.
|
||||||
|
|
||||||
|
### Проблемы и их решения
|
||||||
|
|
||||||
|
**apt "висел" 14 минут** — debconf prompt на обновлении пакета. Убил процесс, запустил с `DEBIAN_FRONTEND=noninteractive` и `--force-confold/--force-confdef`.
|
||||||
|
|
||||||
|
**apt не качал пакеты** — IPv6 от archive.ubuntu.com недоступен (`No route to host` на всех IPv6 адресах). Решение: `-o Acquire::ForceIPv4=true`. Системная проблема LXC-сети — IPv6 не работает наружу.
|
||||||
|
|
||||||
|
**OmniRoute ошибка `[ProxyDispatcher] Context proxy host is required`** — **настоящая причина**: баг в версии 3.6.5. `resolveProxyForConnection` возвращал wrapper объект `{ proxy: null, level, levelId }`, который без `host` передавался в `proxyConfigToUrl` и падал с этой ошибкой. В 3.6.7 исправлено.
|
||||||
|
|
||||||
|
Сначала отключил SOCKS5 в `/root/OmniRoute/.env` (думал что это причина — не помогло, оставил `false` как и было в значении дефолта):
|
||||||
|
```
|
||||||
|
ENABLE_SOCKS5_PROXY=false
|
||||||
|
NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=false
|
||||||
|
```
|
||||||
|
|
||||||
|
Настоящее решение — обновление пакета:
|
||||||
|
```bash
|
||||||
|
cd /root/.npm/_npx/cb5891f90ae65d14
|
||||||
|
systemctl stop omniroute
|
||||||
|
npm install omniroute@latest
|
||||||
|
systemctl start omniroute
|
||||||
|
```
|
||||||
|
|
||||||
|
После обновления `[ProxyDispatcher]` ошибки пропали, токены рефрешатся штатно (`✓ gemini-cli/...@...com refreshed`).
|
||||||
|
|
||||||
|
**Важно:** в `/root/.npm/_npx/cb5891f90ae65d14/package.json` стоит `"omniroute": "^3.6.5"` — автоматически не обновится. Для будущих апдейтов — тот же `npm install omniroute@latest`.
|
||||||
|
|
||||||
|
### Ресурсы LXC 132 — CPU 2 → 4 (но это было не нужно)
|
||||||
|
- CPU: 2 vCPU → 4 vCPU (`pct set 132 --cores 4`)
|
||||||
|
- RAM: 8 GB (не менял)
|
||||||
|
|
||||||
|
**Ошибочное допущение:** сначала думал что load avg 4.3 внутри LXC — нагрузка на LXC. На самом деле `/proc/loadavg` в LXC возвращает load хоста Proxmox. Проверено: на хосте load 4.7, 8 cores, грузят WinServer2025 (VM 111, 247% CPU) и Nextcloud-AIO (VM 250). Сам LXC 132 почти idle (все процессы в top имеют %CPU=0.0).
|
||||||
|
|
||||||
|
Увеличение до 4 cores оставил — не вредит, запас для пиков. Но настоящая причина сбоев OpenClaw — баг в OmniRoute 3.6.5, не CPU.
|
||||||
|
|
||||||
|
### Полезные команды для будущего
|
||||||
|
```bash
|
||||||
|
# Рестарт LXC со сменой cores
|
||||||
|
pct shutdown 132 --timeout 30
|
||||||
|
pct set 132 --cores 4
|
||||||
|
pct start 132
|
||||||
|
|
||||||
|
# apt в LXC с проблемной IPv6
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::ForceIPv4=true \
|
||||||
|
-o Dpkg::Options::=--force-confold -o Dpkg::Options::=--force-confdef upgrade -y
|
||||||
|
|
||||||
|
# Проверка сервисов code-server
|
||||||
|
pct exec 132 -- systemctl is-active omniroute cliproxy code-server@root netbird
|
||||||
|
```
|
||||||
|
|
||||||
|
## Что ещё стоит сделать потом
|
||||||
|
|
||||||
|
- **IPv6 в LXC 132** — не работает наружу (`No route to host`). Не критично пока IPv4 работает, но стоит разобраться.
|
||||||
|
- **Kiro OAuth токен** — после рестарта ждём интервал 60 минут (по логам). Если снова `✗ kiro/... refresh failed` — рефреш через UI OmniRoute (http://10.0.0.179:20128).
|
||||||
|
- **Claude Usage 429** — rate-limit от Anthropic. Нормально при частых запросах, не наша проблема.
|
||||||
|
- **Откатить CPU обратно 2 vCPU** — можно сделать позже, не срочно. Текущих 4 в запасе.
|
||||||
|
|
||||||
|
## Главный вывод (для будущего)
|
||||||
|
|
||||||
|
Когда OmniRoute сбоит на code-server — **первым делом проверить его версию**:
|
||||||
|
```bash
|
||||||
|
cat /root/.npm/_npx/cb5891f90ae65d14/node_modules/omniroute/package.json | grep version
|
||||||
|
npm view omniroute version
|
||||||
|
```
|
||||||
|
Если расходятся — обновить. `^3.6.5` в package.json не обновляется автоматически.
|
||||||
|
|
||||||
|
Load average внутри LXC **не отражает** нагрузку контейнера — это load хоста Proxmox. Для нагрузки LXC смотреть `top`/`ps` на самом процессе, или `pct cpusets`/метрики Proxmox на хосте.
|
||||||
158
decisions/2026-04-17-nextcloud-sync-schema.md
Normal file
158
decisions/2026-04-17-nextcloud-sync-schema.md
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: decision
|
||||||
|
tags: [nextcloud, sync, gitea, rclone, infrastructure]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Синхронизация knowledge-base: Gitea + Nextcloud через rclone bisync
|
||||||
|
|
||||||
|
## Контекст
|
||||||
|
|
||||||
|
Vault `~/knowledge-base` хранился только в Gitea (`git.dttb.ru/oleg/knowledge-base.git`). Требования к надёжности и удобству:
|
||||||
|
- доступ с мобильного (iPhone Obsidian)
|
||||||
|
- мгновенная копия между устройствами без ручного `git pull/push`
|
||||||
|
- резервирование на случай проблем с git-историей
|
||||||
|
|
||||||
|
На dttb.ru развёрнут **Nextcloud AIO 32.0.6** (VM 250, 10.0.0.230:11001, NPM на `dttb.ru`). Ещё в феврале 2026 была создана папка `/Knowledge Base/` и односторонний скрипт `sync-kb-to-nextcloud.sh` на LXC 129 (Clawdbot) — но LXC 129 с тех пор удалён, скрипт не работает.
|
||||||
|
|
||||||
|
## Варианты
|
||||||
|
|
||||||
|
1. **Оставить только Gitea** — надёжно, но мобильный доступ через obsidian-git тормозной
|
||||||
|
2. **Перенести основу в Nextcloud** — хорошо для sync, но потеря git-истории
|
||||||
|
3. **Gitea основа + Nextcloud зеркало через GUI Nextcloud.app** — классика, real-time, но GUI wizard сложно автоматизировать
|
||||||
|
4. **Gitea основа + Nextcloud зеркало через rclone bisync + hook** — CLI-only, триггерится после Claude-сессий
|
||||||
|
5. **nextcloudcmd + launchd каждые 60 сек** — пробовал, **не работает**: Qt из launchd-контекста macOS получает `Host unreachable` хотя curl/ping в том же процессе работают. Специфика macOS 26 для background-агентов, обходить не смог.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
**Вариант 4 (CLI rclone bisync + Claude Code Stop-hook)** с опциональным добавлением GUI Nextcloud.app позже.
|
||||||
|
|
||||||
|
### Архитектура
|
||||||
|
|
||||||
|
```
|
||||||
|
iPhone Obsidian / Nextcloud клиенты
|
||||||
|
↕ HTTPS WebDAV
|
||||||
|
Nextcloud dttb.ru (VM 250)
|
||||||
|
↕ Apple File Provider API (macOS 26+)
|
||||||
|
~/Library/CloudStorage/Nextcloud-admin@dttb․ru/Knowledge Base/
|
||||||
|
↕ rclone bisync LOCAL↔LOCAL (launchd каждые 60 сек)
|
||||||
|
~/knowledge-base/ ◄── primary workspace
|
||||||
|
│ git push/pull + obsidian-git autoPush (5 мин)
|
||||||
|
▼
|
||||||
|
Gitea (git.dttb.ru) ◄── source of truth для серверных клиентов
|
||||||
|
│
|
||||||
|
├─► code-server LXC 132 /root/knowledge-base
|
||||||
|
│ cron */5: kb-autosync.sh (pull + auto-commit + push)
|
||||||
|
│
|
||||||
|
└─► openclaw LXC 137 /root/knowledge-base (READ-ONLY)
|
||||||
|
cron */15: kb-pull.sh (pull --ff-only only)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ключевая находка: local-to-local bisync через launchd
|
||||||
|
|
||||||
|
Первая попытка была rclone bisync ↔ WebDAV через launchd — падала с `Host unreachable` (Go из launchd-контекста macOS не может коннектиться на LAN). Обход:
|
||||||
|
1. Nextcloud.app настроен через webflow OAuth на admin@dttb.ru
|
||||||
|
2. macOS File Provider (native Apple API, не Qt) зеркалит весь `admin@dttb.ru` в `~/Library/CloudStorage/Nextcloud-admin@dttb․ru/`
|
||||||
|
3. rclone bisync теперь работает **между двумя локальными путями** — без network-syscalls, launchd-проблема обойдена
|
||||||
|
4. File Provider сам делает upload/download в Nextcloud (Apple-подписан, имеет полный network context)
|
||||||
|
|
||||||
|
**Задержка:** iPhone → Mac vault ≈ File Provider (10-30с) + rclone launchd (≤60с) ≈ 90 сек max.
|
||||||
|
|
||||||
|
### Расширение на серверы (2026-04-17)
|
||||||
|
|
||||||
|
| Хост | Путь | Режим | Триггер | Скрипт |
|
||||||
|
|------|------|-------|---------|--------|
|
||||||
|
| Mac | `~/knowledge-base` | RW, git + rclone+NC | Stop-hook Claude, ручной | `~/.config/nextcloud-kb/sync.sh` |
|
||||||
|
| code-server LXC 132 | `/root/knowledge-base` | RW git | cron `*/5 * * * *` | `/usr/local/bin/kb-autosync.sh` |
|
||||||
|
| openclaw LXC 137 | `/root/knowledge-base` | **RO git** (push disabled) | cron `*/15 * * * *` | `/usr/local/bin/kb-pull.sh` |
|
||||||
|
|
||||||
|
**openclaw read-only** через `git remote set-url --push origin DISABLED_READONLY` — любая попытка push из бота завершится ошибкой "Could not resolve host", случайно перезаписать не сможет.
|
||||||
|
|
||||||
|
### Компоненты
|
||||||
|
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/rclone.conf`** — WebDAV ремоут `kbsync:` на `https://dttb.ru/remote.php/dav/files/admin`, app password в obscured виде
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/rclone-filter.lst`** — исключения: `.git/**`, `.claude/worktrees/**`, `.obsidian/workspace*.json`, `.obsidian/cache/**`, `.DS_Store`, sync-метаданные
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/sync.sh`** — обёртка с atomic lock (mkdir), вызывает `rclone bisync` с retry
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/app-password`** — app password (chmod 600), получен через `POST /ocs/v2.php/core/getapppassword`
|
||||||
|
- **Hook в `~/.claude/settings.json`** — Stop-event триггер, `async: true`, запускает sync.sh если cwd в ~/knowledge-base
|
||||||
|
|
||||||
|
### Почему rclone а не nextcloudcmd
|
||||||
|
|
||||||
|
- nextcloudcmd (Qt) падает с `Host unreachable` при запуске из launchd-агента
|
||||||
|
- rclone (Go) работает в CLI, двусторонний `bisync` с state-файлами
|
||||||
|
- Проще retry-логика, log-файл, exit-коды
|
||||||
|
|
||||||
|
### Почему не nextcloudcmd + launchd-агент
|
||||||
|
|
||||||
|
Внутри launchd-процесса macOS 26:
|
||||||
|
- curl/nc/ping успешно коннектятся к 10.0.0.195:443
|
||||||
|
- Go и Qt runtime получают `EHOSTUNREACH` на тот же IP
|
||||||
|
- Не DNS, не firewall, не IPv6 — глубокая специфика network-context для background-агентов
|
||||||
|
- Решение: не запускать из launchd, а триггерить из user-session (Stop-hook = user-session)
|
||||||
|
|
||||||
|
### Для real-time sync (будущее, опционально)
|
||||||
|
|
||||||
|
GUI Nextcloud.app запускается в Aqua-session (не launchd), работает без этих проблем. Настройка через wizard, 6 кликов. На данный момент отложено.
|
||||||
|
|
||||||
|
## Последствия
|
||||||
|
|
||||||
|
### Что обновить
|
||||||
|
- [x] `credentials.md` — добавить Nextcloud creds, убрать ссылки на LXC 129/10.0.0.206
|
||||||
|
- [x] `projects/dttb/proxmox-inventory.md` — актуализировать список LXC (129, 133 больше нет)
|
||||||
|
- [x] `CLAUDE.md` (vault) — убрать упоминание LXC 129 Clawdbot если есть
|
||||||
|
- [x] `claude-memory/MEMORY.md` — обновить reference_infra, убрать LXC 133
|
||||||
|
|
||||||
|
### Что надо помнить
|
||||||
|
- Изменения локально → Nextcloud автоматом **только** после завершения Claude-сессии в `~/knowledge-base`, или ручным запуском `~/.config/nextcloud-kb/sync.sh`
|
||||||
|
- Изменения с другого устройства → подтянутся следующим запуском sync.sh (не автоматом)
|
||||||
|
- Для real-time надо доделать GUI Nextcloud.app wizard
|
||||||
|
- `.git/` **не** в Nextcloud — git и nextcloud параллельные каналы, не вложенные
|
||||||
|
|
||||||
|
### Файлы экосистемы
|
||||||
|
|
||||||
|
**На Mac:**
|
||||||
|
```
|
||||||
|
~/.config/nextcloud-kb/
|
||||||
|
├── app-password chmod 600 (для WebDAV ручного sync.sh)
|
||||||
|
├── rclone.conf chmod 600
|
||||||
|
├── rclone-filter.lst
|
||||||
|
├── sync.sh chmod 700 (WebDAV bisync — ручной + Stop-hook)
|
||||||
|
├── sync-local.sh chmod 700 (local bisync — через launchd)
|
||||||
|
├── sync.log, sync-local.log логи
|
||||||
|
├── rclone.log, rclone-local.log подробные rclone логи
|
||||||
|
└── sync.lock.d/ sync-local.lock.d/ atomic locks
|
||||||
|
|
||||||
|
~/Library/LaunchAgents/ru.dttb.kb-sync-local.plist StartInterval=60s
|
||||||
|
```
|
||||||
|
|
||||||
|
**На code-server (LXC 132):**
|
||||||
|
```
|
||||||
|
/root/knowledge-base/ полный RW git-клон
|
||||||
|
/usr/local/bin/kb-autosync.sh cron-скрипт */5
|
||||||
|
/var/log/kb-autosync.log логи
|
||||||
|
/tmp/kb-autosync.lock flock
|
||||||
|
```
|
||||||
|
|
||||||
|
**На openclaw (LXC 137):**
|
||||||
|
```
|
||||||
|
/root/knowledge-base/ RO git-клон (push disabled)
|
||||||
|
/usr/local/bin/kb-pull.sh cron-скрипт */15
|
||||||
|
/var/log/kb-pull.log логи
|
||||||
|
```
|
||||||
|
|
||||||
|
### Сквозной тест 2026-04-17 (пройден)
|
||||||
|
- Mac создаёт файл → `git push` → code-server `kb-autosync.sh` fast-forward через 0-5 мин → openclaw `kb-pull.sh` ff-only через 0-15 мин ✓
|
||||||
|
- code-server создаёт файл → auto-commit + push → Mac `git pull` подтягивает ✓
|
||||||
|
- Mac удаляет файл → push → обе LXC удаляют у себя при следующем sync ✓
|
||||||
|
|
||||||
|
### Credentials Nextcloud (dttb.ru)
|
||||||
|
- URL: `https://dttb.ru`
|
||||||
|
- User: `admin` / пароль `1qaz!QAZ`
|
||||||
|
- App password (для sync): хранится в `~/.config/nextcloud-kb/app-password`
|
||||||
|
- WebDAV: `https://dttb.ru/remote.php/dav/files/admin/Knowledge Base/`
|
||||||
|
- Сервер: Nextcloud AIO 32.0.6 на VM 250 (10.0.0.230:11001)
|
||||||
|
|
||||||
|
### Откат
|
||||||
|
- Остановить sync: удалить hook из `~/.claude/settings.json` + `rm -rf ~/.config/nextcloud-kb/`
|
||||||
|
- Удалить app password на сервере: User settings → Security → Devices/sessions
|
||||||
|
- Локальный vault не страдает — git remote и работает независимо
|
||||||
155
decisions/2026-04-17-nextcloud-sync-schema.md.conflict2
Normal file
155
decisions/2026-04-17-nextcloud-sync-schema.md.conflict2
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: decision
|
||||||
|
tags: [nextcloud, sync, gitea, rclone, infrastructure]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Синхронизация knowledge-base: Gitea + Nextcloud через rclone bisync
|
||||||
|
|
||||||
|
## Контекст
|
||||||
|
|
||||||
|
Vault `~/knowledge-base` хранился только в Gitea (`git.dttb.ru/oleg/knowledge-base.git`). Требования к надёжности и удобству:
|
||||||
|
- доступ с мобильного (iPhone Obsidian)
|
||||||
|
- мгновенная копия между устройствами без ручного `git pull/push`
|
||||||
|
- резервирование на случай проблем с git-историей
|
||||||
|
|
||||||
|
На dttb.ru развёрнут **Nextcloud AIO 32.0.6** (VM 250, 10.0.0.230:11001, NPM на `dttb.ru`). Ещё в феврале 2026 была создана папка `/Knowledge Base/` и односторонний скрипт `sync-kb-to-nextcloud.sh` на LXC 129 (Clawdbot) — но LXC 129 с тех пор удалён, скрипт не работает.
|
||||||
|
|
||||||
|
## Варианты
|
||||||
|
|
||||||
|
1. **Оставить только Gitea** — надёжно, но мобильный доступ через obsidian-git тормозной
|
||||||
|
2. **Перенести основу в Nextcloud** — хорошо для sync, но потеря git-истории
|
||||||
|
3. **Gitea основа + Nextcloud зеркало через GUI Nextcloud.app** — классика, real-time, но GUI wizard сложно автоматизировать
|
||||||
|
4. **Gitea основа + Nextcloud зеркало через rclone bisync + hook** — CLI-only, триггерится после Claude-сессий
|
||||||
|
5. **nextcloudcmd + launchd каждые 60 сек** — пробовал, **не работает**: Qt из launchd-контекста macOS получает `Host unreachable` хотя curl/ping в том же процессе работают. Специфика macOS 26 для background-агентов, обходить не смог.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
**Вариант 4 (CLI rclone bisync + Claude Code Stop-hook)** с опциональным добавлением GUI Nextcloud.app позже.
|
||||||
|
|
||||||
|
### Архитектура
|
||||||
|
|
||||||
|
```
|
||||||
|
iPhone Obsidian / Nextcloud клиенты
|
||||||
|
↕ HTTPS WebDAV
|
||||||
|
Nextcloud dttb.ru (VM 250)
|
||||||
|
↕ Apple File Provider API (macOS 26+)
|
||||||
|
~/Library/CloudStorage/Nextcloud-admin@dttb․ru/Knowledge Base/
|
||||||
|
↕ rclone bisync LOCAL↔LOCAL (launchd каждые 60 сек)
|
||||||
|
~/knowledge-base/ ◄── primary workspace
|
||||||
|
│ git push/pull + obsidian-git autoPush (5 мин)
|
||||||
|
▼
|
||||||
|
Gitea (git.dttb.ru) ◄── source of truth для серверных клиентов
|
||||||
|
│
|
||||||
|
├─► code-server LXC 132 /root/knowledge-base
|
||||||
|
│ cron */5: kb-autosync.sh (pull + auto-commit + push)
|
||||||
|
│
|
||||||
|
└─► openclaw LXC 137 /root/knowledge-base (READ-ONLY)
|
||||||
|
cron */15: kb-pull.sh (pull --ff-only only)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ключевая находка: local-to-local bisync через launchd
|
||||||
|
|
||||||
|
Первая попытка была rclone bisync ↔ WebDAV через launchd — падала с `Host unreachable` (Go из launchd-контекста macOS не может коннектиться на LAN). Обход:
|
||||||
|
1. Nextcloud.app настроен через webflow OAuth на admin@dttb.ru
|
||||||
|
2. macOS File Provider (native Apple API, не Qt) зеркалит весь `admin@dttb.ru` в `~/Library/CloudStorage/Nextcloud-admin@dttb․ru/`
|
||||||
|
3. rclone bisync теперь работает **между двумя локальными путями** — без network-syscalls, launchd-проблема обойдена
|
||||||
|
4. File Provider сам делает upload/download в Nextcloud (Apple-подписан, имеет полный network context)
|
||||||
|
|
||||||
|
**Задержка:** iPhone → Mac vault ≈ File Provider (10-30с) + rclone launchd (≤60с) ≈ 90 сек max.
|
||||||
|
|
||||||
|
### Расширение на серверы (2026-04-17)
|
||||||
|
|
||||||
|
| Хост | Путь | Режим | Триггер | Скрипт |
|
||||||
|
|------|------|-------|---------|--------|
|
||||||
|
| Mac | `~/knowledge-base` | RW, git + rclone+NC | Stop-hook Claude, ручной | `~/.config/nextcloud-kb/sync.sh` |
|
||||||
|
| code-server LXC 132 | `/root/knowledge-base` | RW git | cron `*/5 * * * *` | `/usr/local/bin/kb-autosync.sh` |
|
||||||
|
| openclaw LXC 137 | `/root/knowledge-base` | **RO git** (push disabled) | cron `*/15 * * * *` | `/usr/local/bin/kb-pull.sh` |
|
||||||
|
|
||||||
|
**openclaw read-only** через `git remote set-url --push origin DISABLED_READONLY` — любая попытка push из бота завершится ошибкой "Could not resolve host", случайно перезаписать не сможет.
|
||||||
|
|
||||||
|
### Компоненты
|
||||||
|
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/rclone.conf`** — WebDAV ремоут `kbsync:` на `https://dttb.ru/remote.php/dav/files/admin`, app password в obscured виде
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/rclone-filter.lst`** — исключения: `.git/**`, `.claude/worktrees/**`, `.obsidian/workspace*.json`, `.obsidian/cache/**`, `.DS_Store`, sync-метаданные
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/sync.sh`** — обёртка с atomic lock (mkdir), вызывает `rclone bisync` с retry
|
||||||
|
- **`/Users/ai/.config/nextcloud-kb/app-password`** — app password (chmod 600), получен через `POST /ocs/v2.php/core/getapppassword`
|
||||||
|
- **Hook в `~/.claude/settings.json`** — Stop-event триггер, `async: true`, запускает sync.sh если cwd в ~/knowledge-base
|
||||||
|
|
||||||
|
### Почему rclone а не nextcloudcmd
|
||||||
|
|
||||||
|
- nextcloudcmd (Qt) падает с `Host unreachable` при запуске из launchd-агента
|
||||||
|
- rclone (Go) работает в CLI, двусторонний `bisync` с state-файлами
|
||||||
|
- Проще retry-логика, log-файл, exit-коды
|
||||||
|
|
||||||
|
### Почему не nextcloudcmd + launchd-агент
|
||||||
|
|
||||||
|
Внутри launchd-процесса macOS 26:
|
||||||
|
- curl/nc/ping успешно коннектятся к 10.0.0.195:443
|
||||||
|
- Go и Qt runtime получают `EHOSTUNREACH` на тот же IP
|
||||||
|
- Не DNS, не firewall, не IPv6 — глубокая специфика network-context для background-агентов
|
||||||
|
- Решение: не запускать из launchd, а триггерить из user-session (Stop-hook = user-session)
|
||||||
|
|
||||||
|
### Для real-time sync (будущее, опционально)
|
||||||
|
|
||||||
|
GUI Nextcloud.app запускается в Aqua-session (не launchd), работает без этих проблем. Настройка через wizard, 6 кликов. На данный момент отложено.
|
||||||
|
|
||||||
|
## Последствия
|
||||||
|
|
||||||
|
### Что обновить
|
||||||
|
- [x] `credentials.md` — добавить Nextcloud creds, убрать ссылки на LXC 129/10.0.0.206
|
||||||
|
- [x] `projects/dttb/proxmox-inventory.md` — актуализировать список LXC (129, 133 больше нет)
|
||||||
|
- [x] `CLAUDE.md` (vault) — убрать упоминание LXC 129 Clawdbot если есть
|
||||||
|
- [x] `claude-memory/MEMORY.md` — обновить reference_infra, убрать LXC 133
|
||||||
|
|
||||||
|
### Что надо помнить
|
||||||
|
- Изменения локально → Nextcloud автоматом **только** после завершения Claude-сессии в `~/knowledge-base`, или ручным запуском `~/.config/nextcloud-kb/sync.sh`
|
||||||
|
- Изменения с другого устройства → подтянутся следующим запуском sync.sh (не автоматом)
|
||||||
|
- Для real-time надо доделать GUI Nextcloud.app wizard
|
||||||
|
- `.git/` **не** в Nextcloud — git и nextcloud параллельные каналы, не вложенные
|
||||||
|
|
||||||
|
### Файлы экосистемы
|
||||||
|
|
||||||
|
**На Mac:**
|
||||||
|
```
|
||||||
|
~/.config/nextcloud-kb/
|
||||||
|
├── app-password chmod 600
|
||||||
|
├── rclone.conf chmod 600
|
||||||
|
├── rclone-filter.lst
|
||||||
|
├── sync.sh chmod 700
|
||||||
|
├── sync.log логи sync-обёртки
|
||||||
|
├── rclone.log подробные логи rclone
|
||||||
|
└── sync.lock.d/ mkdir-lock (временный)
|
||||||
|
```
|
||||||
|
|
||||||
|
**На code-server (LXC 132):**
|
||||||
|
```
|
||||||
|
/root/knowledge-base/ полный RW git-клон
|
||||||
|
/usr/local/bin/kb-autosync.sh cron-скрипт */5
|
||||||
|
/var/log/kb-autosync.log логи
|
||||||
|
/tmp/kb-autosync.lock flock
|
||||||
|
```
|
||||||
|
|
||||||
|
**На openclaw (LXC 137):**
|
||||||
|
```
|
||||||
|
/root/knowledge-base/ RO git-клон (push disabled)
|
||||||
|
/usr/local/bin/kb-pull.sh cron-скрипт */15
|
||||||
|
/var/log/kb-pull.log логи
|
||||||
|
```
|
||||||
|
|
||||||
|
### Сквозной тест 2026-04-17 (пройден)
|
||||||
|
- Mac создаёт файл → `git push` → code-server `kb-autosync.sh` fast-forward через 0-5 мин → openclaw `kb-pull.sh` ff-only через 0-15 мин ✓
|
||||||
|
- code-server создаёт файл → auto-commit + push → Mac `git pull` подтягивает ✓
|
||||||
|
- Mac удаляет файл → push → обе LXC удаляют у себя при следующем sync ✓
|
||||||
|
|
||||||
|
### Credentials Nextcloud (dttb.ru)
|
||||||
|
- URL: `https://dttb.ru`
|
||||||
|
- User: `admin` / пароль `1qaz!QAZ`
|
||||||
|
- App password (для sync): хранится в `~/.config/nextcloud-kb/app-password`
|
||||||
|
- WebDAV: `https://dttb.ru/remote.php/dav/files/admin/Knowledge Base/`
|
||||||
|
- Сервер: Nextcloud AIO 32.0.6 на VM 250 (10.0.0.230:11001)
|
||||||
|
|
||||||
|
### Откат
|
||||||
|
- Остановить sync: удалить hook из `~/.claude/settings.json` + `rm -rf ~/.config/nextcloud-kb/`
|
||||||
|
- Удалить app password на сервере: User settings → Security → Devices/sessions
|
||||||
|
- Локальный vault не страдает — git remote и работает независимо
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: decision
|
||||||
|
tags: [decision]
|
||||||
|
---
|
||||||
|
|
||||||
# 2026-04-17: Стабилизация Podkop на Переделках
|
# 2026-04-17: Стабилизация Podkop на Переделках
|
||||||
|
|
||||||
## Проблема
|
## Проблема
|
||||||
|
|||||||
124
decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md
Normal file
124
decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-20
|
||||||
|
type: decision
|
||||||
|
status: ОТКАЧЕНО
|
||||||
|
tags: [decision, niikn, mmfb, network, wireguard, rollback]
|
||||||
|
---
|
||||||
|
|
||||||
|
# 2026-04-20: Обход блокировки nspd.gov.ru в НИИКН через WG-туннель к LionART
|
||||||
|
|
||||||
|
> **⚠️ СТАТУС: РЕШЕНИЕ ОТКАЧЕНО 2026-04-20 вечером.** После поднятия туннеля сотрудники НИИКН стали жаловаться на медленный интернет. Туннель удалён полностью с обеих сторон (НИИКН и LionART), OpenWrt DNS-override убран. Проблема NSPD остаётся открытой — искать другое решение. Описание ниже сохранено для референса: схема рабочая, но требует дополнительной диагностики что именно замедлило общий трафик (возможно MTU/фрагментация, перегрузка LionART, или случайное совпадение). См. задачу в spawn для вечерней работы.
|
||||||
|
|
||||||
|
## Проблема
|
||||||
|
|
||||||
|
Сотрудники НИИКН не могут открыть `https://nspd.gov.ru/` (Национальная система пространственных данных Росреестра). Возвращается страница "Запрещено" с Rule `57615a88d1ec0120b56fdce6`, Client IP `85.235.181.190`.
|
||||||
|
|
||||||
|
## Диагностика — что НЕ помогло
|
||||||
|
|
||||||
|
1. **DNS override на OpenWrt** (исключение `nspd.gov.ru` из podkop через `dnsmasq.server=/nspd.gov.ru/77.88.8.8`) — DNS возвращает реальный IP, но клиент видит блок
|
||||||
|
2. **Hosts на клиенте** (`2.63.246.71 nspd.gov.ru`) — то же самое
|
||||||
|
3. **Static route на клиенте** (`route -p add 2.63.246.0/24 → 192.168.1.1`) — то же самое
|
||||||
|
4. **Полное отключение OpenWrt + podkop-fakeip route на MikroTik** — то же самое
|
||||||
|
5. **Отключение DoH в Yandex Browser** — то же самое
|
||||||
|
|
||||||
|
## Корень проблемы
|
||||||
|
|
||||||
|
Публичный IP MikroTik НИИКН = `85.235.181.190` (диапазон `Customers_P2P_B16_WAN_NET` от MTS PJSC, AS8359, country RU). НСПД блокирует именно этот корпоративный диапазон МТС на уровне WAF — это **блокировка по IP на стороне сервера НСПД**, никакие настройки внутри НИИКН не помогут.
|
||||||
|
|
||||||
|
Подтверждение: с другого МТС-IP (`176.62.183.186`, dttb.ru) и с публичного IP LionART (`195.26.30.163`) НСПД отвечает HTTP 200.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
Поднят WireGuard site-to-site туннель **MikroTik НИИКН ↔ MikroTik LionART**. Только трафик к подсети НСПД (`2.63.246.0/24`) маршрутизируется через туннель — остальной интернет НИИКН идёт по-прежнему через МТС.
|
||||||
|
|
||||||
|
```
|
||||||
|
[Клиент НИИКН 192.168.1.x]
|
||||||
|
→ [MikroTik НИИКН 192.168.1.1, masq на wg-lionart → 10.99.99.2]
|
||||||
|
→ [WG туннель 10.99.99.0/30]
|
||||||
|
→ [MikroTik LionART 10.253.1.1, masq на ether1 → 195.26.30.163]
|
||||||
|
→ [НСПД 2.63.246.0/24] ✅ HTTP 200
|
||||||
|
```
|
||||||
|
|
||||||
|
## Конфигурация
|
||||||
|
|
||||||
|
### MikroTik LionART (`10.253.1.1`, hydropark, RouterOS 7.16.2)
|
||||||
|
|
||||||
|
```
|
||||||
|
/interface/wireguard add name=wg-niikn listen-port=51820 mtu=1420 \
|
||||||
|
comment="tunnel to NIIKN MikroTik for NSPD bypass"
|
||||||
|
/ip address add address=10.99.99.1/30 interface=wg-niikn
|
||||||
|
|
||||||
|
/interface/wireguard/peers add interface=wg-niikn \
|
||||||
|
public-key="ozex5MoF4rxnYpFyO5w44oittLehavs1YiPEq/ec4xU=" \
|
||||||
|
allowed-address=10.99.99.2/32 comment="NIIKN MikroTik"
|
||||||
|
|
||||||
|
/ip firewall filter add chain=input action=accept protocol=udp dst-port=51820 \
|
||||||
|
in-interface-list=WAN comment="WG NIIKN" place-before=0
|
||||||
|
/ip firewall filter add chain=forward action=accept in-interface=wg-niikn \
|
||||||
|
out-interface-list=WAN comment="WG NIIKN to WAN" place-before=0
|
||||||
|
/ip firewall filter add chain=forward action=accept in-interface-list=WAN \
|
||||||
|
out-interface=wg-niikn connection-state=established,related \
|
||||||
|
comment="WAN to WG NIIKN reply" place-before=0
|
||||||
|
```
|
||||||
|
|
||||||
|
- Public key LionART: `YuI6lQ1f1bF37x5dwa/JQuW30x4McO2//cl/mEWg4mE=`
|
||||||
|
- WAN: ether1-gw-telekom, публичный IP `195.26.30.163/27`
|
||||||
|
|
||||||
|
### MikroTik НИИКН (`192.168.1.1`, RouterOS 7.20.6)
|
||||||
|
|
||||||
|
```
|
||||||
|
/interface/wireguard add name=wg-lionart listen-port=51821 mtu=1420 \
|
||||||
|
comment="tunnel to LionART for NSPD bypass"
|
||||||
|
/ip address add address=10.99.99.2/30 interface=wg-lionart
|
||||||
|
|
||||||
|
/interface/wireguard/peers add interface=wg-lionart \
|
||||||
|
public-key="YuI6lQ1f1bF37x5dwa/JQuW30x4McO2//cl/mEWg4mE=" \
|
||||||
|
endpoint-address=195.26.30.163 endpoint-port=51820 \
|
||||||
|
allowed-address=10.99.99.0/30,2.63.246.0/24 \
|
||||||
|
persistent-keepalive=25s comment="LionART exit for NSPD"
|
||||||
|
|
||||||
|
/ip route add dst-address=2.63.246.0/24 gateway=10.99.99.1 \
|
||||||
|
comment="NSPD via LionART"
|
||||||
|
|
||||||
|
/ip firewall nat add chain=srcnat action=masquerade out-interface=wg-lionart \
|
||||||
|
comment="masq NSPD via LionART WG"
|
||||||
|
```
|
||||||
|
|
||||||
|
- Public key НИИКН: `ozex5MoF4rxnYpFyO5w44oittLehavs1YiPEq/ec4xU=`
|
||||||
|
|
||||||
|
## Критичные моменты
|
||||||
|
|
||||||
|
1. **Masquerade на wg-lionart на стороне НИИКН обязателен.** Без него LionART получает пакеты с source `192.168.1.x`, но conntrack/firewall не пропускает обратные ответы → SYN уходит, SYN-ACK теряется → timeout.
|
||||||
|
2. **Forward правила на LionART обязательны** — дефолтный firewall пропускает только трафик из/в LAN `10.253.1.0/24`. Трафик из `wg-niikn` в WAN нужно явно разрешить.
|
||||||
|
3. **AllowedIPs `2.63.246.0/24` на peer НИИКН** автоматически создаёт маршрут — но я добавил явный static route для надёжности (с понятным комментом).
|
||||||
|
4. NSPD не отвечает на ICMP — для проверки используй `/tool fetch` или `curl`, а не ping.
|
||||||
|
|
||||||
|
## Откат полной конфигурации
|
||||||
|
|
||||||
|
```
|
||||||
|
# На LionART
|
||||||
|
/interface/wireguard remove wg-niikn
|
||||||
|
/ip firewall filter remove [find comment~"WG NIIKN"]
|
||||||
|
|
||||||
|
# На НИИКН
|
||||||
|
/interface/wireguard remove wg-lionart
|
||||||
|
/ip route remove [find comment="NSPD via LionART"]
|
||||||
|
/ip firewall nat remove [find comment="masq NSPD via LionART WG"]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Связанные изменения (временные, из той же сессии)
|
||||||
|
|
||||||
|
В процессе диагностики были сделаны изменения, **не связанные** с финальным решением — их можно откатить:
|
||||||
|
|
||||||
|
1. **MikroTik НИИКН: podkop-fakeip route disable** (`/ip route disable [find comment="podkop-fakeip"]`) — отключил маршрут `198.18.0.0/15 → 192.168.1.50`. Из-за этого WhatsApp/Telegram/Instagram через podkop сейчас не работают. Для возврата: `/ip route enable [find comment="podkop-fakeip"]`.
|
||||||
|
2. **MikroTik НИИКН: DHCP DNS изменён** на `77.88.8.8,8.8.8.8` (вместо `192.168.1.50`). Для возврата: `/ip dhcp-server network set [find] dns-server=192.168.1.50`.
|
||||||
|
3. **OpenWrt: dnsmasq override для nspd.gov.ru** — добавлен в `/etc/config/dhcp` (`server=/nspd.gov.ru/77.88.8.8`). Не мешает работе, можно оставить или удалить через UCI.
|
||||||
|
|
||||||
|
После решения с WG туннелем эти временные изменения **больше не нужны для NSPD** — можно вернуть podkop в исходное состояние.
|
||||||
|
|
||||||
|
## Долгосрочное решение
|
||||||
|
|
||||||
|
Связаться со службой поддержки Росреестра/НСПД и попросить разблокировать корпоративный IP `85.235.181.190` (МТС). Контакт: 8-800-100-34-34, https://nspd.gov.ru/feedback. Тогда WG-туннель можно будет удалить.
|
||||||
|
|
||||||
|
## Теги
|
||||||
|
`#niikn` `#mmfb` `#lionart` `#mikrotik` `#wireguard` `#nspd` `#bypass` `#fix`
|
||||||
@@ -1 +1,14 @@
|
|||||||
# Решения
|
# Решения
|
||||||
|
|
||||||
|
<!-- kb-auto-index -->
|
||||||
|
## Навигация
|
||||||
|
|
||||||
|
- [[decisions/2026-02-26-clawdbot-129-cliproxy-fix]]
|
||||||
|
- [[decisions/2026-03-03-mailserver-setup-scenario]]
|
||||||
|
- [[decisions/2026-03-04-matrix-niikn-setup]]
|
||||||
|
- [[decisions/2026-04-14-niikn-openwrt-awg-fix]]
|
||||||
|
- [[decisions/2026-04-14-openclaw-claude-code-pipeline]]
|
||||||
|
- [[decisions/2026-04-16-unifi-migration-peredelki]]
|
||||||
|
- [[decisions/2026-04-17-code-server-upgrade]]
|
||||||
|
- [[decisions/2026-04-17-nextcloud-sync-schema]]
|
||||||
|
- [[decisions/2026-04-17-peredelki-podkop-stability-fix]]
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-02-26
|
||||||
|
type: note
|
||||||
|
tags: [note, bot]
|
||||||
|
---
|
||||||
|
|
||||||
# Сессия Claude Code: починка clawdbot + видеоархив ЧОП
|
# Сессия Claude Code: починка clawdbot + видеоархив ЧОП
|
||||||
|
|
||||||
**Дата:** 2026-02-26
|
**Дата:** 2026-02-26
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-02-26
|
||||||
|
type: note
|
||||||
|
tags: [note]
|
||||||
|
---
|
||||||
|
|
||||||
# 📝 Полный лог сессии 26.02.2026
|
# 📝 Полный лог сессии 26.02.2026
|
||||||
|
|
||||||
**Дата:** 2026-02-26 (15:30 — 22:05 МСК)
|
**Дата:** 2026-02-26 (15:30 — 22:05 МСК)
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-02-26
|
||||||
|
type: note
|
||||||
|
tags: [note]
|
||||||
|
---
|
||||||
|
|
||||||
# Настройка единой базы знаний
|
# Настройка единой базы знаний
|
||||||
|
|
||||||
**Дата:** 2026-02-26
|
**Дата:** 2026-02-26
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
---
|
||||||
|
date: 2026-02-26
|
||||||
|
type: note
|
||||||
|
tags: [note]
|
||||||
|
---
|
||||||
|
|
||||||
# 📊 Итог сессии 26.02.2026
|
# 📊 Итог сессии 26.02.2026
|
||||||
|
|
||||||
## Проект "Единая база знаний" — запущен и работает
|
## Проект "Единая база знаний" — запущен и работает
|
||||||
|
|||||||
@@ -1 +1,10 @@
|
|||||||
# Заметки
|
# Заметки
|
||||||
|
|
||||||
|
<!-- kb-auto-index -->
|
||||||
|
## Навигация
|
||||||
|
|
||||||
|
- [[notes/2026-02-26-claude-code-session-clawdbot-fix]]
|
||||||
|
- [[notes/2026-02-26-full-session-log]]
|
||||||
|
- [[notes/2026-02-26-knowledge-base-setup]]
|
||||||
|
- [[notes/2026-02-26-session-summary]]
|
||||||
|
- [[notes/karpathy-method]]
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T20:23:09.680Z
|
||||||
|
messages: 26
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Тестирую session-saver на текущей сессии и обновляю Stop-hook.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 26 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T20:25:06.155Z
|
||||||
|
messages: 26
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Готово — оба компонента интеграции работают
|
||||||
|
|
||||||
|
### 1. Терминал внутри Obsidian ✓
|
||||||
|
|
||||||
|
Плагин `terminal` v3.23.0 установлен в `.obsidian/plugins/terminal/`, активирован в `community-plugins.json`, Obsidian перезапущен.
|
||||||
|
|
||||||
|
**Как пользоваться:**
|
||||||
|
- `Cmd+P` → **«Terminal: Open terminal in...»** → выбрать *External* (кит + shell) / *Integrated* (внутри панели) / *Developer console*
|
||||||
|
- Integrated — терминал-панель справа/снизу
|
||||||
|
- Запускаешь там `claude` — чат параллельно с заметками
|
||||||
|
- Можно открыть несколько:
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 26 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T20:27:16.829Z
|
||||||
|
messages: 27
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Лог-стрим openclaw запущен в фоне. Отправляй в Telegram `@maxim_dttb_bot` тестовое сообщение — **любое из этих**:
|
||||||
|
|
||||||
|
### Вариант A — явный триггер делегации
|
||||||
|
```
|
||||||
|
Максимка, через опус прочитай decisions/2026-04-17-nextcloud-sync-schema.md и расскажи одним абзацем что ключевого
|
||||||
|
```
|
||||||
|
|
||||||
|
### Вариант B — тихий ресёрч (без делегации)
|
||||||
|
```
|
||||||
|
Максимка, какие сейчас активные LXC на Proxmox по последнему inventory?
|
||||||
|
```
|
||||||
|
|
||||||
|
Вариант **A** проверяет **полную цепочку делегации**: openclaw → wrapper → SSH Proxmox → pct ex
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 27 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T20:29:24.787Z
|
||||||
|
messages: 28
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
**Полезная диагностика.** Ответ ты получил **хороший и точный** (бот прочитал decision-файл и правильно суммировал). **Но пришёл он не через opus-делегацию**, а через бесплатную модель:
|
||||||
|
|
||||||
|
## Что показали логи
|
||||||
|
|
||||||
|
```
|
||||||
|
20:27:35 [telegram:direct:1292155421] бот получил твоё сообщение
|
||||||
|
20:27:35 попробовал kr/claude-sonnet-4.5 → Unknown model
|
||||||
|
20:27:35 fallback → zai/kr/claude-sonnet-4.5 (Sonnet 4.5 через другой провайдер)
|
||||||
|
20:28:01 candidate_succeeded — ответ получен (через 26 сек)
|
||||||
|
```
|
||||||
|
|
||||||
|
Бот ответил **с
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 28 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-17
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T20:34:54.866Z
|
||||||
|
messages: 29
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Покопался глубоко. Честная диагностика:
|
||||||
|
|
||||||
|
## Что нашёл
|
||||||
|
|
||||||
|
1. **Openclaw — компилированный npm-пакет** (`/usr/lib/node_modules/openclaw/dist/*.js` — всё минифицировано). Исходников нет, патчить bot-handler не получится без reverse-engineering.
|
||||||
|
|
||||||
|
2. **CLIProxy-провайдер с Opus уже настроен** в `~/.openclaw/agents/main/agent/models.json`:
|
||||||
|
```
|
||||||
|
cliproxy/claude-opus-4-6 → http://10.0.0.179:8317/v1 (CLIProxy на code-server)
|
||||||
|
```
|
||||||
|
То есть openclaw **знает** как дёргать Opus, просто не использует п
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 29 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:19:38.539Z
|
||||||
|
messages: 30
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Коротко какие есть реальные способы самообучения/актуализации, и моя рекомендация.
|
||||||
|
|
||||||
|
## Уровни автоматизации от безопасного к радикальному
|
||||||
|
|
||||||
|
### 1. **Weekly audit-скрипт (drift detection)** — safest, зеро риска
|
||||||
|
Cron на code-server раз в неделю:
|
||||||
|
- снимает живое состояние (`pct list`, `qm list`, NPM API, DNS записи, `netstat` на хостах)
|
||||||
|
- сравнивает с `proxmox-inventory.md`, `npm-proxy-hosts.md`, `network-topology.md`
|
||||||
|
- пишет diff в `audit/2026-04-18-drift.md` (новые/удалённые LXC, изменившиеся IP,
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 30 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:27:10.615Z
|
||||||
|
messages: 31
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Всё собрано и работает
|
||||||
|
|
||||||
|
### Что построили
|
||||||
|
```
|
||||||
|
воскр 06:00 на code-server (LXC 132, крон)
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
kb-audit.py (чистые факты, без LLM)
|
||||||
|
• pct list + qm list → сравнение с proxmox-inventory.md
|
||||||
|
• парсит и таблицы, и секцию «🗑️ Удалённые»
|
||||||
|
→ audit/2026-04-DD-drift.md
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
kb-audit-propose.sh (Opus 4.7 через Max OAuth)
|
||||||
|
• drift-отчёт + текущий inventory → claude -p
|
||||||
|
• --permission-mode plan (только предлагает)
|
||||||
|
→ audit/2026-04-DD-proposed.md
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
kb-autosync.sh (каждые 5 ми
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 31 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:30:31.063Z
|
||||||
|
messages: 32
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Одной фразой
|
||||||
|
Твоя база знаний теперь живёт одновременно в пяти местах, синхронизируется сама, а раз в неделю она сама себя проверяет и предлагает что исправить.
|
||||||
|
|
||||||
|
## Где она живёт
|
||||||
|
|
||||||
|
1. **Mac** — папка `~/knowledge-base`. Главное место где ты пишешь.
|
||||||
|
2. **Nextcloud на dttb.ru** — копия для iPhone (смотришь заметки с телефона через Obsidian).
|
||||||
|
3. **Gitea (git.dttb.ru)** — «библиотека» с историей: видно кто что правил, можно откатиться.
|
||||||
|
4. **Code-server** — там же есть копия, можно редактировать че
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 32 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:36:21.388Z
|
||||||
|
messages: 33
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Честный результат поиска
|
||||||
|
|
||||||
|
В марте 2026 Karpathy на GitHub был активен **только** в двух репах:
|
||||||
|
|
||||||
|
| Репо | Тема |
|
||||||
|
|---|---|
|
||||||
|
| `karpathy/nanochat` | LLM training framework |
|
||||||
|
| `karpathy/autoresearch` | AI-агенты сами дообучают модели через эксперименты с `train.py` |
|
||||||
|
|
||||||
|
**Ни в одном — ничего про Obsidian, Claude Code, knowledge management или personal workflow.**
|
||||||
|
|
||||||
|
В issue-ах `nanochat` с 2026-03-01 (30 шт) — ноль совпадений по ключевым словам «obsidian / claude code / vault / note / knowledge / ag
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 33 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:38:56.200Z
|
||||||
|
messages: 34
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
**Нашёл — это `autoresearch`, именно то что ты имел в виду.**
|
||||||
|
|
||||||
|
## Как там работает «самообучение»
|
||||||
|
|
||||||
|
Вот вся суть одной страницы:
|
||||||
|
|
||||||
|
```
|
||||||
|
У агента есть доступ к:
|
||||||
|
- train.py ← только это редактирует
|
||||||
|
- prepare.py ← трогать нельзя (утилиты)
|
||||||
|
- program.md ← инструкция что улучшать
|
||||||
|
- val_bpb ← метрика (меньше = лучше)
|
||||||
|
|
||||||
|
Цикл на всю ночь (≥100 раз):
|
||||||
|
1. Меняет train.py (архитектура, batch size, optimizer...)
|
||||||
|
2. git commit на ветку autoresearch/DATE
|
||||||
|
3. uv run train.py > run.log (ровно 5 минут)
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 34 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:45:01.480Z
|
||||||
|
messages: 35
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Готово — уровень 3 (karpathy-style)
|
||||||
|
|
||||||
|
### Как это теперь работает
|
||||||
|
|
||||||
|
```
|
||||||
|
воскр 06:00 на code-server:
|
||||||
|
│
|
||||||
|
├─ kb-audit.py — фактовый diff → audit/DATE-drift.md
|
||||||
|
├─ kb-audit-apply.py — APPLIES safe структурные правки автоматом
|
||||||
|
│ • новый VMID в stopped → добавить строку
|
||||||
|
│ • missing VMID → в секцию 🗑️ с датой
|
||||||
|
│ • commit как `kb-audit-bot <kb-audit@dttb.ru>`
|
||||||
|
│ • git push (код и
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 35 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:47:56.459Z
|
||||||
|
messages: 36
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Реальные слабые места в порядке ценности:
|
||||||
|
|
||||||
|
## Что бы я улучшил
|
||||||
|
|
||||||
|
### 1. **Расширить audit на NPM + DNS + Credentials** (средне)
|
||||||
|
Сейчас audit проверяет только Proxmox VM/LXC. Но `npm-proxy-hosts.md` и `credentials.md` тоже дрейфуют:
|
||||||
|
- NPM API → сверить с таблицей доменов
|
||||||
|
- DNS A-записи Spaceweb → сверить с backend-IP в NPM
|
||||||
|
- Credentials → пингануть каждый URL, проверить не сменились ли пароли (по 401/403)
|
||||||
|
|
||||||
|
**Ценность:** тот же механизм что для inventory, но покрывает сеть и авторизации. Раз в неде
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 36 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:51:46.864Z
|
||||||
|
messages: 37
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Самый простой путь
|
||||||
|
|
||||||
|
1. В Obsidian нажми **`Cmd+P`**
|
||||||
|
2. Набери **`terminal`**
|
||||||
|
3. Выбери **«Terminal: Open terminal in vault root»** → **Integrated**
|
||||||
|
|
||||||
|
Откроется терминал-панель снизу/справа в том же окне Obsidian, уже в `~/knowledge-base`.
|
||||||
|
|
||||||
|
4. Набери **`claude`** и Enter
|
||||||
|
|
||||||
|
Всё. Claude Code запущен в том же окне, слева — заметки vault, справа/снизу — чат.
|
||||||
|
|
||||||
|
## Горячие клавиши
|
||||||
|
|
||||||
|
Можно назначить хоткей чтобы не лазить в Command Palette каждый раз:
|
||||||
|
- **Settings → Hotkeys** → найти `Terminal: Open inte
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 37 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:54:06.760Z
|
||||||
|
messages: 37
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Выбирай **Integrated** (уже подсвечен синим) и жми **Enter**.
|
||||||
|
|
||||||
|
Откроется терминал прямо в окне Obsidian — снизу или справа. Там набирай `claude` — и погнали.
|
||||||
|
|
||||||
|
Три варианта которые видишь:
|
||||||
|
- **External** — открывает внешний Terminal.app (отдельное окно)
|
||||||
|
- **Integrated** ← **этот, внутри Obsidian** ✓
|
||||||
|
- **Developer console** — только для отладки самого Obsidian, не нужен
|
||||||
|
|
||||||
|
Кстати на графе вижу что уже создана заметка от сегодняшней сессии — `2026-04-17-nextcl...` — session-saver работает.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 37 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T21:57:23.108Z
|
||||||
|
messages: 38
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Просто в том же окне Claude набери:
|
||||||
|
|
||||||
|
```
|
||||||
|
/login
|
||||||
|
```
|
||||||
|
|
||||||
|
Откроется браузер с авторизацией Claude — жми **Continue with Claude / Use Max subscription**. После авторизации вернись в терминал, Claude подхватит токен и работает.
|
||||||
|
|
||||||
|
## Почему так получилось
|
||||||
|
|
||||||
|
У тебя в `~/.claude/settings.json` прописано:
|
||||||
|
```json
|
||||||
|
"apiBaseUrl": "http://localhost:8317",
|
||||||
|
"apiKey": "sk-cliproxyapi-local",
|
||||||
|
```
|
||||||
|
|
||||||
|
Это настройки для **CLIProxy** который раньше крутился на Mac. CLIProxy на Маке сейчас не запущен → 401.
|
||||||
|
|
||||||
|
## Если `/logi
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 38 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T22:01:33.415Z
|
||||||
|
messages: 39
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Готово — обе строки убраны, JSON валиден, остальные настройки (permissions, hooks, marketplaces) целы.
|
||||||
|
|
||||||
|
## Теперь в открытом Claude в Obsidian
|
||||||
|
|
||||||
|
1. Выйди из сессии: **`/exit`** или **`Ctrl+C`**
|
||||||
|
2. Запусти заново: **`claude`**
|
||||||
|
3. Если снова 401 — набери **`/login`**, в браузере **Continue with Claude**, разреши доступ
|
||||||
|
|
||||||
|
После этого пойдёт через твою Max-подписку (Opus 4.7 xhigh как в баннере).
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 39 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T22:04:41.652Z
|
||||||
|
messages: 41
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Нашёл причину. В env shell'а Obsidian-terminal'а висит:
|
||||||
|
|
||||||
|
```
|
||||||
|
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST=1
|
||||||
|
CLAUDE_INTERNAL_FC_OVERRIDES={"tengu_ccr_bridge":true}
|
||||||
|
CLAUDE_CODE_ENTRYPOINT=claude-desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
Эти переменные значат: «**auth-токеном управляет host-приложение** (Claude Desktop)». `/login` внутри CLI успешно сохраняет токен, но сам CLI его **не использует** — ждёт auth от родителя. Родитель (Claude Desktop) этот токен не передаёт в терминал Obsidian.
|
||||||
|
|
||||||
|
Откуда это — **Obsidian был запущен из Cla
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 41 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T22:06:00.315Z
|
||||||
|
messages: 41
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Готово. План на завтра в `daily/2026-04-19.md`, уехал в Gitea → автоматом синкнется на code-server, openclaw, Nextcloud и iPhone.
|
||||||
|
|
||||||
|
## Что увидишь завтра утром
|
||||||
|
|
||||||
|
Откроешь Obsidian → Daily Notes → `2026-04-19.md` → чеклист:
|
||||||
|
|
||||||
|
1. **🔧 Блокер:** починить env-переменные (чтобы `claude` в Obsidian-terminal работал)
|
||||||
|
2. **⭐ Топ-3 улучшения:**
|
||||||
|
- Консолидация MEMORY.md (5 мин)
|
||||||
|
- Расширить audit на NPM/DNS/Credentials (час)
|
||||||
|
- KB health + level 4 agent loop (день) — главное, самое karpathy-style
|
||||||
|
3. **
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 41 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-17T22:08:20.025Z
|
||||||
|
messages: 42
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Обе проверки прошли:
|
||||||
|
- проблемные `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` и ко. — убраны
|
||||||
|
- **живой OAuth-токен** `CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-...` — остался
|
||||||
|
|
||||||
|
## Теперь в Obsidian
|
||||||
|
|
||||||
|
1. Закрой текущий терминал в Obsidian (крестик на панели)
|
||||||
|
2. Открой новый: **`Cmd+P`** → `Terminal: Open integrated terminal in vault root`
|
||||||
|
3. Набери `claude` — **должен стартануть без 401** (использует оставшийся OAuth-токен напрямую)
|
||||||
|
|
||||||
|
Если вдруг снова 401 — `/login` один раз, потом больше не понадобится (токе
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 42 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: a39df94b-f167-4eed-80b5-f3b9bb785f31
|
||||||
|
started: 2026-04-17T22:10:17.807Z
|
||||||
|
ended: 2026-04-17T22:12:06.709Z
|
||||||
|
messages: 2
|
||||||
|
tools: [Bash, Edit, Read, Write]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ai@MacBookPro knowledge-base % claude
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ai@MacBookPro knowledge-base % claude
|
||||||
|
Claude Code v2.1.112
|
||||||
|
▐▛███▜▌ Sonnet 4.6 with high effort · Claude API
|
||||||
|
▝▜█████▛▘ ~/knowledge-base
|
||||||
|
▘▘ ▝▝ Welcome to Opus 4.7 xhigh! · /effort to tune speed vs…
|
||||||
|
|
||||||
|
❯ gjh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7AEdYiUvasBEZWaRua"}
|
||||||
|
|
||||||
|
❯ /login
|
||||||
|
|
||||||
|
─────────────────────────────────────────────────────────────────────
|
||||||
|
Login
|
||||||
|
Claude Code v2.1.112
|
||||||
|
▐▛███▜▌ Sonnet 4.6 with high effort · Claude API
|
||||||
|
▝▜█████▛▘ ~/knowledge-base
|
||||||
|
▘▘ ▝▝ Welcome to Opus 4.7 xhigh! · /effort to tune speed vs…
|
||||||
|
|
||||||
|
❯ gjh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7AEdYiUvasBEZWaRua"}
|
||||||
|
|
||||||
|
❯ /login
|
||||||
|
⎿ Login successful
|
||||||
|
|
||||||
|
❯ gh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7C5zweQF5p3yLq6buC"}
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Добавил unset в `~/.zshenv` и записал паттерн в память. Открой новый терминал и запусти `claude` — 401 должен уйти.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`a39df94b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/a39df94b-f167-4eed-80b5-f3b9bb785f31.jsonl) — 2 сообщ., тулы: Bash, Edit, Read, Write*
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: a39df94b-f167-4eed-80b5-f3b9bb785f31
|
||||||
|
started: 2026-04-17T22:10:17.807Z
|
||||||
|
ended: 2026-04-17T22:12:52.504Z
|
||||||
|
messages: 3
|
||||||
|
tools: [Bash, Edit, Read, Write]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ai@MacBookPro knowledge-base % claude
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ai@MacBookPro knowledge-base % claude
|
||||||
|
Claude Code v2.1.112
|
||||||
|
▐▛███▜▌ Sonnet 4.6 with high effort · Claude API
|
||||||
|
▝▜█████▛▘ ~/knowledge-base
|
||||||
|
▘▘ ▝▝ Welcome to Opus 4.7 xhigh! · /effort to tune speed vs…
|
||||||
|
|
||||||
|
❯ gjh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7AEdYiUvasBEZWaRua"}
|
||||||
|
|
||||||
|
❯ /login
|
||||||
|
|
||||||
|
─────────────────────────────────────────────────────────────────────
|
||||||
|
Login
|
||||||
|
Claude Code v2.1.112
|
||||||
|
▐▛███▜▌ Sonnet 4.6 with high effort · Claude API
|
||||||
|
▝▜█████▛▘ ~/knowledge-base
|
||||||
|
▘▘ ▝▝ Welcome to Opus 4.7 xhigh! · /effort to tune speed vs…
|
||||||
|
|
||||||
|
❯ gjh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7AEdYiUvasBEZWaRua"}
|
||||||
|
|
||||||
|
❯ /login
|
||||||
|
⎿ Login successful
|
||||||
|
|
||||||
|
❯ gh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7C5zweQF5p3yLq6buC"}
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Добавил unset в `~/.zshenv` и записал паттерн в память. Открой новый терминал и запусти `claude` — 401 должен уйти.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`a39df94b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/a39df94b-f167-4eed-80b5-f3b9bb785f31.jsonl) — 3 сообщ., тулы: Bash, Edit, Read, Write*
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: a39df94b-f167-4eed-80b5-f3b9bb785f31
|
||||||
|
started: 2026-04-17T22:10:17.807Z
|
||||||
|
ended: 2026-04-17T22:15:22.968Z
|
||||||
|
messages: 4
|
||||||
|
tools: [Bash, Edit, Read, Write]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ai@MacBookPro knowledge-base % claude
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ai@MacBookPro knowledge-base % claude
|
||||||
|
Claude Code v2.1.112
|
||||||
|
▐▛███▜▌ Sonnet 4.6 with high effort · Claude API
|
||||||
|
▝▜█████▛▘ ~/knowledge-base
|
||||||
|
▘▘ ▝▝ Welcome to Opus 4.7 xhigh! · /effort to tune speed vs…
|
||||||
|
|
||||||
|
❯ gjh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7AEdYiUvasBEZWaRua"}
|
||||||
|
|
||||||
|
❯ /login
|
||||||
|
|
||||||
|
─────────────────────────────────────────────────────────────────────
|
||||||
|
Login
|
||||||
|
Claude Code v2.1.112
|
||||||
|
▐▛███▜▌ Sonnet 4.6 with high effort · Claude API
|
||||||
|
▝▜█████▛▘ ~/knowledge-base
|
||||||
|
▘▘ ▝▝ Welcome to Opus 4.7 xhigh! · /effort to tune speed vs…
|
||||||
|
|
||||||
|
❯ gjh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7AEdYiUvasBEZWaRua"}
|
||||||
|
|
||||||
|
❯ /login
|
||||||
|
⎿ Login successful
|
||||||
|
|
||||||
|
❯ gh
|
||||||
|
⎿ Please run /login · API Error: 401 {"type":"error","error":{"typ
|
||||||
|
e":"authentication_error","message":"Invalid authentication
|
||||||
|
credentials"},"request_id":"req_011CaA7C5zweQF5p3yLq6buC"}
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Теперь открой **новый** терминал (Cmd+N или новое окно Terminal.app) и запусти `claude` — пойдёт в Keychain, где лежит свежий токен с Max-подпиской.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`a39df94b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/a39df94b-f167-4eed-80b5-f3b9bb785f31.jsonl) — 4 сообщ., тулы: Bash, Edit, Read, Write*
|
||||||
23
notes/claude/2026-04-18-011639-ghg.md
Normal file
23
notes/claude/2026-04-18-011639-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-17T22:16:39.757Z
|
||||||
|
messages: 2
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Это похоже на случайный ввод. Что нужно сделать?
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 2 сообщ., тулы: Bash, Read*
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: e2efd10b-e06b-4d4a-a11e-0dff4d928bc3
|
||||||
|
started: 2026-04-16T22:27:27.766Z
|
||||||
|
ended: 2026-04-18T01:23:54.501Z
|
||||||
|
messages: 43
|
||||||
|
tools: [Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
https://github.com/CursorTouch/MacOS-MCP настрой
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Готово. Всё синхронизировалось.
|
||||||
|
|
||||||
|
## Итог по терминалу
|
||||||
|
|
||||||
|
```
|
||||||
|
~/.zshenv ← твой финальный вариант, снимает 7 env-переменных
|
||||||
|
↓
|
||||||
|
любой новый shell (login / non-login / interactive) → env чистый
|
||||||
|
↓
|
||||||
|
claude CLI идёт в Keychain → свежий токен после /login → работает
|
||||||
|
```
|
||||||
|
|
||||||
|
## На завтра остался один шаг
|
||||||
|
|
||||||
|
Утром в daily-note увидишь:
|
||||||
|
> [ ] Утром проверить: Obsidian → Cmd+P → Integrated terminal → `claude` → без 401
|
||||||
|
|
||||||
|
Это sanity check новой настройки. Потом можно сразу к **консолидации MEMORY.md** (5 мин)
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`e2efd10b`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/e2efd10b-e06b-4d4a-a11e-0dff4d928bc3.jsonl) — 43 сообщ., тулы: Bash, Edit, Glob, Grep, Read, Skill, TodoWrite, ToolSearch, WebFetch, Write, mcp__macos-mcp__App, mcp__macos-mcp__Shell, mcp__macos-mcp__Snapshot, mcp__macos-mcp__Wait*
|
||||||
23
notes/claude/2026-04-18-092547-ghg.md
Normal file
23
notes/claude/2026-04-18-092547-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:25:47.041Z
|
||||||
|
messages: 3
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Нашёл корневую причину. Проверю cx и fallback-цепочку.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 3 сообщ., тулы: Bash, Read*
|
||||||
34
notes/claude/2026-04-18-092855-ghg.md
Normal file
34
notes/claude/2026-04-18-092855-ghg.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:28:55.364Z
|
||||||
|
messages: 4
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Причина "Something went wrong" сейчас
|
||||||
|
|
||||||
|
IPv6-фикс (прошлая причина) уже применён — дело не в нём. Сегодняшняя цепочка падения:
|
||||||
|
|
||||||
|
| Попытка | Модель | Результат |
|
||||||
|
|---|---|---|
|
||||||
|
| 1 | `kr/claude-sonnet-4.5` (Kiro) | **`No credentials for provider: kiro`** — токен отвалился/истёк |
|
||||||
|
| 2 (fallback) | `zai/kr/claude-sonnet-4.5` (ZenAI) | **`402 You have reached the limit`** — биллинг исчерпан |
|
||||||
|
| — | ⛔ fallback-цепочка закончилась → бот возвращает "Something went wrong" |
|
||||||
|
|
||||||
|
Проверил остальные:
|
||||||
|
- ✅ `cx
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 4 сообщ., тулы: Bash, Read*
|
||||||
37
notes/claude/2026-04-18-093049-ghg.md
Normal file
37
notes/claude/2026-04-18-093049-ghg.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:30:49.431Z
|
||||||
|
messages: 5
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Учётки gpt-5.4 (codex) в OmniRoute
|
||||||
|
|
||||||
|
**7 активных** учёток, все здоровые (`test_status=active`):
|
||||||
|
|
||||||
|
| email | статус |
|
||||||
|
|---|---|
|
||||||
|
| batlaew@gmail.com | rate-limited до 06:27:16 UTC |
|
||||||
|
| kosmasmaksim70@gmail.com | rate-limited до 06:27:22 |
|
||||||
|
| uk.evrope@gmail.com | rate-limited до 06:27:29 |
|
||||||
|
| mhxpm9j72v@privaterelay | rate-limited до 06:27:36 |
|
||||||
|
| dbyq4s75y7@privaterelay | rate-limited до 06:27:43 |
|
||||||
|
| urijpro032@gmail.com | rate-limited до 06:27:55 |
|
||||||
|
| nadyapalmanova@gmail.com | **свободна** |
|
||||||
|
|
||||||
|
Сейч
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 5 сообщ., тулы: Bash, Read*
|
||||||
32
notes/claude/2026-04-18-093322-ghg.md
Normal file
32
notes/claude/2026-04-18-093322-ghg.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:33:22.541Z
|
||||||
|
messages: 6
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Kiro — не токен, а биллинг
|
||||||
|
|
||||||
|
Обе учётки:
|
||||||
|
|
||||||
|
| auth | test_status | error | token истекает | expires_at |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| oauth | **credits_exhausted** | `402 You have reached the limit` | 2026-04-18T07:17:45 | 2026-04-17T18:17:17 |
|
||||||
|
| oauth | **credits_exhausted** | `402 You have reached the limit` | 2026-04-18T07:17:58 | 2026-04-16T14:59:42 |
|
||||||
|
|
||||||
|
Токен ещё живой (до 07:17 UTC = 10:17 MSK). Проблема — **исчерпан дневной лимит AWS Kiro на обеих учётках**. Поэтому OmniRoute и отвечает "No cred
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 6 сообщ., тулы: Bash, Read*
|
||||||
23
notes/claude/2026-04-18-093524-ghg.md
Normal file
23
notes/claude/2026-04-18-093524-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:35:24.372Z
|
||||||
|
messages: 7
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Сбросил флаги — но Kiro API всё равно отвечает 402. Значит это **реальный лимит на стороне Kiro**, а не кеш OmniRoute. Смотрю детали ошибки.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 7 сообщ., тулы: Bash, Read*
|
||||||
23
notes/claude/2026-04-18-093922-ghg.md
Normal file
23
notes/claude/2026-04-18-093922-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:39:22.052Z
|
||||||
|
messages: 8
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Переключил. Но заметил — **я потерял fallback-цепочку**: было `{primary, fallbacks[3]}`, стало строка `"cx/gpt-5.4"`. Сейчас проверю и восстановлю с fallback, и отвечу про учётки.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 8 сообщ., тулы: Bash, Read*
|
||||||
37
notes/claude/2026-04-18-094233-ghg.md
Normal file
37
notes/claude/2026-04-18-094233-ghg.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:42:33.344Z
|
||||||
|
messages: 9
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Учётки cx/gpt-5.4 по факту СЕЙЧАС
|
||||||
|
|
||||||
|
Сейчас на LXC 132: **06:40:59 UTC**. Rate-limit у 6 учёток был до **06:27 UTC** (13 минут назад) — то есть **все 7 уже свободны**:
|
||||||
|
|
||||||
|
| email | cooldown истёк |
|
||||||
|
|---|---|
|
||||||
|
| batlaew@gmail.com | 06:27:16 ✅ |
|
||||||
|
| kosmasmaksim70@gmail.com | 06:27:22 ✅ |
|
||||||
|
| uk.evrope@gmail.com | 06:27:29 ✅ |
|
||||||
|
| mhxpm9j72v@privaterelay | 06:27:36 ✅ |
|
||||||
|
| dbyq4s75y7@privaterelay | 06:27:43 ✅ |
|
||||||
|
| urijpro032@gmail.com | 06:27:55 ✅ |
|
||||||
|
| nadyapalmanova@gmail.com | (не трогалась) ✅ |
|
||||||
|
|
||||||
|
Мой SQL не
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 9 сообщ., тулы: Bash, Read*
|
||||||
28
notes/claude/2026-04-18-094753-ghg.md
Normal file
28
notes/claude/2026-04-18-094753-ghg.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:47:53.251Z
|
||||||
|
messages: 10
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Две проблемы нашёл:
|
||||||
|
|
||||||
|
1. **Бот берёт модель из сессии пользователя**, а не из дефолта конфига. Сессия захардкодила `kr/claude-sonnet-4.5`. Мой `config set` не влияет на существующие сессии.
|
||||||
|
2. **`cx/gpt-5.4` без префикса не зарегистрирована** — openclaw знает только `zai/cx/gpt-5.4`. Fallback тоже провалился.
|
||||||
|
|
||||||
|
Правлю дефолт на `zai/cx/gpt-5.4` (с префиксом) и проверяю. Пользователю после этого нужно сказать `/new` в Максимке — иначе старая сессия продолжит ломаться.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 10 сообщ., тулы: Bash, Read*
|
||||||
37
notes/claude/2026-04-18-095240-ghg.md
Normal file
37
notes/claude/2026-04-18-095240-ghg.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:52:40.852Z
|
||||||
|
messages: 11
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Текущий статус
|
||||||
|
|
||||||
|
**Kiro** — всё ещё `402 You have reached the limit`. Реально исчерпано.
|
||||||
|
|
||||||
|
**Default теперь `zai/cx/gpt-5.4`** — openclaw знает модель (видно в `openclaw models list`):
|
||||||
|
```
|
||||||
|
zai/cx/gpt-5.4 default
|
||||||
|
zai/glm/glm-5.1 fallback#1
|
||||||
|
zai/gh/claude-sonnet-4.5 fallback#2
|
||||||
|
zai/kr/claude-sonnet-4.5 fallback#3
|
||||||
|
```
|
||||||
|
|
||||||
|
## Почему бот всё ещё в ошибке
|
||||||
|
|
||||||
|
Новая модель применится **только к новым сессиям**. Текущая Telegram-сессия захардкодила `kr/claude-sonnet-4.5` в `sessi
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 11 сообщ., тулы: Bash, Read*
|
||||||
23
notes/claude/2026-04-18-095457-ghg.md
Normal file
23
notes/claude/2026-04-18-095457-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:54:57.860Z
|
||||||
|
messages: 12
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Проверю по фактическим данным — не буду гадать.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 12 сообщ., тулы: Bash, Read*
|
||||||
34
notes/claude/2026-04-18-095710-ghg.md
Normal file
34
notes/claude/2026-04-18-095710-ghg.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T06:57:10.714Z
|
||||||
|
messages: 13
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
**Нет, не точно. Моё "5 часов" было догадкой.** По фактическим данным OmniRoute:
|
||||||
|
|
||||||
|
**Реальные интервалы от 429 до восстановления одной учётки:**
|
||||||
|
|
||||||
|
| когда | cooldown |
|
||||||
|
|---|---|
|
||||||
|
| 13.04 06:47 → 09:37-10:12 | **3.5 часа** ← похоже на настоящее окно |
|
||||||
|
| 12.04 14:32 → 14:36 | 4 мин (мягкий 429, OR подождал) |
|
||||||
|
| 12.04 07:24 → 07:30 | 6 мин |
|
||||||
|
| 11.04 разные | 0-5 мин |
|
||||||
|
|
||||||
|
Длинный паттерн один — **~3-3.5 часа**, не 5. Короткие (<10 мин) — это не сброс лимита, а OR успешно перезапустил после кратковременно
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 13 сообщ., тулы: Bash, Read*
|
||||||
29
notes/claude/2026-04-18-100106-ghg.md
Normal file
29
notes/claude/2026-04-18-100106-ghg.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T07:01:06.160Z
|
||||||
|
messages: 14
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Моё мнение — **нет, не стоит как постоянную primary**. Три причины:
|
||||||
|
|
||||||
|
**1. Экономика в разы хуже.**
|
||||||
|
Один Kiro-аккаунт (free tier) = ~60-120M токенов/месяц бесплатно. Одна codex-free учётка = ~30 успешных запросов/сутки = ~900/месяц на все, а по токенам сильно меньше (короче контексты, чат plan). Чтобы заменить 1 Kiro, нужно **5-7 codex-учёток**.
|
||||||
|
|
||||||
|
**2. Качество под задачи Максимки.**
|
||||||
|
Бот много работает с русским, инструментами, делегирует на Opus, держит канвас-сессии. Sonnet 4.5 стабильнее в too
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 14 сообщ., тулы: Bash, Read*
|
||||||
23
notes/claude/2026-04-18-100208-ghg.md
Normal file
23
notes/claude/2026-04-18-100208-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T07:02:08.838Z
|
||||||
|
messages: 15
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Да, перепутал — `ai.dttb.ru` это code-server (VS Code UI), не OmniRoute. OmniRoute крутится на **том же LXC 132, порт 20128** внутренний. Проверю есть ли у него внешний домен через NPM.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 15 сообщ., тулы: Bash, Read*
|
||||||
38
notes/claude/2026-04-18-100510-ghg.md
Normal file
38
notes/claude/2026-04-18-100510-ghg.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T07:05:10.174Z
|
||||||
|
messages: 16
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
OmniRoute НЕ проксирован через NPM — только code-server на `ai.dttb.ru`. Три способа открыть UI OmniRoute:
|
||||||
|
|
||||||
|
## Вариант 1 (быстро) — SSH-туннель с Mac
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sshpass -p '1qaz!QAZ' ssh -L 20128:10.0.0.179:20128 root@10.0.0.250 -N
|
||||||
|
```
|
||||||
|
Держи открытым → в браузере Mac: **http://localhost:20128**
|
||||||
|
|
||||||
|
## Вариант 2 (один раз настроить) — добавить в NPM
|
||||||
|
|
||||||
|
Зайти на https://npm.dttb.ru → **Add Proxy Host**:
|
||||||
|
- Domain: `or.dttb.ru` (или `omniroute.dttb.ru`)
|
||||||
|
- Scheme: `http`
|
||||||
|
- Forward IP: `10.0.0.179`
|
||||||
|
- Port: `
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 16 сообщ., тулы: Bash, Read*
|
||||||
31
notes/claude/2026-04-18-101313-ghg.md
Normal file
31
notes/claude/2026-04-18-101313-ghg.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T07:13:13.796Z
|
||||||
|
messages: 17
|
||||||
|
tools: [Bash, Read]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Классический OAuth-глюк: в браузере остались **cookies текущего Google-аккаунта**, и Google видит уже авторизованную сессию → пропускает шаг ввода логина и сразу выдаёт согласие с твоим основным акком.
|
||||||
|
|
||||||
|
## Как заставить Google показать выбор аккаунта
|
||||||
|
|
||||||
|
**Правильный способ — полностью чистое состояние Google.** Обычного инкогнито **недостаточно**, если ты когда-то там заходил в Google:
|
||||||
|
|
||||||
|
### Вариант А — отдельный профиль браузера (рекомендую)
|
||||||
|
|
||||||
|
Chrome/Edge → **правый верх → аватар → "Add" / "Добавит
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 17 сообщ., тулы: Bash, Read*
|
||||||
23
notes/claude/2026-04-18-104215-ghg.md
Normal file
23
notes/claude/2026-04-18-104215-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T07:42:15.060Z
|
||||||
|
messages: 18
|
||||||
|
tools: [Bash, Read, Write]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Обе модели работают. Теперь чищу openclaw — оставляю только Sonnet primary + GLM fallback.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 18 сообщ., тулы: Bash, Read, Write*
|
||||||
23
notes/claude/2026-04-18-104613-ghg.md
Normal file
23
notes/claude/2026-04-18-104613-ghg.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T07:46:13.015Z
|
||||||
|
messages: 19
|
||||||
|
tools: [Bash, Edit, Read, Write]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Теперь обновлю KB-справочник с новыми находками.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 19 сообщ., тулы: Bash, Edit, Read, Write*
|
||||||
31
notes/claude/2026-04-18-104625-ghg.md
Normal file
31
notes/claude/2026-04-18-104625-ghg.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
date: 2026-04-18
|
||||||
|
type: claude-session
|
||||||
|
session_id: d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6
|
||||||
|
started: 2026-04-17T22:15:50.961Z
|
||||||
|
ended: 2026-04-18T07:46:25.587Z
|
||||||
|
messages: 20
|
||||||
|
tools: [Bash, Edit, Read, Write]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ghg
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
ghg
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
## Записал
|
||||||
|
|
||||||
|
**В memory** (`feedback_openclaw_models.md`) — уточнил правило про префикс `zai/`: в конфиге **обязателен**, в sessions.json трогать нельзя. Удаление модели из каталога → пользователю нужен `/new`.
|
||||||
|
|
||||||
|
**В KB** (`projects/dttb/openclaw.md`) — добавил разделы:
|
||||||
|
- "Something went wrong" после чистки каталога моделей → `/new` в Максимке
|
||||||
|
- Kiro 402 = **месячный кредит AWS** (~60M tok/учётку/мес), reset 1 числа
|
||||||
|
- cx/gpt-5.4 free plan = rolling 3h окно, не годится как primary
|
||||||
|
- Как добавить Ki
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`d655a41a`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/d655a41a-5b15-4cdc-9fcb-d0aacf6ac4a6.jsonl) — 20 сообщ., тулы: Bash, Edit, Read, Write*
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user