Compare commits

...

4 Commits

Author SHA1 Message Date
f3e3a802ab Update README.md 2025-12-31 16:29:32 +00:00
Joakim Svensson
9eff2d9c1a Docker file och compose 2025-12-31 16:07:09 +00:00
Joakim Svensson
d76790c22c Docker file och compose 2025-12-31 16:04:08 +00:00
Joakim Svensson
c3e078c9c6 Add Invite Agent action to editor menu and allow CSP connect-src 2025-12-31 00:08:30 +00:00
10 changed files with 129 additions and 2 deletions

2
.gitignore vendored
View File

@@ -16,6 +16,8 @@ backups/
*.log
*.sqlite
*~
# ignore config files
config.json
.sequelizerc

33
Dockerfile Normal file
View File

@@ -0,0 +1,33 @@
############################
# 1) Builder: bygg HedgeDoc
############################
FROM node:18-alpine AS builder
WORKDIR /build
# H??mta din branch som tarball (ingen git beh??vs)
ADD https://git.sa6anw.se/sa6anw/hedgedoc/archive/refs/heads/hedgeagent/1.10.5.tar.gz /tmp/hedgedoc.tar.gz
RUN tar -xzf /tmp/hedgedoc.tar.gz --strip-components=1 \
&& rm /tmp/hedgedoc.tar.gz
# Installera deps + bygg frontend/backend
RUN corepack enable \
&& yarn install --immutable \
&& yarn build
########################################
# 2) Runtime: officiell HedgeDoc-image
########################################
FROM quay.io/hedgedoc/hedgedoc:1.10.5
USER root
# Ers??tt upstream-koden
RUN rm -rf /hedgedoc
# Kopiera f??rdigbyggd app med r??tt UID/GID
COPY --from=builder --chown=10000:10000 /build /hedgedoc
USER 10000

View File

@@ -1,3 +1,21 @@
# HedgeDoc-HedgeAgent
This is a customized version that makes it possible to invite an AI agent to a note via the menu. "Invite Agent" sends the `note_id` to hedgeagent.
To start an instance for development, the following is required:
1. ```cp config.json.example config.json ```
2. Update ```"domain": "change this" ```
3. ```.yarn/releases/yarn-4.12.0.cjs install```
4. ```.yarn/releases/yarn-4.12.0.cjs run build```
5. ```.yarn/releases/yarn-4.12.0.cjs start```
To start for production:
1. `docker compose up -d`
Note: Use UID 10000 for data folders.
---
![HedgeDoc Logo](docs/content/images/hedgedoc_logo_black.svg)
# HedgeDoc

50
docker-compose.yaml Normal file
View File

@@ -0,0 +1,50 @@
services:
database:
image: postgres:13.4-alpine
environment:
- POSTGRES_USER=hedgedoc
- POSTGRES_PASSWORD=password
- POSTGRES_DB=hedgedoc
volumes:
- ./db:/var/lib/postgresql/data
restart: always
networks:
- internal
app:
build: .
image: hedgedoc-hedgeagent:1.10.5
container_name: hedgedoc
environment:
CMD_DB_URL: postgres://hedgedoc:password@database:5432/hedgedoc
CMD_PORT: "3000"
CMD_HOST: "0.0.0.0"
CMD_DOMAIN: hedgedoc.sa6anw.se
CMD_URL_ADDPORT: "false"
CMD_PROTOCOL_USESSL: "true"
CMD_EMAIL: "true"
CMD_ALLOW_EMAIL_REGISTER: "true"
volumes:
- ./uploads:/hedgedoc/public/uploads
restart: always
depends_on:
- database
# Since I use Caddy I don't need this
# ports:
# - "3000:3000"
## If you use Caddy like I do keep below
networks:
- internal
- proxy
labels:
caddy: hedgedoc.sa6anw.se
caddy.reverse_proxy: "{{upstreams 3000}}"
networks:
internal:
internal: true
proxy:
external: true
## If you don't, you can deleta all of this

View File

@@ -7,7 +7,7 @@ const CspStrategy = {}
const defaultDirectives = {
defaultSrc: ['\'none\''],
baseUri: ['\'self\''],
connectSrc: ['\'self\'', buildDomainOriginWithProtocol(config, 'ws'), 'https://vimeo.com/api/v2/video/'],
connectSrc: ['\'self\'', buildDomainOriginWithProtocol(config, 'ws'), 'https://vimeo.com/api/v2/video/', 'https://hedgeagent.sa6anw.se/add_note'],
fontSrc: ['\'self\''],
manifestSrc: ['\'self\''],
frameSrc: ['\'self\'', 'https://player.vimeo.com', 'https://www.youtube.com', 'https://gist.github.com'],

View File

@@ -40,6 +40,7 @@
"Extra": "Extra",
"Revision": "Revision",
"Slide Mode": "Slide Mode",
"Invite Agent": "Invite Agent",
"Export": "Export",
"Import": "Import",
"Clipboard": "Clipboard",

View File

@@ -40,6 +40,7 @@
"Extra": "Extra",
"Revision": "Revision",
"Slide Mode": "Slide Mode",
"Invite Agent": "Invite Agent",
"Export": "Exportera",
"Import": "Importera",
"Clipboard": "Urklipp",

View File

@@ -1206,6 +1206,23 @@ ui.toolbar.publish.attr('href', noteurl + '/publish')
// extra
// slide
ui.toolbar.extra.slide.attr('href', noteurl + '/slide')
// invite agent
ui.toolbar.extra.inviteAgent.click(function (e) {
e.preventDefault()
$.ajax({
url: 'https://hedgeagent.sa6anw.se/add_note',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ note_id: noteid }),
error: function (xhr, status, err) {
console.error('Invite agent failed:', status, err)
alert('Failed to invite agent.')
}
})
})
// download
// markdown
ui.toolbar.download.markdown.click(function (e) {

View File

@@ -12,7 +12,8 @@ export const getUIElements = () => ({
publish: $('.ui-publish'),
extra: {
revision: $('.ui-extra-revision'),
slide: $('.ui-extra-slide')
slide: $('.ui-extra-slide'),
inviteAgent: $('.ui-invite-agent')
},
download: {
markdown: $('.ui-download-markdown'),

View File

@@ -34,6 +34,8 @@
</li>
<li role="presentation"><a role="menuitem" class="ui-extra-slide" tabindex="-1" href="#" target="_blank" rel="noopener"><i class="fa fa-tv fa-fw"></i> <%= __('Slide Mode') %></a>
</li>
<li role="presentation"><a role="menuitem" class="ui-invite-agent" tabindex="-1" href="#"><i class="fa fa-robot fa-fw"></i> <%= __('Invite Agent') %></a>
</li>
<% if(enableGitHubGist || enableDropBoxSave || enableGitlabSnippets) { %>
<li class="divider"></li>
<li class="dropdown-header"><%= __('Export') %></li>
@@ -136,6 +138,8 @@
</li>
<li role="presentation"><a role="menuitem" class="ui-extra-slide" tabindex="-1" href="#" target="_blank" rel="noopener"><i class="fa fa-tv fa-fw"></i> <%= __('Slide Mode') %></a>
</li>
<li role="presentation"><a role="menuitem" class="ui-invite-agent" tabindex="-1" href="#"><i class="fa fa-robot fa-fw"></i> <%= __('Invite Agent') %></a>
</li>
<% if(enableGitHubGist || enableDropBoxSave || enableGitlabSnippets) { %>
<li class="divider"></li>
<li class="dropdown-header"><%= __('Export') %></li>