72b6879f4b
- Refactored max_bot from nested packages to flat module structure - Q2: Extended BotUser model (patronymic, email, org, address, vcf_raw, contact_hash, phone_verified, email_verified, last_interaction, total_conversations, total_tickets) - Q2: VCF parser (FN, N, TEL, EMAIL, ORG, ADR), upsert on re-contact, NLP history context (_get_user_history_context -> YandexGPT) - Q1: Broadcast preview modal with 10s confirmation timer - Q3: CSS var(--white)->var(--bg-card), var(--text)->var(--text-primary) - Q4: bot_settings showNotification(), editable max_bot_id - Q5: Webhook secret passthrough via X-Max-Bot-Api-Secret - Masking sensitive keys, dialog_cleared handler, migrate via _add_column_if_not_exists() - Rate limit (asyncio.sleep 0.5 per 10), dead code removed, conv.intent context in contact.py - Portal pages: bot_consent, bot_kb (edit), bot_settings, bot_test, bot_tickets, portal_settings - Tests: 21/21 passing, added test_yandex_gpt.py, test_email_sender.py - Deploy: deploy_full.sh, schema.sql, seed_knowledge_base.sql
278 lines
21 KiB
JSON
278 lines
21 KiB
JSON
[
|
|
{
|
|
"Id": "32d184af619ee26601e973bd1d9c478e41080c21c37ca0ce4196de4286c724ad",
|
|
"Created": "2026-05-22T17:42:32.449068268Z",
|
|
"Path": "uvicorn",
|
|
"Args": [
|
|
"app.main:app",
|
|
"--host",
|
|
"0.0.0.0",
|
|
"--port",
|
|
"8000",
|
|
"--workers",
|
|
"4"
|
|
],
|
|
"State": {
|
|
"Status": "exited",
|
|
"Running": false,
|
|
"Paused": false,
|
|
"Restarting": false,
|
|
"OOMKilled": false,
|
|
"Dead": false,
|
|
"Pid": 0,
|
|
"ExitCode": 127,
|
|
"Error": "failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting \"/opt/projects/aegisone-py/CHANGELOG.md\" to rootfs at \"/app/CHANGELOG.md\": mount src=/opt/projects/aegisone-py/CHANGELOG.md, dst=/app/CHANGELOG.md, dstFd=/proc/self/fd/14, flags=MS_BIND|MS_REC: not a directory: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type",
|
|
"StartedAt": "2026-05-22T17:42:33.610616694Z",
|
|
"FinishedAt": "2026-05-23T00:11:21.899237525Z"
|
|
},
|
|
"Image": "sha256:d775a6517c018eb3dd936b4d353be4fe07497a2979664a21576adcb348356a36",
|
|
"ResolvConfPath": "/var/lib/docker/containers/32d184af619ee26601e973bd1d9c478e41080c21c37ca0ce4196de4286c724ad/resolv.conf",
|
|
"HostnamePath": "/var/lib/docker/containers/32d184af619ee26601e973bd1d9c478e41080c21c37ca0ce4196de4286c724ad/hostname",
|
|
"HostsPath": "/var/lib/docker/containers/32d184af619ee26601e973bd1d9c478e41080c21c37ca0ce4196de4286c724ad/hosts",
|
|
"LogPath": "/var/lib/docker/containers/32d184af619ee26601e973bd1d9c478e41080c21c37ca0ce4196de4286c724ad/32d184af619ee26601e973bd1d9c478e41080c21c37ca0ce4196de4286c724ad-json.log",
|
|
"Name": "/aegisone-app",
|
|
"RestartCount": 0,
|
|
"Driver": "overlayfs",
|
|
"Platform": "linux",
|
|
"MountLabel": "",
|
|
"ProcessLabel": "",
|
|
"AppArmorProfile": "",
|
|
"ExecIDs": null,
|
|
"HostConfig": {
|
|
"Binds": [
|
|
"/opt/projects/aegisone-py/docs:/app/docs:rw",
|
|
"/opt/projects/aegisone-py/permissions:/app/permissions:rw",
|
|
"/opt/projects/aegisone-py/uploads:/app/uploads:rw",
|
|
"/opt/projects/aegisone-py/CHANGELOG.md:/app/CHANGELOG.md:rw",
|
|
"/opt/projects/aegisone-py/version.txt:/app/version.txt:rw"
|
|
],
|
|
"ContainerIDFile": "",
|
|
"LogConfig": {
|
|
"Type": "json-file",
|
|
"Config": {}
|
|
},
|
|
"NetworkMode": "host",
|
|
"PortBindings": {},
|
|
"RestartPolicy": {
|
|
"Name": "unless-stopped",
|
|
"MaximumRetryCount": 0
|
|
},
|
|
"AutoRemove": false,
|
|
"VolumeDriver": "",
|
|
"VolumesFrom": null,
|
|
"ConsoleSize": [
|
|
0,
|
|
0
|
|
],
|
|
"CapAdd": null,
|
|
"CapDrop": null,
|
|
"CgroupnsMode": "host",
|
|
"Dns": null,
|
|
"DnsOptions": null,
|
|
"DnsSearch": null,
|
|
"ExtraHosts": [],
|
|
"GroupAdd": null,
|
|
"IpcMode": "private",
|
|
"Cgroup": "",
|
|
"Links": null,
|
|
"OomScoreAdj": 0,
|
|
"PidMode": "",
|
|
"Privileged": false,
|
|
"PublishAllPorts": false,
|
|
"ReadonlyRootfs": false,
|
|
"SecurityOpt": null,
|
|
"UTSMode": "",
|
|
"UsernsMode": "",
|
|
"ShmSize": 67108864,
|
|
"Runtime": "runc",
|
|
"Isolation": "",
|
|
"CpuShares": 0,
|
|
"Memory": 0,
|
|
"NanoCpus": 0,
|
|
"CgroupParent": "",
|
|
"BlkioWeight": 0,
|
|
"BlkioWeightDevice": null,
|
|
"BlkioDeviceReadBps": null,
|
|
"BlkioDeviceWriteBps": null,
|
|
"BlkioDeviceReadIOps": null,
|
|
"BlkioDeviceWriteIOps": null,
|
|
"CpuPeriod": 0,
|
|
"CpuQuota": 0,
|
|
"CpuRealtimePeriod": 0,
|
|
"CpuRealtimeRuntime": 0,
|
|
"CpusetCpus": "",
|
|
"CpusetMems": "",
|
|
"Devices": null,
|
|
"DeviceCgroupRules": null,
|
|
"DeviceRequests": null,
|
|
"MemoryReservation": 0,
|
|
"MemorySwap": 0,
|
|
"MemorySwappiness": null,
|
|
"OomKillDisable": false,
|
|
"PidsLimit": null,
|
|
"Ulimits": null,
|
|
"CpuCount": 0,
|
|
"CpuPercent": 0,
|
|
"IOMaximumIOps": 0,
|
|
"IOMaximumBandwidth": 0,
|
|
"MaskedPaths": [
|
|
"/proc/acpi",
|
|
"/proc/asound",
|
|
"/proc/interrupts",
|
|
"/proc/kcore",
|
|
"/proc/keys",
|
|
"/proc/latency_stats",
|
|
"/proc/sched_debug",
|
|
"/proc/scsi",
|
|
"/proc/timer_list",
|
|
"/proc/timer_stats",
|
|
"/sys/devices/virtual/powercap",
|
|
"/sys/firmware"
|
|
],
|
|
"ReadonlyPaths": [
|
|
"/proc/bus",
|
|
"/proc/fs",
|
|
"/proc/irq",
|
|
"/proc/sys",
|
|
"/proc/sysrq-trigger"
|
|
]
|
|
},
|
|
"Storage": {
|
|
"RootFS": {
|
|
"Snapshot": {
|
|
"Name": "overlayfs"
|
|
}
|
|
}
|
|
},
|
|
"Mounts": [
|
|
{
|
|
"Type": "bind",
|
|
"Source": "/opt/projects/aegisone-py/uploads",
|
|
"Destination": "/app/uploads",
|
|
"Mode": "rw",
|
|
"RW": true,
|
|
"Propagation": "rprivate"
|
|
},
|
|
{
|
|
"Type": "bind",
|
|
"Source": "/opt/projects/aegisone-py/CHANGELOG.md",
|
|
"Destination": "/app/CHANGELOG.md",
|
|
"Mode": "rw",
|
|
"RW": true,
|
|
"Propagation": "rprivate"
|
|
},
|
|
{
|
|
"Type": "bind",
|
|
"Source": "/opt/projects/aegisone-py/version.txt",
|
|
"Destination": "/app/version.txt",
|
|
"Mode": "rw",
|
|
"RW": true,
|
|
"Propagation": "rprivate"
|
|
},
|
|
{
|
|
"Type": "bind",
|
|
"Source": "/opt/projects/aegisone-py/docs",
|
|
"Destination": "/app/docs",
|
|
"Mode": "rw",
|
|
"RW": true,
|
|
"Propagation": "rprivate"
|
|
},
|
|
{
|
|
"Type": "bind",
|
|
"Source": "/opt/projects/aegisone-py/permissions",
|
|
"Destination": "/app/permissions",
|
|
"Mode": "rw",
|
|
"RW": true,
|
|
"Propagation": "rprivate"
|
|
}
|
|
],
|
|
"Config": {
|
|
"Hostname": "d25564159130.vps.myjino.ru",
|
|
"Domainname": "",
|
|
"User": "",
|
|
"AttachStdin": false,
|
|
"AttachStdout": true,
|
|
"AttachStderr": true,
|
|
"ExposedPorts": {
|
|
"8000/tcp": {}
|
|
},
|
|
"Tty": false,
|
|
"OpenStdin": false,
|
|
"StdinOnce": false,
|
|
"Env": [
|
|
"APP_ENV=production",
|
|
"LOG_LEVEL=info",
|
|
"PORTAINER_URL=http://81.177.141.34:9001",
|
|
"DATABASE_URL=postgresql+asyncpg://aegisone:aegisone_pass@localhost:5432/aegisone",
|
|
"SECRET_KEY=change-me-to-random-string",
|
|
"SESSION_TTL=3600",
|
|
"PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
|
"LANG=C.UTF-8",
|
|
"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305",
|
|
"PYTHON_VERSION=3.12.13",
|
|
"PYTHON_SHA256=c08bc65a81971c1dd5783182826503369466c7e67374d1646519adf05207b684"
|
|
],
|
|
"Cmd": [
|
|
"uvicorn",
|
|
"app.main:app",
|
|
"--host",
|
|
"0.0.0.0",
|
|
"--port",
|
|
"8000",
|
|
"--workers",
|
|
"4"
|
|
],
|
|
"Image": "aegisone-py-app",
|
|
"Volumes": null,
|
|
"WorkingDir": "/app",
|
|
"Entrypoint": null,
|
|
"Labels": {
|
|
"com.docker.compose.config-hash": "deaf74f2e9176ca56ad3c68e8daae57d58bc5a67edfc6ef19aff128ded1e4322",
|
|
"com.docker.compose.container-number": "1",
|
|
"com.docker.compose.depends_on": "postgres:service_healthy:false",
|
|
"com.docker.compose.image": "sha256:d775a6517c018eb3dd936b4d353be4fe07497a2979664a21576adcb348356a36",
|
|
"com.docker.compose.oneoff": "False",
|
|
"com.docker.compose.project": "aegisone-py",
|
|
"com.docker.compose.project.config_files": "/opt/projects/aegisone-py/docker-compose.yml",
|
|
"com.docker.compose.project.working_dir": "/opt/projects/aegisone-py",
|
|
"com.docker.compose.replace": "aegisone-app",
|
|
"com.docker.compose.service": "app",
|
|
"com.docker.compose.version": "5.1.3"
|
|
}
|
|
},
|
|
"NetworkSettings": {
|
|
"SandboxID": "",
|
|
"SandboxKey": "",
|
|
"Ports": {},
|
|
"Networks": {
|
|
"host": {
|
|
"IPAMConfig": null,
|
|
"Links": null,
|
|
"Aliases": null,
|
|
"DriverOpts": null,
|
|
"GwPriority": 0,
|
|
"NetworkID": "7fda9d8ea237ba7c138b3c73b599cff5d1cd812ada6d7dfe48d6d472da4f51dc",
|
|
"EndpointID": "",
|
|
"Gateway": "",
|
|
"IPAddress": "",
|
|
"MacAddress": "",
|
|
"IPPrefixLen": 0,
|
|
"IPv6Gateway": "",
|
|
"GlobalIPv6Address": "",
|
|
"GlobalIPv6PrefixLen": 0,
|
|
"DNSNames": null
|
|
}
|
|
}
|
|
},
|
|
"ImageManifestDescriptor": {
|
|
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
|
"digest": "sha256:5e6cdb40ea8e8ce3b408fc484ff4ec455aee55d077019193281969db7dc529ee",
|
|
"size": 2002,
|
|
"platform": {
|
|
"architecture": "amd64",
|
|
"os": "linux"
|
|
}
|
|
}
|
|
}
|
|
]
|