Sync accepted GitHop state and prompt records
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
# Local development only. Replace every non-empty value outside localhost.
|
||||
POSTGRES_PASSWORD=hopweb-local-postgres
|
||||
HOP_ADMIN_TOKEN=hopweb-local-admin-token-change-me
|
||||
HOP_GITEA_WEBHOOK_SECRET=hopweb-local-webhook-secret-change-me
|
||||
|
||||
# Create a Gitea access token after first login, then set it here to enable
|
||||
# POST /api/v1/repositories/link.
|
||||
GITEA_API_TOKEN=
|
||||
|
||||
# Optional deployment overrides. The defaults preserve localhost development.
|
||||
GITEA_DOMAIN=localhost
|
||||
GITEA_ROOT_URL=http://localhost:3000/
|
||||
GITEA_SSH_DOMAIN=localhost
|
||||
GITEA_HTTP_BIND=0.0.0.0
|
||||
GITEA_HTTP_PORT=3000
|
||||
GITEA_SSH_BIND=0.0.0.0
|
||||
GITEA_SSH_PORT=2222
|
||||
HOP_HTTP_BIND=0.0.0.0
|
||||
HOP_HTTP_PORT=8080
|
||||
GITEA_DISABLE_SSH=false
|
||||
GITEA_DISABLE_REGISTRATION=false
|
||||
GITEA_ACTIONS_ENABLED=true
|
||||
+8
-9
@@ -1,11 +1,10 @@
|
||||
.env
|
||||
.DS_Store
|
||||
bin/
|
||||
coverage.out
|
||||
|
||||
# Hop's local state and isolated workspaces.
|
||||
/.hop/
|
||||
|
||||
# Local build and verification artifacts.
|
||||
/hop
|
||||
/dist/
|
||||
/SHA256SUMS
|
||||
/coverage.out
|
||||
*.test
|
||||
# Keep Hop's local cache and disposable workspaces out of Git. The portable
|
||||
# causal record below is intentionally versioned with the repository.
|
||||
.hop/*
|
||||
!.hop/records/
|
||||
!.hop/records/**
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
version: 2
|
||||
|
||||
project_name: hop
|
||||
|
||||
builds:
|
||||
- id: hop
|
||||
main: ./cmd/hop
|
||||
binary: hop
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
goos:
|
||||
- darwin
|
||||
- linux
|
||||
- windows
|
||||
goarch:
|
||||
- amd64
|
||||
- arm64
|
||||
goamd64:
|
||||
- v1
|
||||
flags:
|
||||
- -trimpath
|
||||
ldflags:
|
||||
- >-
|
||||
-s -w
|
||||
-X githop.xyz/GnosysLabs/Hop/internal/hop.Version={{ .Version }}
|
||||
|
||||
archives:
|
||||
- id: release
|
||||
ids:
|
||||
- hop
|
||||
formats:
|
||||
- tar.gz
|
||||
format_overrides:
|
||||
- goos: windows
|
||||
formats:
|
||||
- zip
|
||||
# Stable names keep installer asset lookup deterministic across releases.
|
||||
name_template: "hop_{{ .Os }}_{{ .Arch }}"
|
||||
files:
|
||||
- README.md
|
||||
- LICENSE*
|
||||
|
||||
checksum:
|
||||
name_template: checksums.txt
|
||||
algorithm: sha256
|
||||
|
||||
gitea_urls:
|
||||
api: https://githop.xyz/api/v1
|
||||
download: https://githop.xyz
|
||||
skip_tls_verify: false
|
||||
|
||||
snapshot:
|
||||
version_template: "{{ incpatch .Version }}-next"
|
||||
|
||||
changelog:
|
||||
sort: asc
|
||||
filters:
|
||||
exclude:
|
||||
- "^docs?:"
|
||||
- "^test:"
|
||||
- "^chore:"
|
||||
- "^ci:"
|
||||
- "Merge pull request"
|
||||
- "Merge branch"
|
||||
|
||||
release:
|
||||
gitea:
|
||||
owner: GnosysLabs
|
||||
name: Hop
|
||||
draft: true
|
||||
prerelease: auto
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3MVGY35SG18XG76041R",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3MVGY35SG18XG76041R",
|
||||
"prompt": "so i built hop, and we need to create the github equivilant of it.. i think we should use gitea as the base and build on top of it edit it to be hop centric",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:37:19.344539Z",
|
||||
"metadata": {
|
||||
"source_tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
|
||||
"git_commit": "5da8983cb69a9b429c8b2cb55cc1fac1733cb27c",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3NXG7FC1CJAYHQQX2S0",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3NXG7FC1CJAYHQQX2S0",
|
||||
"prompt": "go",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:41:57.691413Z",
|
||||
"metadata": {
|
||||
"source_tree": "4557ede1585602b91bae66bc4ff3306731615485",
|
||||
"git_commit": "4132e8bfbb3eb2d4e7fd43b24db07704b24bb9cf",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3Q767ARPH4HTB19S0W0",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3Q767ARPH4HTB19S0W0",
|
||||
"prompt": "docker is running now",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:47:39.194115Z",
|
||||
"metadata": {
|
||||
"source_tree": "4b99d7d61a83d64681231f585c2a37698aec60e6",
|
||||
"git_commit": "712315a7db4772907c5b422f9dd4f7b2f9c6bf29",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3QP3YQ1PYEPPAWK2SPR",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3QP3YQ1PYEPPAWK2SPR",
|
||||
"prompt": "docker is running now",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:49:41.493371Z",
|
||||
"metadata": {
|
||||
"source_tree": "bea1ad387d4670928f37f2f7e091f50e37b2b834",
|
||||
"git_commit": "eb9935e8ed74717d2b5a38eb0d5cd89a63a1117b",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3QQ5XWQDNP8V6P8ECW0",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3QQ5XWQDNP8V6P8ECW0",
|
||||
"prompt": "docker is running now",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:49:50.191391Z",
|
||||
"metadata": {
|
||||
"source_tree": "bea1ad387d4670928f37f2f7e091f50e37b2b834",
|
||||
"git_commit": "b93e16c599478aa2d325f993dd00393b0add0339",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3QRYRYJDAH6QQ0SK9Y8",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3QRYRYJDAH6QQ0SK9Y8",
|
||||
"prompt": "docker is running now",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:50:04.743556Z",
|
||||
"metadata": {
|
||||
"source_tree": "bea1ad387d4670928f37f2f7e091f50e37b2b834",
|
||||
"git_commit": "386917fe941fee96e6637e4c618b659690a882a7",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3RQ3M132WW29NRQYX18",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3RQ3M132WW29NRQYX18",
|
||||
"prompt": "dac54077662ddfb20bc67f9f0ded447cdeb945db",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:54:11.744005Z",
|
||||
"metadata": {
|
||||
"source_tree": "16d56a08b58b611279a861f1d13a9b9d690dedd7",
|
||||
"git_commit": "fd3152c96480783ccbac75c856c36ab93a03597c",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN3S3T7FFSHFNFB1MX098",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN3S3T7FFSHFNFB1MX098",
|
||||
"prompt": "god damn it! i selected /Users/christopher/Dev/HopWeb as the fucking project folder, why arent the project files in there",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T15:55:55.8353Z",
|
||||
"metadata": {
|
||||
"source_tree": "16d56a08b58b611279a861f1d13a9b9d690dedd7",
|
||||
"git_commit": "aa0d024734502a44ab0d59d548398c4d6217c190",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN3ZWPQTSC848DMGNM700",
|
||||
"task_id": "T_06FN3ZWPQS1937BKCB06S9G",
|
||||
"attempt_id": "AT_06FN3ZWPQV0984HA5C79DY8",
|
||||
"state_id": "P_06FN3ZWPQTSC848DMGNM700",
|
||||
"prompt": "Hop currently treats the selected folder as a controller/canonical-state anchor:\nhop begin creates an isolated workspace under .hop/workspaces/.\nThe agent edits and tests there.\nhop propose freezes that workspace.\nhop accept advances Hop’s internal accepted Git tree.\nBut it does not check that accepted tree out into the visible project root.\nSo the work is stored and accepted, but the folder you selected still appears empty. Codex also hides .hop, making this especially confusing.\nFor desktop use, I think the correct behavior is:\nAgents continue working in isolated Hop workspaces.\nAcceptance updates Hop’s internal state.\nHop then safely materializes the accepted tree into /Users/christopher/Dev/HopWeb.\nIf that visible folder contains uncommitted user changes, Hop blocks synchronization instead of overwriting them.\nThat gives isolation during work while ensuring the selected project folder always displays the accepted result. The current behavior is effectively “bare controller mode,” and it’s wrong for the UX you expected.",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T16:25:32.606093Z",
|
||||
"metadata": {
|
||||
"source_tree": "1efea9a3d94dac0a5fbfc48dbe98cc4dc0a19ab8",
|
||||
"git_commit": "d9544b435bd59c746909cb5103217bd6c86aad01",
|
||||
"attempt_head": "P_06FN3ZWPQTSC848DMGNM700",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN40K49ZE1X6ZEYJTD9F0",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN40K49ZE1X6ZEYJTD9F0",
|
||||
"prompt": "ok thats been fixed and i updated the env",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T16:28:36.303031Z",
|
||||
"metadata": {
|
||||
"source_tree": "16d56a08b58b611279a861f1d13a9b9d690dedd7",
|
||||
"git_commit": "0f5f8a8646ae2ff35ff1ea13b895afbba44eb5c0",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN40ZQYB1F1ZJ39SFWZ58",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN40ZQYB1F1ZJ39SFWZ58",
|
||||
"prompt": "ok lets do that",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T16:30:19.634133Z",
|
||||
"metadata": {
|
||||
"source_tree": "16d56a08b58b611279a861f1d13a9b9d690dedd7",
|
||||
"git_commit": "56e52705b71c19187082b8dba21bb407e8e9224d",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN41KG759HEJ3BPSB44XR",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN41KG759HEJ3BPSB44XR",
|
||||
"prompt": "ok so now lets continue with making git tea a hop first experience",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T16:33:01.497768Z",
|
||||
"metadata": {
|
||||
"source_tree": "16d56a08b58b611279a861f1d13a9b9d690dedd7",
|
||||
"git_commit": "051664e3c8d6ead79dbed0863c360d08349f6828",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN421BEC2J12EV548STG0",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN421BEC2J12EV548STG0",
|
||||
"prompt": "defaults",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T16:34:54.963284Z",
|
||||
"metadata": {
|
||||
"source_tree": "16d56a08b58b611279a861f1d13a9b9d690dedd7",
|
||||
"git_commit": "3e316eb57eac4e247839e23a392a267bb3ec5bb9",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN43M97PW5GHY28WZST40",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN43M97PW5GHY28WZST40",
|
||||
"prompt": "dont change the design of the site just make the elements of the site hop naitive",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T16:41:52.18911Z",
|
||||
"metadata": {
|
||||
"source_tree": "ae4a0bd3f1bb46c4152e4c7b474abdb2e1f66c45",
|
||||
"git_commit": "343b33dece3a8a270653e9f10f12b337bdecb165",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN45A2Z6KN07SYC74EV5G",
|
||||
"task_id": "T_06FN3MVGY3MT82ESQ89BND0",
|
||||
"attempt_id": "AT_06FN3MVGY092BFA5MR9C7EG",
|
||||
"state_id": "P_06FN45A2Z6KN07SYC74EV5G",
|
||||
"prompt": "dont change the design of the site just make the elements of the site hop naitive",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a no-redesign semantic layer that makes native Gitea collaboration Hop-first",
|
||||
"created_at": "2026-07-11T16:49:12.953453Z",
|
||||
"metadata": {
|
||||
"source_tree": "427db962424e4e0609ece7cf16f6d77e610f6f7b",
|
||||
"git_commit": "b8ab8cbfdc938d253f7546d73e779d42f96f9ab7",
|
||||
"attempt_head": "R_06FN45WVVTHC245S2BK503G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4FT3418BB34XZG9NCXG",
|
||||
"task_id": "T_06FN4FT3436TX5AV35QM4RR",
|
||||
"attempt_id": "AT_06FN4FT3401X9BHCJVKT52G",
|
||||
"state_id": "P_06FN4FT3418BB34XZG9NCXG",
|
||||
"prompt": "can we update the logo to /Users/christopher/Downloads/hop.svg and edit the homepage to explain hop, its benefits, how to use it, etc",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:35:05.504166Z",
|
||||
"metadata": {
|
||||
"source_tree": "bffab3f9e64131fda1d3db2fde9a3ba912d96f11",
|
||||
"git_commit": "8115847b32d0e9beced1ebbe865701e85a76a085",
|
||||
"attempt_head": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4GRVJ7NM37Q3FMQRPHG",
|
||||
"task_id": "T_06FN4FT3436TX5AV35QM4RR",
|
||||
"attempt_id": "AT_06FN4FT3401X9BHCJVKT52G",
|
||||
"state_id": "P_06FN4GRVJ7NM37Q3FMQRPHG",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 10.38.50 AM.png: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_7zHBGq/Screenshot 2026-07-11 at 10.38.50 AM.png\n\n## My request for Codex:\nwhat the heck?",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:39:17.521598Z",
|
||||
"metadata": {
|
||||
"source_tree": "05d2edd0a09f3fb478475f2794f1011f1490274c",
|
||||
"git_commit": "cf8b896c7ed822ba3a9bcc45cbc1c6afd77a8ba8",
|
||||
"attempt_head": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4H5ADYH1HNCQXJRFJH8",
|
||||
"task_id": "T_06FN4FT3436TX5AV35QM4RR",
|
||||
"attempt_id": "AT_06FN4FT3401X9BHCJVKT52G",
|
||||
"state_id": "P_06FN4H5ADYH1HNCQXJRFJH8",
|
||||
"prompt": "what? i need the changes applied",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:40:59.631137Z",
|
||||
"metadata": {
|
||||
"source_tree": "bf8b75d67c8f64f3c5c3eb5d15cbce0e8654c0a8",
|
||||
"git_commit": "59cb90ad32eb8b00ccaf35d20180369b6d59895d",
|
||||
"attempt_head": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4H80RE14S63ZF27DTRR",
|
||||
"task_id": "T_06FN4FT3436TX5AV35QM4RR",
|
||||
"attempt_id": "AT_06FN4FT3401X9BHCJVKT52G",
|
||||
"state_id": "P_06FN4H80RE14S63ZF27DTRR",
|
||||
"prompt": "what? i need the changes applied",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:41:21.731053Z",
|
||||
"metadata": {
|
||||
"source_tree": "bf8b75d67c8f64f3c5c3eb5d15cbce0e8654c0a8",
|
||||
"git_commit": "dba20940370cdff6b8edeb8087c4c62f2047ad50",
|
||||
"attempt_head": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4H8V7483W8245MST6D0",
|
||||
"task_id": "T_06FN4FT3436TX5AV35QM4RR",
|
||||
"attempt_id": "AT_06FN4FT3401X9BHCJVKT52G",
|
||||
"state_id": "P_06FN4H8V7483W8245MST6D0",
|
||||
"prompt": "what? i need the changes applied",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:41:28.505522Z",
|
||||
"metadata": {
|
||||
"source_tree": "bf8b75d67c8f64f3c5c3eb5d15cbce0e8654c0a8",
|
||||
"git_commit": "49772ee78431921f63052fd4670564302af06aae",
|
||||
"attempt_head": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4HAHVB486172JSZV89R",
|
||||
"task_id": "T_06FN4HAHV8Z9WW3VHG7NFG8",
|
||||
"attempt_id": "AT_06FN4HAHVAG59R709PFP8HR",
|
||||
"state_id": "P_06FN4HAHVB486172JSZV89R",
|
||||
"prompt": "what? i need the changes applied",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Fix Hop homepage asset URLs so styling and logo load",
|
||||
"created_at": "2026-07-11T17:41:42.490926Z",
|
||||
"metadata": {
|
||||
"source_tree": "05d2edd0a09f3fb478475f2794f1011f1490274c",
|
||||
"git_commit": "ae2ffae36dc7ec5eb2a8af616bcb009fd97b8c76",
|
||||
"attempt_head": "R_06FN4HD484STXA4V1Q7H6RG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4HN5XTVBWJKMKXDKMN8",
|
||||
"task_id": "T_06FN4FT3436TX5AV35QM4RR",
|
||||
"attempt_id": "AT_06FN4FT3401X9BHCJVKT52G",
|
||||
"state_id": "P_06FN4HN5XTVBWJKMKXDKMN8",
|
||||
"prompt": "the icons not loading",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:43:09.550188Z",
|
||||
"metadata": {
|
||||
"source_tree": "bf8b75d67c8f64f3c5c3eb5d15cbce0e8654c0a8",
|
||||
"git_commit": "628d1c9a55f2a5d6212d9ff7160097792930988e",
|
||||
"attempt_head": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4HVTZ7YQXZZHVCPJ5VR",
|
||||
"task_id": "T_06FN4HVTZ6MN9DF38NV61MG",
|
||||
"attempt_id": "AT_06FN4HVTZ5V7WF3FW7HMB58",
|
||||
"state_id": "P_06FN4HVTZ7YQXZZHVCPJ5VR",
|
||||
"prompt": "the icons not loading",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Replace malformed Hop SVG with the supplied logo",
|
||||
"created_at": "2026-07-11T17:44:04.089318Z",
|
||||
"metadata": {
|
||||
"source_tree": "bf8b75d67c8f64f3c5c3eb5d15cbce0e8654c0a8",
|
||||
"git_commit": "568bfb36704215d371f1ab56ba991fcf1be7a9ba",
|
||||
"attempt_head": "R_06FN4HZW5C1RB4MR7QA9PS8",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4HZQV7FFEDYZ7S9AM0G",
|
||||
"task_id": "T_06FN4HZQV5ZQ7Y72T0QC8T0",
|
||||
"attempt_id": "AT_06FN4HZQV46SZFBW6NNTENG",
|
||||
"state_id": "P_06FN4HZQV7FFEDYZ7S9AM0G",
|
||||
"prompt": "can we change the accent color to 724BDB",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:44:36.057187Z",
|
||||
"metadata": {
|
||||
"source_tree": "bf8b75d67c8f64f3c5c3eb5d15cbce0e8654c0a8",
|
||||
"git_commit": "568bfb36704215d371f1ab56ba991fcf1be7a9ba",
|
||||
"attempt_head": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4J47M5KK9QMTXP7RBKG",
|
||||
"task_id": "T_06FN4J47M54EPYZN030G2FG",
|
||||
"attempt_id": "AT_06FN4J47M6C6PNVYCWET400",
|
||||
"state_id": "P_06FN4J47M5KK9QMTXP7RBKG",
|
||||
"prompt": "the icons not loading",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Cache-bust the repaired Hop logo asset",
|
||||
"created_at": "2026-07-11T17:45:12.865848Z",
|
||||
"metadata": {
|
||||
"source_tree": "71b1d0c2a77b317fb3a25f8e055be0605806a2cd",
|
||||
"git_commit": "273055d26d05d867085b094d3ce6c70de6185076",
|
||||
"attempt_head": "R_06FN4J6JBXB35ZQMRKNB16G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4JACX76D2EQ1G769DW0",
|
||||
"task_id": "T_06FN4JACX74MAJEYJ24HE7G",
|
||||
"attempt_id": "AT_06FN4JACX50N1VPWMKJ0H1G",
|
||||
"state_id": "P_06FN4JACX76D2EQ1G769DW0",
|
||||
"prompt": "the icons not loading",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Cache-bust both original and previously branded navbar logo URLs",
|
||||
"created_at": "2026-07-11T17:46:03.369372Z",
|
||||
"metadata": {
|
||||
"source_tree": "27508f49be90c060929b061be7797abe5755aa5b",
|
||||
"git_commit": "9cccea670b24c7886e8d0805f8946aeb3a59b899",
|
||||
"attempt_head": "R_06FN4JDSFH853V1M9H3SVER",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4JDW51XTGGQN5HJBNA0",
|
||||
"task_id": "T_06FN4JDW51KJ8GC0YKC8ZW0",
|
||||
"attempt_id": "AT_06FN4JDW5079JSM69JHWJF0",
|
||||
"state_id": "P_06FN4JDW51XTGGQN5HJBNA0",
|
||||
"prompt": "the homepage looks terrible, and doesnt do a good job explaining hop at all. can you fix it. heres hop source for reference [$hop](/Users/christopher/.codex/skills/hop/SKILL.md)",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Simplify the homepage around agent-first automation, automatic conflict reconciliation, and the benefits over standard Git",
|
||||
"created_at": "2026-07-11T17:46:31.848853Z",
|
||||
"metadata": {
|
||||
"source_tree": "27508f49be90c060929b061be7797abe5755aa5b",
|
||||
"git_commit": "9cccea670b24c7886e8d0805f8946aeb3a59b899",
|
||||
"attempt_head": "R_06FN52GWVYQ4NW8698BVG98",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4JNTZQ8PKFV9Q3B8NR0",
|
||||
"task_id": "T_06FN4HZQV5ZQ7Y72T0QC8T0",
|
||||
"attempt_id": "AT_06FN4HZQV46SZFBW6NNTENG",
|
||||
"state_id": "P_06FN4JNTZQ8PKFV9Q3B8NR0",
|
||||
"prompt": "uh, why is it still blue",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:47:37.085378Z",
|
||||
"metadata": {
|
||||
"source_tree": "6c3b62b73a7926226bd7b6a9b55b920080fac874",
|
||||
"git_commit": "6b5cb804ae484b81a5a35690d72dbe2c534ab2f9",
|
||||
"attempt_head": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"task_id": "T_06FN4FT3436TX5AV35QM4RR",
|
||||
"attempt_id": "AT_06FN4FT3401X9BHCJVKT52G",
|
||||
"state_id": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 10.47.46 AM.png: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_7Ff7hw/Screenshot 2026-07-11 at 10.47.46 AM.png\n\n## My request for Codex:\nits still broken",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:48:05.297452Z",
|
||||
"metadata": {
|
||||
"source_tree": "bf8b75d67c8f64f3c5c3eb5d15cbce0e8654c0a8",
|
||||
"git_commit": "548a8561be18475e536de19346c722307ec75b4e",
|
||||
"attempt_head": "P_06FN4JS965QA3FPGA9FFMS0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4JT5DVPRJ0YDZWBFEWR",
|
||||
"task_id": "T_06FN4JT5DV3CQ6JQZWS4ES8",
|
||||
"attempt_id": "AT_06FN4JT5DRABHQ897TFH6V8",
|
||||
"state_id": "P_06FN4JT5DVPRJ0YDZWBFEWR",
|
||||
"prompt": "its still broken",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Advance navbar branding script version to invalidate the cached broken rewrite",
|
||||
"created_at": "2026-07-11T17:48:12.526268Z",
|
||||
"metadata": {
|
||||
"source_tree": "42d9769db5e21d0e36bbe0f84eaa0d8256699cf0",
|
||||
"git_commit": "2f535ffb9d35450b8cbf05ca3d82440d4e75e135",
|
||||
"attempt_head": "R_06FN4JVZYT5E4B044PXD4N0",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4KBMM88PMRCANX9DTD8",
|
||||
"task_id": "T_06FN4HZQV5ZQ7Y72T0QC8T0",
|
||||
"attempt_id": "AT_06FN4HZQV46SZFBW6NNTENG",
|
||||
"state_id": "P_06FN4KBMM88PMRCANX9DTD8",
|
||||
"prompt": "resolve the conflict",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:50:35.682991Z",
|
||||
"metadata": {
|
||||
"source_tree": "49e5b64089b49b5065a057badce439bb3bb9a70d",
|
||||
"git_commit": "acc69e02056fa541bdfdb999fac12f41d0fb63a7",
|
||||
"attempt_head": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4KHJ83SS9EH4XS2EZGG",
|
||||
"task_id": "T_06FN4HZQV5ZQ7Y72T0QC8T0",
|
||||
"attempt_id": "AT_06FN4HZQV46SZFBW6NNTENG",
|
||||
"state_id": "P_06FN4KHJ83SS9EH4XS2EZGG",
|
||||
"prompt": "resolve the conflict",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:51:24.22456Z",
|
||||
"metadata": {
|
||||
"source_tree": "49e5b64089b49b5065a057badce439bb3bb9a70d",
|
||||
"git_commit": "d4df9519b998ddf9fe5dbad79bf6b7a605815258",
|
||||
"attempt_head": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4KM3BCT8BYG6Y6AJRDG",
|
||||
"task_id": "T_06FN4KM3BEQH2Z9WQD5TF9R",
|
||||
"attempt_id": "AT_06FN4KM3BFS2RKQP05PSYRR",
|
||||
"state_id": "P_06FN4KM3BCT8BYG6Y6AJRDG",
|
||||
"prompt": "resolve the conflict",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Resolve branding overlap and cache-bust the purple accent stylesheet",
|
||||
"created_at": "2026-07-11T17:51:44.987174Z",
|
||||
"metadata": {
|
||||
"source_tree": "9142aed550f660c67680286de3b8f08d8be69712",
|
||||
"git_commit": "7df158feab931f473ed3f70fcd28374f4e06838d",
|
||||
"attempt_head": "R_06FN4KQ72H94Y1DJ0ENQ7HR",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4KYVKPW74YZYBNMP1F0",
|
||||
"task_id": "T_06FN4HZQV5ZQ7Y72T0QC8T0",
|
||||
"attempt_id": "AT_06FN4HZQV46SZFBW6NNTENG",
|
||||
"state_id": "P_06FN4KYVKPW74YZYBNMP1F0",
|
||||
"prompt": "god DAMN IT. its still blue!\n\nAttached screenshot: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_CxvyZG/Screenshot 2026-07-11 at 10.52.48 AM.png",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T17:53:13.117963Z",
|
||||
"metadata": {
|
||||
"source_tree": "49e5b64089b49b5065a057badce439bb3bb9a70d",
|
||||
"git_commit": "89d4d7dab5e5b3616e287dd50ac2a9e4383217c9",
|
||||
"attempt_head": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4M4F61M8KA6AGRSBP98",
|
||||
"task_id": "T_06FN4M4F62VJAR156YD09ZG",
|
||||
"attempt_id": "AT_06FN4M4F616AXVCXWF94A88",
|
||||
"state_id": "P_06FN4M4F61M8KA6AGRSBP98",
|
||||
"prompt": "god DAMN IT. its still blue!\n\nAttached screenshot: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_CxvyZG/Screenshot 2026-07-11 at 10.52.48 AM.png",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Override the full Gitea accent palette with #724BDB and force a fresh stylesheet URL",
|
||||
"created_at": "2026-07-11T17:53:59.088761Z",
|
||||
"metadata": {
|
||||
"source_tree": "1c8195cb9b797ccffab0e77d84e6c8272c9e49fd",
|
||||
"git_commit": "d4ea9e6b7c22a22e6ba993473f8d22176dece1cf",
|
||||
"attempt_head": "R_06FN4MCSEYBE34PDX0PT9H0",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4PG3HH0KSZST6PWFNB8",
|
||||
"task_id": "T_06FN4HZQV5ZQ7Y72T0QC8T0",
|
||||
"attempt_id": "AT_06FN4HZQV46SZFBW6NNTENG",
|
||||
"state_id": "P_06FN4PG3HH0KSZST6PWFNB8",
|
||||
"prompt": "we need the favicon updated to the logo as well",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T18:04:18.700151Z",
|
||||
"metadata": {
|
||||
"source_tree": "49e5b64089b49b5065a057badce439bb3bb9a70d",
|
||||
"git_commit": "dad7a06c61a0986a515624a7a24fb947ed6131f6",
|
||||
"attempt_head": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4PH3GM2HDQP9HD3410G",
|
||||
"task_id": "T_06FN4PH3GQ46DE1Z8CTRSN8",
|
||||
"attempt_id": "AT_06FN4PH3GMK620DSY4TX3DR",
|
||||
"state_id": "P_06FN4PH3GM2HDQP9HD3410G",
|
||||
"prompt": "we need the favicon updated to the logo as well",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Use the Hop logo for SVG and PNG favicons",
|
||||
"created_at": "2026-07-11T18:04:26.885567Z",
|
||||
"metadata": {
|
||||
"source_tree": "b761ce85df5d0d218f2f58fcaeb4bb08e948d0f0",
|
||||
"git_commit": "6ec49d8c48e3f531eaab835f12d60e39eeda7792",
|
||||
"attempt_head": "R_06FN4PTKFZJRFCFKX1AS9FR",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"task_id": "T_06FN4HZQV5ZQ7Y72T0QC8T0",
|
||||
"attempt_id": "AT_06FN4HZQV46SZFBW6NNTENG",
|
||||
"state_id": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"prompt": "there are still places where the old logo is used we need to swap out for the new logo\n\nAttached screenshots:\n/Users/christopher/Desktop/Screenshot 2026-07-11 at 11.18.00 AM.png\n/Users/christopher/Desktop/Screenshot 2026-07-11 at 11.17.54 AM.png",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T18:18:35.891572Z",
|
||||
"metadata": {
|
||||
"source_tree": "49e5b64089b49b5065a057badce439bb3bb9a70d",
|
||||
"git_commit": "42fda7ce00e41e8b0dbb29238db0c9bbf48d1b7e",
|
||||
"attempt_head": "P_06FN4SRQYDVNG3XG7A9GK68",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4ST5GZSWMZ4KTBBPSW8",
|
||||
"task_id": "T_06FN4ST5GWBMGMCKM41S470",
|
||||
"attempt_id": "AT_06FN4ST5GYS235FJA8XDP30",
|
||||
"state_id": "P_06FN4ST5GZSWMZ4KTBBPSW8",
|
||||
"prompt": "there are still places where the old logo is used we need to swap out for the new logo\n\nAttached screenshots:\n/Users/christopher/Desktop/Screenshot 2026-07-11 at 11.18.00 AM.png\n/Users/christopher/Desktop/Screenshot 2026-07-11 at 11.17.54 AM.png",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Replace remaining Gitea logo and default-avatar assets with the Hop logo",
|
||||
"created_at": "2026-07-11T18:18:47.559359Z",
|
||||
"metadata": {
|
||||
"source_tree": "155cdcd6e244ba1a5af73e206e82b3a8c9a3fa24",
|
||||
"git_commit": "dc4f2a10ee2c1f2d3a8a5a9e5e3d8a888f56eb8a",
|
||||
"attempt_head": "R_06FN4T78S8RKXYERD0H7FC0",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4TGQVNQTT8ZDJR0GRWG",
|
||||
"task_id": "T_06FN4TGQVMJ2BGTNCYP6MD8",
|
||||
"attempt_id": "AT_06FN4TGQVPKSJNS0TMKFKS0",
|
||||
"state_id": "P_06FN4TGQVNQTT8ZDJR0GRWG",
|
||||
"prompt": "there are still places where the old logo is used we need to swap out for the new logo\n\nAttached screenshots:\n/Users/christopher/Desktop/Screenshot 2026-07-11 at 11.18.00 AM.png\n/Users/christopher/Desktop/Screenshot 2026-07-11 at 11.17.54 AM.png",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Regenerate transparent brand PNGs from the current Hop logo and refresh favicon URLs",
|
||||
"created_at": "2026-07-11T18:21:52.477661Z",
|
||||
"metadata": {
|
||||
"source_tree": "89c391ed0d0dcdcc2faeaaed36490717a7aa7bb0",
|
||||
"git_commit": "fd6a666d36325277fb29ee3860e4d5638b58c6c2",
|
||||
"attempt_head": "R_06FN4TQ6YWAVDGW827JCKMG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4TSB4PZFC7F6X8K795R",
|
||||
"task_id": "T_06FN4JDW51KJ8GC0YKC8ZW0",
|
||||
"attempt_id": "AT_06FN4JDW5079JSM69JHWJF0",
|
||||
"state_id": "P_06FN4TSB4PZFC7F6X8K795R",
|
||||
"prompt": "im still seeing the old homepage",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Simplify the homepage around agent-first automation, automatic conflict reconciliation, and the benefits over standard Git",
|
||||
"created_at": "2026-07-11T18:23:02.949737Z",
|
||||
"metadata": {
|
||||
"source_tree": "1a8cddd62d80ed1556aa6469f7d4c65d084b3979",
|
||||
"git_commit": "71652d7aa75e5cd9fe23632ab3f49de406c77f88",
|
||||
"attempt_head": "R_06FN52GWVYQ4NW8698BVG98",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN4YPPQTSVQB215P1KWC0",
|
||||
"task_id": "T_06FN4JDW51KJ8GC0YKC8ZW0",
|
||||
"attempt_id": "AT_06FN4JDW5079JSM69JHWJF0",
|
||||
"state_id": "P_06FN4YPPQTSVQB215P1KWC0",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 11.27.38 AM.png: /Users/christopher/Desktop/Screenshot 2026-07-11 at 11.27.38 AM.png\n\n## My request for Codex:\ni dont think we should have changed the look of the top nav bar, because then it looks different when logged in. also, i dont like the look of this at all, see screenshot. also \"Review a frozen proposal, then land only the result you trust.\" this doesnt really make, lands happen automatically. i dont like the look of the whole thing. its too much. and i dont think it explains hop well. and what is this about humans? hop is an agentic first system humans wont be doing anything manually. it should explain more how hop handles everything automagically and how the user never has to think about manually commiting again. also how hop allows you to handle multiplle agents working on the same file and intelligently handles conflicts in the code, with no user intervention(in the new update please check). it should really focus on the benefits of using hop over standard git and why the user would want to bother.",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Simplify the homepage around agent-first automation, automatic conflict reconciliation, and the benefits over standard Git",
|
||||
"created_at": "2026-07-11T18:40:09.918953Z",
|
||||
"metadata": {
|
||||
"source_tree": "1a8cddd62d80ed1556aa6469f7d4c65d084b3979",
|
||||
"git_commit": "7e95b5ba3544fa65363d717a0b6f10c3ab5481c8",
|
||||
"attempt_head": "R_06FN52GWVYQ4NW8698BVG98",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN4YXDZNN01TTCY4K9EW0",
|
||||
"task_id": "T_06FN4YXDZQPC7VW9XM8HQWR",
|
||||
"attempt_id": "AT_06FN4YXDZMRGP161NNVQESG",
|
||||
"state_id": "P_06FN4YXDZNN01TTCY4K9EW0",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 11.40.07 AM.png: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_sWDYcU/Screenshot 2026-07-11 at 11.40.07 AM.png\n\n## My request for Codex:\nwhy is there that extra space after the proposals link? and can you explain to me what tasks proposals and evidence is\n\u003cimage name=[Image #1] path=\"/var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_sWDYcU/Screenshot 2026-07-11 at 11.40.07 AM.png\"\u003e",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T18:41:05.021252Z",
|
||||
"metadata": {
|
||||
"source_tree": "19c7f7a4b2aaad8aedc2b9c10c9496a17919fce5",
|
||||
"git_commit": "a888e194d91cfa1b5c4f2fbdefd484c6b806010f",
|
||||
"attempt_head": "P_06FN4YXDZNN01TTCY4K9EW0",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN50V05R0P9EQKBY59PW8",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN50V05R0P9EQKBY59PW8",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 11.49.08 AM.png: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_xX86We/Screenshot 2026-07-11 at 11.49.08 AM.png\n\n## My request for Codex:\nwhy is there that extra space after the proposals link? and can you explain to me what tasks proposals and evidence is\n\u003cimage name=[Image #1] path=\"/var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_xX86We/Screenshot 2026-07-11 at 11.49.08 AM.png\"\u003e",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T18:49:29.390971Z",
|
||||
"metadata": {
|
||||
"source_tree": "19c7f7a4b2aaad8aedc2b9c10c9496a17919fce5",
|
||||
"git_commit": "a888e194d91cfa1b5c4f2fbdefd484c6b806010f",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN51FJ7CSARP3EZNEPCW0",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN51FJ7CSARP3EZNEPCW0",
|
||||
"prompt": "can you fix the spacing please",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T18:52:17.851186Z",
|
||||
"metadata": {
|
||||
"source_tree": "19c7f7a4b2aaad8aedc2b9c10c9496a17919fce5",
|
||||
"git_commit": "f7a30b553f4d8f2971b444c952cddbfe0f03693c",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN52WCPRZG2K48CQ04S58",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN52WCPRZG2K48CQ04S58",
|
||||
"prompt": "can we get this installed on cyphers vps using the URL githop.xyz ",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T18:58:25.07894Z",
|
||||
"metadata": {
|
||||
"source_tree": "b43c800baacccec499598463d4cb587cbdb7ed5f",
|
||||
"git_commit": "5d4f20f220141af676151582566361f8d99fc1c7",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN531CDHT41Z5TNNV77FG",
|
||||
"task_id": "T_06FN4JDW51KJ8GC0YKC8ZW0",
|
||||
"attempt_id": "AT_06FN531CDJPYM3W0Z1B6ETR",
|
||||
"state_id": "P_06FN531CDHT41Z5TNNV77FG",
|
||||
"prompt": "Resolve proposal R_06FN52GWVYQ4NW8698BVG98 (Simplify the homepage around agent-first automation, automatic conflict reconciliation, and the benefits over standard Git) against accepted state A_06FN51R8W61WPV08RNCWWY0 (Keep renamed repository tabs sized to their visible Hop labels). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: deploy/gitea/templates/home.tmpl",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Reconcile the agent-first homepage with the latest accepted repository navigation updates",
|
||||
"created_at": "2026-07-11T18:59:05.964917Z",
|
||||
"metadata": {
|
||||
"source_tree": "7452e258a1b0a2caa9106055572043f0915d2f34",
|
||||
"git_commit": "1d36bda2a2c76295b81fc1aa0ab27f77c9364258",
|
||||
"attempt_head": "R_06FN53GJ19YH4AG7YMPVS60",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN54TPJMGP8KQWCF6PD6R",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN54TPJMGP8KQWCF6PD6R",
|
||||
"prompt": "what im seeing on the site is not what i see running locally. i think we may have made changes after you deployed that need to be synced",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:06:55.509165Z",
|
||||
"metadata": {
|
||||
"source_tree": "f753ba19ad818285180854e72d6859f3c1917b1c",
|
||||
"git_commit": "5a6c38d6a18fa3ccc9ad8e2822b5637314f6c22b",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN55QVVA8NZ6KY5K2KS30",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN55QVVA8NZ6KY5K2KS30",
|
||||
"prompt": "why is it using some random image instead of our actual logo?",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:10:54.426011Z",
|
||||
"metadata": {
|
||||
"source_tree": "f753ba19ad818285180854e72d6859f3c1917b1c",
|
||||
"git_commit": "329ba20c85cf1fb05797e0f630724d9f8a62644c",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN56JJKJD57TY52EXF3M0",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN56JJKJD57TY52EXF3M0",
|
||||
"prompt": "NO obvioulsy i want to use the logo i made!",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:14:33.244622Z",
|
||||
"metadata": {
|
||||
"source_tree": "f753ba19ad818285180854e72d6859f3c1917b1c",
|
||||
"git_commit": "1cbb72c08e2d172717c63bc2345346ddc9422757",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN577KX4B98J5R1166JP8",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN577KX6C4ZW41DDMW1KR",
|
||||
"state_id": "P_06FN577KX4B98J5R1166JP8",
|
||||
"prompt": "Resolve proposal R_06FN5765G6VRPVXJZ8P1RB0 (Restore the user-supplied Hop logo across all Gitea brand assets) against accepted state A_06FN53K5SA61CBF0QR1S1Q0 (Reconcile the agent-first homepage with the latest accepted repository navigation updates). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: deploy/gitea/templates/custom/footer.tmpl",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Restore the supplied Hop logo while preserving the accepted agent-first homepage",
|
||||
"created_at": "2026-07-11T19:17:25.609556Z",
|
||||
"metadata": {
|
||||
"source_tree": "912888c9f501ac6479bee5fc7c64ad7d2b9976ff",
|
||||
"git_commit": "dce152e3f11ba8a9708f452db1f364405ec7e0c4",
|
||||
"attempt_head": "R_06FN57D4YE5B29F00S71WP8",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN57SXR45KP1502K0J3R0",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN57SXR45KP1502K0J3R0",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 12.19.19 PM.png: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_KR1T4m/Screenshot 2026-07-11 at 12.19.19 PM.png\n\n## My request for Codex:\nwhy is this happening when i try to delete an organization\n\u003cimage name=[Image #1] path=\"/var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_KR1T4m/Screenshot 2026-07-11 at 12.19.19 PM.png\"\u003e",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:19:55.5853Z",
|
||||
"metadata": {
|
||||
"source_tree": "1a8620bd877bba75c8c7f0bdd8e9ad0289f95f8f",
|
||||
"git_commit": "6cfdb8af63cbba3faa757ad06e290527dfc0e569",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN584PM37P8Z4QESBNVP8",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN584PM37P8Z4QESBNVP8",
|
||||
"prompt": "did you update the favicon?",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:21:23.872649Z",
|
||||
"metadata": {
|
||||
"source_tree": "1a8620bd877bba75c8c7f0bdd8e9ad0289f95f8f",
|
||||
"git_commit": "6ff821155e81421b6d13a7441e1f0e43e3683390",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN58CY7YJ5BR23MWZVYD0",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN58CY7YJ5BR23MWZVYD0",
|
||||
"prompt": "why the fuck is it showing the weird ugly old logo flashing everytime i reload the page??",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:22:31.359198Z",
|
||||
"metadata": {
|
||||
"source_tree": "1a8620bd877bba75c8c7f0bdd8e9ad0289f95f8f",
|
||||
"git_commit": "104dd8b60f717f164b2f7814784b2286fbf45185",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN59J7EWT60ZPTMA3S5JG",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN59J7EWT60ZPTMA3S5JG",
|
||||
"prompt": "its still using the old image for the favicon!!!!!",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:27:36.823496Z",
|
||||
"metadata": {
|
||||
"source_tree": "607daaac9ef2bb746259e32afba6befe5949c7e5",
|
||||
"git_commit": "15ce0596249b6a903c4b18779c1ed86e8ba1835b",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN59TV2S6V2HTCN6W30ZG",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN59TV2SAYD23BXX9570G",
|
||||
"state_id": "P_06FN59TV2S6V2HTCN6W30ZG",
|
||||
"prompt": "Resolve proposal R_06FN59SCMVEV9N9GM38HREG (Serve only the supplied Hop favicon from the initial document head) against accepted state A_06FN58S7V5N6ETGRWG3NVM0 (Render the supplied Hop logo correctly from the first paint). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: deploy/gitea/install-hop-native.sh, deploy/gitea/templates/custom/footer.tmpl",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Reconcile first-paint logo rendering with a single cache-busted favicon source",
|
||||
"created_at": "2026-07-11T19:28:47.382862Z",
|
||||
"metadata": {
|
||||
"source_tree": "62a2fcf4a7893545b0f4150fb8ed02e16455aa26",
|
||||
"git_commit": "5b36c400f529eaf8e9b2f175644a1832e1fa3266",
|
||||
"attempt_head": "R_06FN5A0XSK27RAMA9V3MA88",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN5C47G73ESWMXV2WNPGG",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN5C47G73ESWMXV2WNPGG",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 12.37.35 PM.png: /Users/christopher/Desktop/Screenshot 2026-07-11 at 12.37.35 PM.png\n\n## My request for Codex:\ncan we put our mascot/logo nice and big in that empty space to the right there on the homepage\n\u003cimage name=[Image #1] path=\"/Users/christopher/Desktop/Screenshot 2026-07-11 at 12.37.35 PM.png\"\u003e",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:38:48.577939Z",
|
||||
"metadata": {
|
||||
"source_tree": "3aa196a92699858294996e75654b5552a391dcd0",
|
||||
"git_commit": "5664e889660ca8e86e3f5d4b56c20fac00541b05",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN5CRY3KT14T96RGEJEVG",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN5CRY3J9322XVY1HMMA0",
|
||||
"state_id": "P_06FN5CRY3KT14T96RGEJEVG",
|
||||
"prompt": "Resolve proposal R_06FN5CQ5X5Q5TMF8B19Y75R (Place the Hop robot mascot prominently beside the homepage hero) against accepted state A_06FN5A2J0W5SHTFGGJKVD10 (Reconcile first-paint logo rendering with a single cache-busted favicon source). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: deploy/gitea/templates/home.tmpl",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Reconcile the accepted homepage with its prominent robot mascot hero",
|
||||
"created_at": "2026-07-11T19:41:38.204167Z",
|
||||
"metadata": {
|
||||
"source_tree": "21ef8bb1b0c6b096479be0c90301a02435b88b9a",
|
||||
"git_commit": "25d5dbe5a609b0a1cd64c081226e3ccca0276db3",
|
||||
"attempt_head": "R_06FN5CZ847XQQ480QZYYFTR",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN5ER2J6NTMYYV8NHAZP0",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN5ER2J6NTMYYV8NHAZP0",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 12.48.47 PM.png: /Users/christopher/Desktop/Screenshot 2026-07-11 at 12.48.47 PM.png\n\n## Screenshot 2026-07-11 at 12.48.53 PM.png: /Users/christopher/Desktop/Screenshot 2026-07-11 at 12.48.53 PM.png\n\n## My request for Codex:\nwhy is it flashing old UI everytime the page loads?\n\u003cimage name=[Image #1] path=\"/Users/christopher/Desktop/Screenshot 2026-07-11 at 12.48.47 PM.png\"\u003e\n\u003cimage name=[Image #2] path=\"/Users/christopher/Desktop/Screenshot 2026-07-11 at 12.48.53 PM.png\"\u003e",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T19:50:15.441829Z",
|
||||
"metadata": {
|
||||
"source_tree": "73ac24b4cf1d236b4c90ba84f0575c00362418e5",
|
||||
"git_commit": "7ff74d3aab3e058404c982bb03327f465bdaf862",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN5F2NXABZV66VSFAXCA0",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN5F2NX90QCXGZC75YXVG",
|
||||
"state_id": "P_06FN5F2NXABZV66VSFAXCA0",
|
||||
"prompt": "Resolve proposal R_06FN5F0W3XJ8JTZ5E0Y7KAG (Gate first paint until Hop semantics are applied synchronously) against accepted state A_06FN5D0QEMY5BNEY1J9Q20G (Reconcile the accepted homepage with its prominent robot mascot hero). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: deploy/gitea/templates/custom/footer.tmpl, deploy/gitea/templates/custom/header.tmpl",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Reconcile the mascot homepage with a synchronous no-flash Hop UI gate",
|
||||
"created_at": "2026-07-11T19:51:42.314136Z",
|
||||
"metadata": {
|
||||
"source_tree": "bb0c2d3d3554edea34e1333080188cf57f6e3939",
|
||||
"git_commit": "46675ef0387b7843489d73097f4b20dad7556237",
|
||||
"attempt_head": "R_06FN5F91MYCDBBM8RZ85N0G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN5HQCP5200HJZ7R6ZKZ8",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN50V05RGZYCX0EKTK6Q0",
|
||||
"state_id": "P_06FN5HQCP5200HJZ7R6ZKZ8",
|
||||
"prompt": "can we disable actions/evidence? the server doesnt have the resources for that",
|
||||
"agent_name": "codex",
|
||||
"status": "completed",
|
||||
"response_summary": "Make Gitea Actions globally configurable for resource-constrained deployments",
|
||||
"created_at": "2026-07-11T20:03:16.273389Z",
|
||||
"metadata": {
|
||||
"source_tree": "5e1ad73204cf578b5e4944eedceab82dc5b6aee3",
|
||||
"git_commit": "fc787926592f2f5de2c394808a2047bd631118f5",
|
||||
"attempt_head": "R_06FN5J34322EW3NXQCJ3XSG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN5J4ZA8YM3HVQM4G6W88",
|
||||
"task_id": "T_06FN50V05VH5V9WE9QQF9KR",
|
||||
"attempt_id": "AT_06FN5J4ZA8XA979AVSBCSNG",
|
||||
"state_id": "P_06FN5J4ZA8YM3HVQM4G6W88",
|
||||
"prompt": "Resolve proposal R_06FN5J34322EW3NXQCJ3XSG (Make Gitea Actions globally configurable for resource-constrained deployments) against accepted state A_06FN5FAMPMB5RMA9X6V05BR (Reconcile the mascot homepage with a synchronous no-flash Hop UI gate). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: .env.example, compose.yaml, docs/production-deployment.md",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Reconcile production settings with globally disabled Gitea Actions support",
|
||||
"created_at": "2026-07-11T20:05:07.538808Z",
|
||||
"metadata": {
|
||||
"source_tree": "13386820c37d1bbebba028c6432a8864c3fa23e2",
|
||||
"git_commit": "e8b8ecd9aab9c0a3a3d9cff59b79eb0b3b8aa079",
|
||||
"attempt_head": "R_06FN5JG8ANPH2Q6BBKD7YMG",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6J8ECDNW2XP2JJFWHSR",
|
||||
"task_id": "T_06FN6J8ECE1Z9XQ5PQ3Z3D8",
|
||||
"attempt_id": "AT_06FN6J8ECC1SC794JMZ0TF8",
|
||||
"state_id": "P_06FN6J8ECDNW2XP2JJFWHSR",
|
||||
"prompt": "githop still just feels like another github, theres nothing making it special to hop. should we add a new \"Prompts\" tab where you can review the prompts and agent response metadata?",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a secure repository Prompts review surface and prompt metadata API",
|
||||
"created_at": "2026-07-11T22:25:24.579429Z",
|
||||
"metadata": {
|
||||
"source_tree": "a5a45a95afca66e4ae572e14909838a7126cdeb4",
|
||||
"git_commit": "e4c76dc93a4c7fea5d854fb8e3dd6f21da21a48a",
|
||||
"attempt_head": "R_06FN6MQDE14FFNR65H1D28G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6K2FQE69X3T6WQ5DK3G",
|
||||
"task_id": "T_06FN6J8ECE1Z9XQ5PQ3Z3D8",
|
||||
"attempt_id": "AT_06FN6J8ECC1SC794JMZ0TF8",
|
||||
"state_id": "P_06FN6K2FQE69X3T6WQ5DK3G",
|
||||
"prompt": "ok can we implement it",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add a secure repository Prompts review surface and prompt metadata API",
|
||||
"created_at": "2026-07-11T22:28:57.91511Z",
|
||||
"metadata": {
|
||||
"source_tree": "a5a45a95afca66e4ae572e14909838a7126cdeb4",
|
||||
"git_commit": "11cae8f8514471e240043d7314687e4932e096eb",
|
||||
"attempt_head": "R_06FN6MQDE14FFNR65H1D28G",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6KXWAQ7ENA0CYMNN9EG",
|
||||
"task_id": "T_06FN6KXWAMZC0WB4KWSWV90",
|
||||
"attempt_id": "AT_06FN6KXWAQ9AHXMSDGV4R40",
|
||||
"state_id": "P_06FN6KXWAQ7ENA0CYMNN9EG",
|
||||
"prompt": "Can we add the installation instructions to the homepage, as well as a link to the official hop repo \"**macOS and Linux**\ncurl -fsSL https://githop.xyz/GnosysLabs/Hop/raw/branch/main/scripts/install.sh | sh\n**Windows PowerShell**\nirm https://githop.xyz/GnosysLabs/Hop/raw/branch/main/scripts/install.ps1 | iex\" and https://githop.xyz/GnosysLabs/Hop",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Add official Hop repository and macOS, Linux, and Windows installation instructions to the homepage",
|
||||
"created_at": "2026-07-11T22:32:42.325545Z",
|
||||
"metadata": {
|
||||
"source_tree": "a5a45a95afca66e4ae572e14909838a7126cdeb4",
|
||||
"git_commit": "e4c76dc93a4c7fea5d854fb8e3dd6f21da21a48a",
|
||||
"attempt_head": "R_06FN6MGR770N9G10AM5TS50",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6N560G11TD2BPNGDFXR",
|
||||
"task_id": "T_06FN6N560GHE00H1ACBKR8G",
|
||||
"attempt_id": "AT_06FN6N560G6CPSCDTN8C48R",
|
||||
"state_id": "P_06FN6N560G11TD2BPNGDFXR",
|
||||
"prompt": "yes please",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Replace the bulky hero installers with a compact platform switcher, wrapping command, and copy action",
|
||||
"created_at": "2026-07-11T22:38:04.292574Z",
|
||||
"metadata": {
|
||||
"source_tree": "9881f434d2590cf9a6caa6f8efc425807fc31005",
|
||||
"git_commit": "fee4f6dd3108effe37f4aa7dcce7c04db3936ebe",
|
||||
"attempt_head": "R_06FN6S5PSBAXTT4CDRPQS0R",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6Q2N96DXNMH3SQJYN50",
|
||||
"task_id": "T_06FN6N560GHE00H1ACBKR8G",
|
||||
"attempt_id": "AT_06FN6N560G6CPSCDTN8C48R",
|
||||
"state_id": "P_06FN6Q2N96DXNMH3SQJYN50",
|
||||
"prompt": "can we move the install commands into the hero section, and also display them in a way where they dont get cut off/horizontal scroll? also include an easy copy button",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Replace the bulky hero installers with a compact platform switcher, wrapping command, and copy action",
|
||||
"created_at": "2026-07-11T22:46:27.913606Z",
|
||||
"metadata": {
|
||||
"source_tree": "9881f434d2590cf9a6caa6f8efc425807fc31005",
|
||||
"git_commit": "962efbdde1871158f7a88ae2f00ba977c5cb2e38",
|
||||
"attempt_head": "R_06FN6S5PSBAXTT4CDRPQS0R",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN6Q6CPWFZS8NZ8QG7NR0",
|
||||
"task_id": "T_06FN6Q6CPY9NYPA25F6DKS8",
|
||||
"attempt_id": "AT_06FN6Q6CPXMH0SQG64AB0H8",
|
||||
"state_id": "P_06FN6Q6CPWFZS8NZ8QG7NR0",
|
||||
"prompt": "great well lets implement that, sounds like a good plan to me",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T22:46:58.487273Z",
|
||||
"metadata": {
|
||||
"source_tree": "9881f434d2590cf9a6caa6f8efc425807fc31005",
|
||||
"git_commit": "fee4f6dd3108effe37f4aa7dcce7c04db3936ebe",
|
||||
"attempt_head": "C_06FN6RGXPRJ2P5AZP0WWVQ0",
|
||||
"attempt_head_kind": "checkpoint"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6R0F2YKSQ88H1FYQMVG",
|
||||
"task_id": "T_06FN6N560GHE00H1ACBKR8G",
|
||||
"attempt_id": "AT_06FN6N560G6CPSCDTN8C48R",
|
||||
"state_id": "P_06FN6R0F2YKSQ88H1FYQMVG",
|
||||
"prompt": "ew that so ugly and it takes up too much room can you make it more sleep and compact and look nicer overall",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Replace the bulky hero installers with a compact platform switcher, wrapping command, and copy action",
|
||||
"created_at": "2026-07-11T22:50:32.087398Z",
|
||||
"metadata": {
|
||||
"source_tree": "c845ccad468ced53f7d0c02c24a00b413ec76282",
|
||||
"git_commit": "65a1ef88ec25218f3703e05db309927b5541b35c",
|
||||
"attempt_head": "R_06FN6S5PSBAXTT4CDRPQS0R",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6TWMXN0M2QSSNZ6KRE8",
|
||||
"task_id": "T_06FN6TWMXN2S1VWJ42544S8",
|
||||
"attempt_id": "AT_06FN6TWMXQEY87HJNX13SAR",
|
||||
"state_id": "P_06FN6TWMXN0M2QSSNZ6KRE8",
|
||||
"prompt": "can we remove the \"help\" link from the top nav bar",
|
||||
"agent_name": "codex",
|
||||
"status": "accepted",
|
||||
"response_summary": "Remove the Help link from Hop's shared top navigation",
|
||||
"created_at": "2026-07-11T23:03:07.245716Z",
|
||||
"metadata": {
|
||||
"source_tree": "ea0d3db5b0f9a853b863698e7b33c6e11a9d9e09",
|
||||
"git_commit": "0cb027737ee091b928a48a2c45d6098178539803",
|
||||
"attempt_head": "R_06FN6VBZHCNQ6MQ1458WWR0",
|
||||
"attempt_head_kind": "proposal"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN6VQDZFJ89DSE4820W98",
|
||||
"task_id": "T_06FN6VQDZET3E5FH6B4D4N8",
|
||||
"attempt_id": "AT_06FN6VQDZFXVAK8NJXBZ8H0",
|
||||
"state_id": "P_06FN6VQDZFJ89DSE4820W98",
|
||||
"prompt": "can we create the repo GnosysLabs/GitHop on githop.xyz and publish this to it",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T23:06:46.651759Z",
|
||||
"metadata": {
|
||||
"source_tree": "52af5215fd39264d091a5b5845e03dd555e725de",
|
||||
"git_commit": "dfadc6717580793891db495e5729d98511dd0fed",
|
||||
"attempt_head": "P_06FN6ZY23MT9R7JTGM9BTMR",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN6WQYKZQT1JJFQBJFJER",
|
||||
"task_id": "T_06FN6VQDZET3E5FH6B4D4N8",
|
||||
"attempt_id": "AT_06FN6VQDZFXVAK8NJXBZ8H0",
|
||||
"state_id": "P_06FN6WQYKZQT1JJFQBJFJER",
|
||||
"prompt": "the credential is in my mac os keychain",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T23:11:13.055531Z",
|
||||
"metadata": {
|
||||
"source_tree": "52af5215fd39264d091a5b5845e03dd555e725de",
|
||||
"git_commit": "761432f96e2ebfabbb5d5529bfcd4c4353e27d99",
|
||||
"attempt_head": "P_06FN6ZY23MT9R7JTGM9BTMR",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6WXQF41XNQYEP0F67QR",
|
||||
"task_id": "T_06FN6Q6CPY9NYPA25F6DKS8",
|
||||
"attempt_id": "AT_06FN6WXQF509ZK786R6N7Z0",
|
||||
"state_id": "P_06FN6WXQF41XNQYEP0F67QR",
|
||||
"prompt": "Resolve proposal R_06FN6WVZBRQKS2051721VS0 (Publish portable Hop prompt records with the repository and render them in Prompts) against accepted state A_06FN6VDSDZSNJDKBSYY58K8 (Remove the Help link from Hop's shared top navigation). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: .hop/records/prompts/P_06FN6TWMXN0M2QSSNZ6KRE8.json",
|
||||
"agent_name": "codex",
|
||||
"status": "reconciling",
|
||||
"response_summary": "hop-reconciliation-conflicts:[\".hop/records/prompts/P_06FN6TWMXN0M2QSSNZ6KRE8.json\"]",
|
||||
"created_at": "2026-07-11T23:12:00.377583Z",
|
||||
"metadata": {
|
||||
"source_tree": "ab06c502b15f48e97161c275b9dee9b17abd1e6a",
|
||||
"git_commit": "de5c69da3d773bea1d76f3868b675e6538943222",
|
||||
"attempt_head": "P_06FN6WXQF41XNQYEP0F67QR",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN6X888F2XCVJN4C3KMTR",
|
||||
"task_id": "T_06FN6VQDZET3E5FH6B4D4N8",
|
||||
"attempt_id": "AT_06FN6VQDZFXVAK8NJXBZ8H0",
|
||||
"state_id": "P_06FN6X888F2XCVJN4C3KMTR",
|
||||
"prompt": "its called githop-release-token",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T23:13:26.595875Z",
|
||||
"metadata": {
|
||||
"source_tree": "52af5215fd39264d091a5b5845e03dd555e725de",
|
||||
"git_commit": "f4386318554c8969e5a00f7a1b655a5743c9e412",
|
||||
"attempt_head": "P_06FN6ZY23MT9R7JTGM9BTMR",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN6YH8JFHHAYBCDJTGG0R",
|
||||
"task_id": "T_06FN6YH8JD48T4PMFJZE70R",
|
||||
"attempt_id": "AT_06FN6YH8JE4ZX0A1XHAX9PR",
|
||||
"state_id": "P_06FN6YH8JFHHAYBCDJTGG0R",
|
||||
"prompt": "**No prompts have been reported yet.**\nWhen an agent starts work through Hop, its request, execution metadata, and final outcome will appear here.",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T23:19:02.547324Z",
|
||||
"metadata": {
|
||||
"source_tree": "c67ba998d8fd04d7c0caffc78cc21bd71cb3b769",
|
||||
"git_commit": "b04e24a543c527056b5284316ca7920b6ee15025",
|
||||
"attempt_head": "P_06FN6YH8JFHHAYBCDJTGG0R",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN6ZANP4X2ZDEZBGMPH10",
|
||||
"task_id": "T_06FN6ZANP5V1SKQWZBP9QZR",
|
||||
"attempt_id": "AT_06FN6ZANP74SVA7HQZJVW9R",
|
||||
"state_id": "P_06FN6ZANP4X2ZDEZBGMPH10",
|
||||
"prompt": "why are there things in this list that arent prompts that i sent? it seems that each one that says \"active\" next to it isnt a prompt i sent",
|
||||
"agent_name": "codex",
|
||||
"status": "proposed",
|
||||
"created_at": "2026-07-11T23:22:30.705202Z",
|
||||
"metadata": {
|
||||
"source_tree": "91a1a831db7db788d17d79d591fd78d57f90b814",
|
||||
"git_commit": "a472191bada39b250ed4082487d36c692d547ea5",
|
||||
"attempt_head": "C_06FN735G153QVVDDEF4J670",
|
||||
"attempt_head_kind": "checkpoint"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN6ZT6X3MQTBCQK35GPER",
|
||||
"task_id": "T_06FN6ZANP5V1SKQWZBP9QZR",
|
||||
"attempt_id": "AT_06FN6ZANP74SVA7HQZJVW9R",
|
||||
"state_id": "P_06FN6ZT6X3MQTBCQK35GPER",
|
||||
"prompt": "we dont need to show internal agent instructions at all. also why do all the agent responses say \"Roll completed agent sessions onto the latest accepted state\"",
|
||||
"agent_name": "codex",
|
||||
"status": "proposed",
|
||||
"response_summary": "Hide internal prompt states and label proposal outcomes accurately",
|
||||
"created_at": "2026-07-11T23:24:37.992663Z",
|
||||
"metadata": {
|
||||
"source_tree": "91a1a831db7db788d17d79d591fd78d57f90b814",
|
||||
"git_commit": "641ef9e42d6e066f7a4be1c652fb2b3effdc1490",
|
||||
"attempt_head": "C_06FN735G153QVVDDEF4J670",
|
||||
"attempt_head_kind": "checkpoint"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "P_06FN6ZY23MT9R7JTGM9BTMR",
|
||||
"task_id": "T_06FN6VQDZET3E5FH6B4D4N8",
|
||||
"attempt_id": "AT_06FN6VQDZFXVAK8NJXBZ8H0",
|
||||
"state_id": "P_06FN6ZY23MT9R7JTGM9BTMR",
|
||||
"prompt": "can we choose a different icon for the prompts tab. its using the same as tasks",
|
||||
"agent_name": "codex",
|
||||
"status": "active",
|
||||
"created_at": "2026-07-11T23:25:09.533475Z",
|
||||
"metadata": {
|
||||
"source_tree": "52af5215fd39264d091a5b5845e03dd555e725de",
|
||||
"git_commit": "657bc3cef08a240134f7e64900ecedbcfdf558a4",
|
||||
"attempt_head": "P_06FN6ZY23MT9R7JTGM9BTMR",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN70A6M7ZW50T52HXH3DR",
|
||||
"task_id": "T_06FN6VQDZET3E5FH6B4D4N8",
|
||||
"attempt_id": "AT_06FN70A6M65ZVCJ8K8D7TJ0",
|
||||
"state_id": "P_06FN70A6M7ZW50T52HXH3DR",
|
||||
"prompt": "Resolve proposal R_06FN7084GN5GMBHX5WCP5YG (Give the Prompts navigation tab a distinct prompt-bubble icon) against accepted state A_06FN6YW9ZERA9DGEPBNNXX8 (Force the latest Prompts client to load after partial-page navigation). Preserve both compatible intents. Inspect both input states for structural, delete/rename, mode, symlink, or binary conflicts that may have no text markers; resolve every conflict intentionally, remove all merge markers, run hop check, propose the result, and land it without asking the user to coordinate the merge. Conflict candidates: .hop/records/prompts/P_06FN6VQDZFJ89DSE4820W98.json, deploy/gitea/templates/custom/footer.tmpl",
|
||||
"agent_name": "codex",
|
||||
"status": "reconciling",
|
||||
"response_summary": "hop-reconciliation-conflicts:[\".hop/records/prompts/P_06FN6VQDZFJ89DSE4820W98.json\",\"deploy/gitea/templates/custom/footer.tmpl\"]",
|
||||
"created_at": "2026-07-11T23:26:48.993725Z",
|
||||
"metadata": {
|
||||
"source_tree": "48a0ecdbb41a845a70f061b183565ab15ae21ad3",
|
||||
"git_commit": "cc9878066ed488dd3a54f349d87d98345262ccb5",
|
||||
"attempt_head": "P_06FN70A6M7ZW50T52HXH3DR",
|
||||
"attempt_head_kind": "prompt"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN80RZH6H7NKBRW1CE7Q8",
|
||||
"task_id": "T_06FN80RZH5SJ34E1HRXCP30",
|
||||
"attempt_id": "AT_06FN80RZH7NVH11C2518Q70",
|
||||
"state_id": "P_06FN80RZH6H7NKBRW1CE7Q8",
|
||||
"prompt": "there needs to be padding above proposed outcome\nAttachment: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_buME62/Screenshot 2026-07-11 at 6.47.51 PM.png",
|
||||
"agent_name": "codex",
|
||||
"status": "proposed",
|
||||
"response_summary": "Add breathing room above proposal outcomes",
|
||||
"created_at": "2026-07-12T01:48:38.665883Z",
|
||||
"metadata": {
|
||||
"source_tree": "7e039d04c2df5cd49e7bc933107622eef4a8c22e",
|
||||
"git_commit": "8001195185d93e6a7628b2357e00e86fbbae4109",
|
||||
"attempt_head": "C_06FN813849CSWMSVM8464TR",
|
||||
"attempt_head_kind": "checkpoint"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "P_06FN81VCJ1XX2PT0S6HF180",
|
||||
"task_id": "T_06FN81VCJ19AK73YNFEFK3R",
|
||||
"attempt_id": "AT_06FN81VCJ2T1EHWHQTR0TX0",
|
||||
"state_id": "P_06FN81VCJ1XX2PT0S6HF180",
|
||||
"prompt": "# Files mentioned by the user:\n\n## Screenshot 2026-07-11 at 6.52.26 PM.png: /var/folders/58/b6yn15tx3jb7_6lw9m67f89m0000gn/T/TemporaryItems/NSIRD_screencaptureui_WwfSmM/Screenshot 2026-07-11 at 6.52.26 PM.png\n\n## My request for Codex:\nwhy arent the prompts for githop showing in the repos prompts tab? also there needs to be a space between the icon and the word prompts",
|
||||
"agent_name": "codex",
|
||||
"status": "proposed",
|
||||
"response_summary": "Publish GitHop prompt records and space the Prompts tab label",
|
||||
"created_at": "2026-07-12T01:53:20.528796Z",
|
||||
"metadata": {
|
||||
"source_tree": "065792a07e78097e9cdf367663fc990f7fe5abe0",
|
||||
"git_commit": "11b75c76650e3b91f97836b065953ac0c0d03be7",
|
||||
"attempt_head": "C_06FN82CSESVQ54SPK1H3X4G",
|
||||
"attempt_head_kind": "checkpoint"
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Gnosys Labs LLC
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,23 @@
|
||||
.PHONY: build config down hop-records logs test up
|
||||
|
||||
build:
|
||||
cd services/control-plane && go build -buildvcs=false ./...
|
||||
|
||||
config:
|
||||
docker compose --env-file .env.example config --quiet
|
||||
|
||||
hop-records:
|
||||
hop export --output .
|
||||
|
||||
down:
|
||||
docker compose down
|
||||
|
||||
logs:
|
||||
docker compose logs -f
|
||||
|
||||
test:
|
||||
cd services/control-plane && go test -buildvcs=false ./...
|
||||
|
||||
up:
|
||||
test -f .env || cp .env.example .env
|
||||
docker compose up --build -d
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
# HopWeb Product
|
||||
|
||||
## Register
|
||||
|
||||
product
|
||||
|
||||
## Users
|
||||
|
||||
HopWeb is designed first for solo software developers who direct multiple AI
|
||||
agents and need to understand, compare, and trust their work without manually
|
||||
reconstructing intent from terminals and commit histories. The product should
|
||||
also support engineering teams reviewing agent-produced outcomes, with clear
|
||||
human ownership, attribution, policy, and evidence.
|
||||
|
||||
Users arrive with an outcome in mind. Their primary workflow is to state that
|
||||
outcome, launch or supervise isolated attempts, intervene when necessary,
|
||||
compare proposals, inspect evidence, and accept one verified result as shared
|
||||
truth.
|
||||
|
||||
## Product Purpose
|
||||
|
||||
HopWeb is a prompt-native software forge. It combines universal Git
|
||||
compatibility with a causal record of requested intent, agent attempts,
|
||||
immutable checkpoints, validation evidence, reviewable proposals, and accepted
|
||||
outcomes.
|
||||
|
||||
Success means a developer can answer four questions immediately: what was
|
||||
requested, who or what attempted it, what exact result was verified, and which
|
||||
outcome became accepted truth. Git files, commits, branches, and pull requests
|
||||
remain available as compatibility views, but they do not dictate the primary
|
||||
experience.
|
||||
|
||||
## Brand Personality
|
||||
|
||||
Focused, assured, and alive.
|
||||
|
||||
HopWeb should feel fast and command-ready like a serious developer instrument,
|
||||
while remaining calm enough for careful review. Its personality comes from the
|
||||
clarity of the state model and the visible motion of work through that model,
|
||||
not decorative futurism or AI theatrics.
|
||||
|
||||
## Anti-references
|
||||
|
||||
- Not Gitea with an AI sidebar or a chatbot pasted onto repository pages.
|
||||
- Not a generic SaaS dashboard assembled from interchangeable metric cards.
|
||||
- Not a noisy cyberpunk developer tool with neon-on-black styling.
|
||||
- Not an opaque agent console that asks users to trust summaries without exact
|
||||
diffs and checkpoint-bound evidence.
|
||||
- Not a GitHub imitation that merely renames pull requests and branches.
|
||||
|
||||
## Design Principles
|
||||
|
||||
1. **Intent before implementation.** Lead with the requested outcome and its
|
||||
causal context before files, commits, or activity feeds.
|
||||
2. **Supervision at a glance.** Make active attempts, interventions, failures,
|
||||
and acceptance readiness legible without opening every detail view.
|
||||
3. **Evidence is attached, not implied.** Every claim of success points to the
|
||||
immutable checkpoint and checks that support it.
|
||||
4. **Progressive Git compatibility.** Keep familiar Git affordances close, but
|
||||
let Hop concepts own hierarchy, naming, and default navigation.
|
||||
5. **Density without anxiety.** Favor keyboard speed and information density
|
||||
while preserving rhythm, clear priority, and calm review states.
|
||||
|
||||
## Accessibility & Inclusion
|
||||
|
||||
Target WCAG 2.2 AA. Every workflow must be fully keyboard operable with visible
|
||||
focus, semantic landmarks, descriptive labels, and non-color status cues.
|
||||
Respect reduced-motion preferences and preserve comprehension when motion is
|
||||
disabled. Status palettes must remain distinguishable for common color-vision
|
||||
differences, and dense views must support comfortable zoom and narrow screens.
|
||||
|
||||
@@ -1,97 +1,66 @@
|
||||
# Hop
|
||||
# HopWeb
|
||||
|
||||
**Prompt-native version control for coding agents.**
|
||||
HopWeb is a collaborative forge for prompt-native software development.
|
||||
|
||||
Hop remembers why code changed, not just what changed. Every instruction becomes
|
||||
a durable project state before an agent starts working. Agents get isolated
|
||||
workspaces, validate the final result, and safely land accepted work in the
|
||||
project folder you opened.
|
||||
It uses Git for durable source storage and Gitea for the proven forge substrate,
|
||||
but makes Hop's workflow the primary product model:
|
||||
|
||||
Git remains the source-tree and interoperability layer. Hop adds the context
|
||||
agent workflows are missing: prompts, lineage, checkpoints, validation evidence,
|
||||
and safe multi-agent integration.
|
||||
- a **task** captures the outcome someone wants;
|
||||
- a **prompt state** records each instruction in its causal context;
|
||||
- an **attempt** is an isolated line of human or agent work;
|
||||
- a **checkpoint** freezes the exact tree that was evaluated;
|
||||
- **evidence** records checks against that immutable checkpoint;
|
||||
- a **proposal** is a reviewable candidate outcome; and
|
||||
- an **accepted state** is the current shared truth.
|
||||
|
||||
## Why Hop
|
||||
The repository **Prompts** view is the review surface for that causal record:
|
||||
the requested work, agent identity and runtime metadata, response summary, and
|
||||
links to the task, attempt, and immutable state that produced it.
|
||||
|
||||
- **Intent is versioned.** Each prompt is connected to the code it produced.
|
||||
- **Agents stay isolated.** Parallel tasks do not edit the same working folder.
|
||||
- **Integration is intelligent.** Compatible changes merge automatically;
|
||||
genuine conflicts return to an agent for reconciliation.
|
||||
- **Validation follows the code.** Checks run against immutable work and the
|
||||
exact final tree before it becomes accepted.
|
||||
- **Accepted work is visible.** Successful results appear in the selected
|
||||
project folder without moving your active Git branch or index.
|
||||
- **Publishing is automatic.** When an upstream branch exists, each accepted
|
||||
transition is pushed without moving the local branch or force-pushing.
|
||||
- **History stays local by default.** Detected credentials are redacted before
|
||||
prompts and evidence are persisted.
|
||||
Hop automatically writes immutable, portable prompt records to
|
||||
`.hop/records/prompts/` when it creates a proposal. Git tracks those records
|
||||
with the code, while Hop's local database and disposable workspaces remain
|
||||
ignored. Run `make hop-records` to export the complete local record history on
|
||||
demand.
|
||||
|
||||
## How it works
|
||||
The product thesis is simple:
|
||||
|
||||
```text
|
||||
prompt → durable intent → isolated agent work → validate + merge → accepted code
|
||||
```
|
||||
> GitHub organizes collaboration around commits and pull requests. HopWeb
|
||||
> organizes human-agent collaboration around intent, attempts, evidence, and
|
||||
> accepted outcomes.
|
||||
|
||||
Hop ships an open [Agent Skills](https://agentskills.io/) bundle and a controller
|
||||
protocol. The skill makes prompt capture the agent's first repository action; a
|
||||
controller can capture before model delivery. Both use the same state,
|
||||
workspace, validation, reconciliation, and landing protocol. Codex Desktop is
|
||||
one bundled integration, not a boundary of the product.
|
||||
## Foundation
|
||||
|
||||
## Install
|
||||
Gitea supplies the expensive, mature infrastructure we should not rebuild:
|
||||
|
||||
Hop requires Git 2.40 or newer.
|
||||
- Git transport, repositories, LFS, and permissions
|
||||
- users, organizations, teams, OAuth, and access tokens
|
||||
- issues, notifications, webhooks, releases, packages, and Actions
|
||||
- administration, audit surfaces, and deployment primitives
|
||||
|
||||
### macOS and Linux
|
||||
Hop supplies the differentiating control plane and experience:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://githop.xyz/GnosysLabs/Hop/raw/branch/main/scripts/install.sh | sh
|
||||
```
|
||||
- prompt and state graph persistence
|
||||
- task and attempt orchestration
|
||||
- agent identity and attribution
|
||||
- checkpoint-bound validation evidence
|
||||
- proposal review and acceptance semantics
|
||||
- a Hop-native repository, task, attempt, and review interface
|
||||
|
||||
### Windows PowerShell
|
||||
See [the product blueprint](docs/product-blueprint.md) and
|
||||
[the Gitea foundation decision](docs/adr/0001-gitea-as-forge-foundation.md).
|
||||
|
||||
```powershell
|
||||
irm https://githop.xyz/GnosysLabs/Hop/raw/branch/main/scripts/install.ps1 | iex
|
||||
```
|
||||
## First release
|
||||
|
||||
The installer adds the Hop CLI and writes the same embedded skill version to
|
||||
`~/.agents/skills/hop` and `${CODEX_HOME:-~/.codex}/skills/hop`. For CLI-only
|
||||
installation, source builds, version pinning, custom locations, and
|
||||
verification, see the
|
||||
[installation guide](https://githop.xyz/GnosysLabs/Hop/wiki/Installation).
|
||||
The first useful release is not a complete GitHub clone. It is a private,
|
||||
single-installation forge where a user can:
|
||||
|
||||
## Get started
|
||||
1. create or import a repository;
|
||||
2. open a task with a prompt;
|
||||
3. launch one or more isolated agent attempts;
|
||||
4. watch states, diffs, and checks appear live;
|
||||
5. compare proposals by outcome and evidence; and
|
||||
6. accept one proposal into the repository's shared state.
|
||||
|
||||
1. Install Hop.
|
||||
2. Open a Git project in an Agent Skills-compatible client, or make it the
|
||||
controller's working directory.
|
||||
3. Ask the agent to make a change as you normally would.
|
||||
|
||||
That is the full user workflow. You do not run `hop init`, route prompts through
|
||||
a terminal, or work inside `.hop` yourself. After a task, `hop status` shows the
|
||||
accepted state and whether the visible project folder is synchronized.
|
||||
When the repository has an unambiguous Git upstream, Hop also pushes the
|
||||
accepted commit automatically; users do not run `git push` after each task.
|
||||
|
||||
For example, Codex Desktop users restart Codex after installation, select a Git
|
||||
project, and prompt normally. Other compatible runtimes can read the shared
|
||||
skill bundle or receive a single-target installation with the explicit
|
||||
`hop skill install --path /path/to/agent/skills --force` form.
|
||||
|
||||
Hop is currently an early alpha. Expect its state model and CLI to evolve before
|
||||
1.0.
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Getting started](https://githop.xyz/GnosysLabs/Hop/wiki/Getting-Started)
|
||||
- [Agent workflow](https://githop.xyz/GnosysLabs/Hop/wiki/Agent-Workflow)
|
||||
- [Parallel agents and conflicts](https://githop.xyz/GnosysLabs/Hop/wiki/Parallel-Agents-and-Conflicts)
|
||||
- [Core concepts](https://githop.xyz/GnosysLabs/Hop/wiki/Core-Concepts)
|
||||
- [CLI reference](https://githop.xyz/GnosysLabs/Hop/wiki/CLI-Reference)
|
||||
- [Security and privacy](https://githop.xyz/GnosysLabs/Hop/wiki/Security-and-Privacy)
|
||||
- [Architecture](https://githop.xyz/GnosysLabs/Hop/wiki/Architecture)
|
||||
- [Product blueprint](docs/product-blueprint.md)
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE) © 2026 Gnosys Labs LLC.
|
||||
Everything else should be inherited from Gitea until the Hop workflow proves
|
||||
that it needs a different abstraction.
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"githop.xyz/GnosysLabs/Hop/internal/hop"
|
||||
)
|
||||
|
||||
func main() {
|
||||
os.Exit(hop.RunCLI(os.Args[1:], os.Stdout, os.Stderr))
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
name: hopweb
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:17.6-alpine
|
||||
environment:
|
||||
POSTGRES_DB: gitea
|
||||
POSTGRES_USER: hopweb
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?copy .env.example to .env first}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U hopweb -d gitea"]
|
||||
interval: 3s
|
||||
timeout: 3s
|
||||
retries: 20
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
- ./deploy/postgres/init:/docker-entrypoint-initdb.d:ro
|
||||
networks: [hopweb]
|
||||
|
||||
gitea:
|
||||
image: docker.gitea.com/gitea:1.26.4
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
USER_UID: "1000"
|
||||
USER_GID: "1000"
|
||||
GITEA__database__DB_TYPE: postgres
|
||||
GITEA__database__HOST: postgres:5432
|
||||
GITEA__database__NAME: gitea
|
||||
GITEA__database__USER: hopweb
|
||||
GITEA__database__PASSWD: ${POSTGRES_PASSWORD}
|
||||
GITEA__server__DOMAIN: ${GITEA_DOMAIN:-localhost}
|
||||
GITEA__server__ROOT_URL: ${GITEA_ROOT_URL:-http://localhost:3000/}
|
||||
GITEA__server__SSH_DOMAIN: ${GITEA_SSH_DOMAIN:-localhost}
|
||||
GITEA__server__SSH_PORT: ${GITEA_SSH_PORT:-2222}
|
||||
GITEA__server__DISABLE_SSH: ${GITEA_DISABLE_SSH:-false}
|
||||
GITEA__service__DISABLE_REGISTRATION: ${GITEA_DISABLE_REGISTRATION:-false}
|
||||
GITEA__actions__ENABLED: ${GITEA_ACTIONS_ENABLED:-true}
|
||||
GITEA__security__INSTALL_LOCK: "true"
|
||||
GITEA__webhook__ALLOWED_HOST_LIST: control-plane
|
||||
ports:
|
||||
- "${GITEA_HTTP_BIND:-0.0.0.0}:${GITEA_HTTP_PORT:-3000}:3000"
|
||||
- "${GITEA_SSH_BIND:-0.0.0.0}:${GITEA_SSH_PORT:-2222}:22"
|
||||
volumes:
|
||||
- gitea-data:/data
|
||||
networks: [hopweb]
|
||||
|
||||
control-plane:
|
||||
build:
|
||||
context: ./services/control-plane
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
gitea:
|
||||
condition: service_started
|
||||
environment:
|
||||
HOP_HTTP_ADDR: :8080
|
||||
HOP_DATABASE_URL: postgres://hopweb:${POSTGRES_PASSWORD}@postgres:5432/hop?sslmode=disable
|
||||
HOP_ADMIN_TOKEN: ${HOP_ADMIN_TOKEN:?set HOP_ADMIN_TOKEN in .env}
|
||||
HOP_GITEA_WEBHOOK_SECRET: ${HOP_GITEA_WEBHOOK_SECRET:?set HOP_GITEA_WEBHOOK_SECRET in .env}
|
||||
GITEA_BASE_URL: http://gitea:3000
|
||||
GITEA_API_TOKEN: ${GITEA_API_TOKEN:-}
|
||||
ports:
|
||||
- "${HOP_HTTP_BIND:-0.0.0.0}:${HOP_HTTP_PORT:-8080}:8080"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "-qO-", "http://localhost:8080/readyz"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 20
|
||||
networks: [hopweb]
|
||||
|
||||
networks:
|
||||
hopweb:
|
||||
|
||||
volumes:
|
||||
gitea-data:
|
||||
postgres-data:
|
||||
Executable
+79
@@ -0,0 +1,79 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
env_file=${ENV_FILE:-.env}
|
||||
|
||||
if [ ! -f "$env_file" ]; then
|
||||
echo "missing $env_file; copy .env.example and configure it first" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker compose --env-file "$env_file" up -d gitea
|
||||
docker compose --env-file "$env_file" exec -T -u root gitea \
|
||||
mkdir -p /data/gitea/templates/base /data/gitea/templates/custom /data/gitea/public/assets/js /data/gitea/public/assets/css /data/gitea/public/assets/img
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/templates/home.tmpl \
|
||||
gitea:/data/gitea/templates/home.tmpl
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/templates/base/head.tmpl \
|
||||
gitea:/data/gitea/templates/base/head.tmpl
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/templates/custom/header.tmpl \
|
||||
gitea:/data/gitea/templates/custom/header.tmpl
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/templates/custom/footer.tmpl \
|
||||
gitea:/data/gitea/templates/custom/footer.tmpl
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/js/hop-native.js \
|
||||
gitea:/data/gitea/public/assets/js/hop-native.js
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/js/hop-native.js \
|
||||
gitea:/data/gitea/public/assets/js/hop-native-v12.js
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/js/hop-native.js \
|
||||
gitea:/data/gitea/public/assets/js/hop-native-v13.js
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/js/hop-native.js \
|
||||
gitea:/data/gitea/public/assets/js/hop-native-v14.js
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/css/hop-home.css \
|
||||
gitea:/data/gitea/public/assets/css/hop-home.css
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/css/hop-prompts.css \
|
||||
gitea:/data/gitea/public/assets/css/hop-prompts.css
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/img/hop.svg \
|
||||
gitea:/data/gitea/public/assets/img/hop.svg
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/img/hop.svg \
|
||||
gitea:/data/gitea/public/assets/img/logo.svg
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/img/logo.png \
|
||||
gitea:/data/gitea/public/assets/img/logo.png
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/img/avatar_default.png \
|
||||
gitea:/data/gitea/public/assets/img/avatar_default.png
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/img/hop.svg \
|
||||
gitea:/data/gitea/public/assets/img/favicon.svg
|
||||
docker compose --env-file "$env_file" cp \
|
||||
deploy/gitea/public/assets/img/favicon.png \
|
||||
gitea:/data/gitea/public/assets/img/favicon.png
|
||||
docker compose --env-file "$env_file" exec -T -u root gitea \
|
||||
chown -R git:git /data/gitea/templates /data/gitea/public
|
||||
docker compose --env-file "$env_file" exec -T -u git \
|
||||
-e GITEA____APP_NAME=Hop gitea \
|
||||
gitea --config /data/gitea/conf/app.ini config edit-ini --in-place --apply-env
|
||||
docker compose --env-file "$env_file" restart gitea
|
||||
|
||||
attempt=0
|
||||
until curl --fail --silent http://localhost:3000/api/healthz >/dev/null; do
|
||||
attempt=$((attempt + 1))
|
||||
if [ "$attempt" -ge 30 ]; then
|
||||
echo "Gitea did not become healthy" >&2
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "Hop-native Gitea semantics installed at http://localhost:3000"
|
||||
@@ -0,0 +1,61 @@
|
||||
:root {
|
||||
--color-primary: #724bdb !important;
|
||||
--color-primary-contrast: #fff !important;
|
||||
--color-primary-hover: #6540c7 !important;
|
||||
--color-primary-active: #5935b3 !important;
|
||||
--color-primary-dark-1: #6540c7 !important;
|
||||
--color-primary-dark-2: #5935b3 !important;
|
||||
--color-primary-dark-3: #4c2c9f !important;
|
||||
--color-primary-dark-4: #3f2485 !important;
|
||||
--color-primary-dark-5: #2c195d !important;
|
||||
--color-primary-dark-6: #1a0f38 !important;
|
||||
--color-primary-dark-7: #0b0618 !important;
|
||||
--color-primary-light-1: #805ee0 !important;
|
||||
--color-primary-light-2: #8e71e5 !important;
|
||||
--color-primary-light-3: #9c84e9 !important;
|
||||
--color-primary-light-4: #aa97ed !important;
|
||||
--color-primary-light-5: #c6b8f3 !important;
|
||||
--color-primary-light-6: #e2dcf9 !important;
|
||||
--color-primary-light-7: #f4f1fd !important;
|
||||
--color-primary-alpha-10: #724bdb19 !important;
|
||||
--color-primary-alpha-20: #724bdb33 !important;
|
||||
--color-primary-alpha-30: #724bdb4c !important;
|
||||
--color-primary-alpha-40: #724bdb66 !important;
|
||||
--color-primary-alpha-50: #724bdb80 !important;
|
||||
--color-primary-alpha-60: #724bdb99 !important;
|
||||
--color-primary-alpha-70: #724bdbb3 !important;
|
||||
--color-primary-alpha-80: #724bdbcc !important;
|
||||
--color-primary-alpha-90: #724bdbe6 !important;
|
||||
}
|
||||
.hop-home { max-width: 1120px; margin: 0 auto; padding: 5.5rem 2rem 4rem; }
|
||||
.hop-home h1, .hop-home h2, .hop-home h3 { color: var(--color-text); letter-spacing: -0.035em; }
|
||||
.hop-home p { color: var(--color-text-light-2); line-height: 1.65; }
|
||||
.hop-eyebrow { color: var(--color-primary) !important; font-size: .78rem; font-weight: 700; letter-spacing: .13em; margin: 0 0 1rem; text-transform: uppercase; }
|
||||
.hop-hero { align-items: center; display: grid; gap: 5rem; grid-template-columns: 1.25fr .75fr; min-height: 390px; }
|
||||
.hop-hero h1 { font-size: clamp(2.75rem, 6vw, 4.8rem); line-height: 1.02; margin: 0; max-width: 750px; }
|
||||
.hop-lede { font-size: 1.18rem; margin: 1.5rem 0 2rem; max-width: 650px; }
|
||||
.hop-actions { display: flex; flex-wrap: wrap; gap: .75rem; }
|
||||
.hop-actions .button, .hop-closing .button { margin: 0; }
|
||||
.hop-hero-mark { display: grid; justify-items: center; position: relative; }
|
||||
.hop-hero-mark img { filter: drop-shadow(0 18px 24px color-mix(in srgb, var(--color-primary) 22%, transparent)); width: min(100%, 220px); }
|
||||
.hop-state-card { align-items: center; background: var(--color-box-body); border: 1px solid var(--color-secondary); border-radius: 8px; box-shadow: 0 12px 28px rgba(0,0,0,.12); color: var(--color-text); display: flex; font-size: .85rem; gap: .55rem; margin-top: -1rem; padding: .72rem .9rem; position: relative; }
|
||||
.hop-state-dot { background: #2da44e; border-radius: 50%; height: .55rem; width: .55rem; }
|
||||
.hop-intro { border-top: 1px solid var(--color-secondary); margin-top: 4.5rem; max-width: 780px; padding-top: 4.5rem; }
|
||||
.hop-intro h2, .hop-flow h2, .hop-closing h2 { font-size: clamp(2rem, 3.5vw, 3rem); line-height: 1.12; margin: 0 0 1.1rem; }
|
||||
.hop-intro p { font-size: 1.12rem; }
|
||||
.hop-benefits { display: grid; gap: 1px; grid-template-columns: repeat(3, 1fr); margin: 5rem 0; background: var(--color-secondary); border: 1px solid var(--color-secondary); }
|
||||
.hop-benefits article { background: var(--color-box-body); padding: 2rem; }
|
||||
.hop-number { color: var(--color-primary); font-size: .82rem; font-weight: 700; letter-spacing: .1em; }
|
||||
.hop-benefits h2 { font-size: 1.35rem; margin: 3.5rem 0 .8rem; }
|
||||
.hop-benefits p { font-size: .97rem; margin: 0; }
|
||||
.hop-flow { display: grid; gap: 4rem; grid-template-columns: .8fr 1.2fr; padding: 2rem 0 5rem; }
|
||||
.hop-flow h2 { font-size: 2.3rem; }
|
||||
.hop-flow ol { border-left: 1px solid var(--color-secondary); list-style: none; margin: 0; padding: 0 0 0 2rem; }
|
||||
.hop-flow li { display: grid; gap: 1rem; grid-template-columns: 2rem 1fr; margin: 0 0 2rem; position: relative; }
|
||||
.hop-flow li:last-child { margin-bottom: 0; }
|
||||
.hop-flow li > span { align-items: center; background: var(--color-box-body); border: 1px solid var(--color-primary); border-radius: 50%; color: var(--color-primary); display: flex; font-size: .8rem; font-weight: 700; height: 2rem; justify-content: center; margin-left: -3.05rem; }
|
||||
.hop-flow h3 { font-size: 1.12rem; margin: .25rem 0 .3rem; }
|
||||
.hop-flow li p { margin: 0; }
|
||||
.hop-closing { align-items: center; background: color-mix(in srgb, var(--color-primary) 9%, var(--color-box-body)); border: 1px solid color-mix(in srgb, var(--color-primary) 32%, var(--color-secondary)); display: flex; justify-content: space-between; gap: 2rem; padding: 2.5rem; }
|
||||
.hop-closing h2 { font-size: 2rem; margin-bottom: 0; max-width: 540px; }
|
||||
@media (max-width: 760px) { .hop-home { padding: 3.5rem 1.25rem; } .hop-hero, .hop-flow { gap: 2.5rem; grid-template-columns: 1fr; } .hop-hero-mark { justify-items: start; } .hop-hero-mark img { width: 145px; } .hop-benefits { grid-template-columns: 1fr; } .hop-benefits h2 { margin-top: 1.5rem; } .hop-closing { align-items: flex-start; flex-direction: column; } }
|
||||
@@ -0,0 +1,202 @@
|
||||
.hop-native-prompts-tab svg {
|
||||
margin-right: 0.4rem;
|
||||
}
|
||||
|
||||
.hop-prompts {
|
||||
margin: 0 auto;
|
||||
max-width: 1080px;
|
||||
padding: 2.25rem clamp(1rem, 3vw, 2.5rem) 4rem;
|
||||
}
|
||||
|
||||
.hop-prompts__header {
|
||||
align-items: end;
|
||||
border-bottom: 1px solid var(--color-secondary);
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.hop-prompts__eyebrow {
|
||||
color: var(--color-text-light-2);
|
||||
font-size: 0.72rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.1em;
|
||||
margin: 0 0 0.4rem;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.hop-prompts h1 {
|
||||
color: var(--color-text);
|
||||
font-size: 1.55rem;
|
||||
letter-spacing: -0.025em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.hop-prompts__lede {
|
||||
color: var(--color-text-light-2);
|
||||
line-height: 1.55;
|
||||
margin: 0.65rem 0 0;
|
||||
max-width: 62ch;
|
||||
}
|
||||
|
||||
.hop-prompts__refresh {
|
||||
align-items: center;
|
||||
display: inline-flex;
|
||||
gap: 0.45rem;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.hop-prompts__status {
|
||||
color: var(--color-text-light-2);
|
||||
font-size: 0.9rem;
|
||||
margin: 1.25rem 0;
|
||||
}
|
||||
|
||||
.hop-prompts__empty {
|
||||
border: 1px dashed var(--color-secondary);
|
||||
color: var(--color-text-light-2);
|
||||
line-height: 1.6;
|
||||
margin-top: 1.25rem;
|
||||
max-width: 720px;
|
||||
padding: 1.5rem;
|
||||
}
|
||||
|
||||
.hop-prompts__empty strong {
|
||||
color: var(--color-text);
|
||||
display: block;
|
||||
font-size: 1rem;
|
||||
margin-bottom: 0.35rem;
|
||||
}
|
||||
|
||||
.hop-prompt-list {
|
||||
display: grid;
|
||||
gap: 0;
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
|
||||
.hop-prompt {
|
||||
border-bottom: 1px solid var(--color-secondary);
|
||||
border-top: 1px solid var(--color-secondary);
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.hop-prompt summary {
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
display: grid;
|
||||
gap: 0.75rem 1rem;
|
||||
grid-template-columns: minmax(0, 1fr) auto;
|
||||
list-style: none;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
.hop-prompt summary::-webkit-details-marker { display: none; }
|
||||
|
||||
.hop-prompt__request {
|
||||
color: var(--color-text);
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
line-height: 1.45;
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.hop-prompt__meta {
|
||||
color: var(--color-text-light-2);
|
||||
font-size: 0.82rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.hop-prompt__status {
|
||||
align-items: center;
|
||||
color: var(--color-text-light-2);
|
||||
display: inline-flex;
|
||||
gap: 0.4rem;
|
||||
margin-right: 0.55rem;
|
||||
}
|
||||
|
||||
.hop-prompt__status::before {
|
||||
background: var(--color-text-light-3);
|
||||
border-radius: 50%;
|
||||
content: "";
|
||||
height: 0.45rem;
|
||||
width: 0.45rem;
|
||||
}
|
||||
|
||||
.hop-prompt__status[data-status="completed"]::before { background: var(--color-green); }
|
||||
.hop-prompt__status[data-status="failed"]::before { background: var(--color-red); }
|
||||
.hop-prompt__status[data-status="cancelled"]::before { background: var(--color-orange); }
|
||||
.hop-prompt__status[data-status="running"]::before { background: var(--color-primary); }
|
||||
|
||||
.hop-prompt__body {
|
||||
border-top: 1px solid var(--color-secondary);
|
||||
display: grid;
|
||||
gap: 1.25rem;
|
||||
grid-template-columns: minmax(0, 1.45fr) minmax(14rem, 0.55fr);
|
||||
padding: 1.25rem 0 1.5rem;
|
||||
}
|
||||
|
||||
.hop-prompt h2,
|
||||
.hop-prompt h3 {
|
||||
color: var(--color-text);
|
||||
font-size: 0.78rem;
|
||||
letter-spacing: 0.07em;
|
||||
margin: 0 0 0.55rem;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.hop-prompt h2.hop-prompt__outcome-heading {
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
|
||||
.hop-prompt pre,
|
||||
.hop-prompt__response {
|
||||
background: var(--color-box-body);
|
||||
border: 1px solid var(--color-secondary);
|
||||
border-radius: var(--radius-medium);
|
||||
color: var(--color-text);
|
||||
font: inherit;
|
||||
line-height: 1.55;
|
||||
margin: 0;
|
||||
overflow-wrap: anywhere;
|
||||
padding: 0.9rem 1rem;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.hop-prompt__response { color: var(--color-text-light-1); }
|
||||
|
||||
.hop-prompt__facts {
|
||||
display: grid;
|
||||
gap: 0.6rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.hop-prompt__facts div {
|
||||
border-bottom: 1px solid var(--color-secondary);
|
||||
padding-bottom: 0.55rem;
|
||||
}
|
||||
|
||||
.hop-prompt__facts dt {
|
||||
color: var(--color-text-light-2);
|
||||
font-size: 0.72rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.07em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.hop-prompt__facts dd {
|
||||
color: var(--color-text);
|
||||
font-size: 0.88rem;
|
||||
margin: 0.2rem 0 0;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
@media (max-width: 700px) {
|
||||
.hop-prompts__header, .hop-prompt__body { align-items: start; grid-template-columns: 1fr; }
|
||||
.hop-prompts__header { flex-direction: column; }
|
||||
.hop-prompt summary { grid-template-columns: 1fr; }
|
||||
.hop-prompt__meta { text-align: left; }
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.9 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 180 180" fill="none" shape-rendering="auto" aria-hidden="true" width="512" height="512"><!-- Generated by DiceBear (https://dicebear.com) --><metadata xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/"><rdf:RDF><rdf:Description><dc:title>Bottts</dc:title><dc:creator>Pablo Stanley</dc:creator><dc:source xsi:type="dcterms:URI">https://bottts.com/</dc:source><dcterms:license xsi:type="dcterms:URI">https://bottts.com/</dcterms:license><dc:rights>Remix of “Bottts” (https://bottts.com/) by “Pablo Stanley”, licensed under “Free for personal and commercial use” (https://bottts.com/)</dc:rights></rdf:Description></rdf:RDF></metadata><defs><g id="sides-antenna01-b3dae8fb"><mask id="sidesAntenna01-a" style="mask-type:luminance"><rect y="31" width="36" height="14" rx="4" fill="white"/><rect x="12" y="14" width="36" height="48" rx="4" fill="white"/><rect x="120" y="28" width="36" height="24" rx="4" fill="white"/><rect x="5" y="11" width="2" height="20" fill="white"/></mask><g mask="url(#sidesAntenna01-a)"><path d="M-6 0h180v76H-6z" fill="#9975ea"/><rect x="-6" width="180" height="76" fill="white" fill-opacity=".3"/><rect x="-6" y="38" width="180" height="38" fill="black" fill-opacity=".1"/></g><rect x="5" y="11" width="2" height="20" fill="white" fill-opacity=".4"/><circle cx="6" cy="8" r="4" fill="#FFEA8F"/><circle cx="7" cy="7" r="2" fill="white"/></g><g id="top-antennaCrooked-b3dae8fb"><mask id="topAntennaCrooked-a" style="mask-type:luminance"><path d="M47.54 34.98 43 45.59h-3.74l4.92-10.43-6.05-10.43 3.22-11.84 2.9.8-2.9 10.6z" fill="white"/><rect x="30" y="39.59" width="24" height="13" fill="white"/></mask><g mask="url(#topAntennaCrooked-a)"><path d="M-8 .6H92v52H-8z" fill="#9975ea"/><path d="M-8 6.6H92v52H-8z" fill="white" fill-opacity=".3"/><rect x="30" y="39.59" width="24" height="13" fill="white" fill-opacity=".2"/></g><circle cx="42" cy="8.59" r="8" fill="#FFE65C"/><circle cx="45" cy="5.59" r="3" fill="white"/></g><g id="texture-circuits-b3dae8fb"><path d="M66 36h49.42a5 5 0 1 1 0 4H62V6h4zm-8-12h-4V6h4z" fill="black" fill-opacity=".1"/><path d="M163 31a5 5 0 0 1 2 9.58V66h19v4h-23V40.58a5 5 0 0 1 2-9.58" fill="white" fill-opacity=".2"/><path d="M157 74h27v4h-31V52h4zm-85 26a5 5 0 0 0-2 9.58V135H51v4h23v-29.42a5 5 0 0 0-2-9.58" fill="black" fill-opacity=".2"/></g><g id="head-round02-b3dae8fb"><mask id="headRound02-a" style="mask-type:luminance"><path fill-rule="evenodd" clip-rule="evenodd" d="M0 31v-1c.18-.48.4-1.5 1-3 .83-3.06 2.78-6.56 6-10C16.7 6.6 35.17 0 65 0s48.3 6.6 58 17c3.22 3.44 5.17 6.94 6 10 .6 1.5.82 2.52 1 3v40c0-.1-.03.5 0 1a54 54 0 0 1-1 6c-1.19 6-3.4 11.91-7 17-9.72 16.34-27.74 26-57 26s-47.28-9.66-57-26c-3.6-5.1-5.8-11-7-17a54 54 0 0 1-1-6c.03-.45 0-1.32 0-1z" fill="white"/></mask><g mask="url(#headRound02-a)"><path d="M-4-2h138v124H-4z" fill="#9975ea"/><use transform="translate(-44 -7)" href="#texture-circuits-b3dae8fb"/></g></g><g id="mouth-smile01-b3dae8fb"><path d="M23.05 4.44a2 2 0 1 1 3.9-.88C27.72 6.96 30.4 9 34 9s6.28-2.04 7.05-5.44a2 2 0 1 1 3.9.88C43.75 9.7 39.43 13 34 13s-9.76-3.3-10.95-8.56" fill="black" fill-opacity=".6"/></g><g id="eyes-frame1-b3dae8fb"><rect y="4" width="104" height="42" rx="4" fill="black" fill-opacity=".8"/><rect x="28" y="25" width="10" height="11" rx="2" fill="#8BDDFF"/><rect x="66" y="25" width="10" height="11" rx="2" fill="#8BDDFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M21 4h8L12 46H4z" fill="white" fill-opacity=".4"/></g><clipPath id="clip-b3dae8fb"><rect width="180" height="180" rx="0" ry="0"/></clipPath></defs><g clip-path="url(#clip-b3dae8fb)"><use transform="translate(6 66)" href="#sides-antenna01-b3dae8fb"/><use transform="translate(49 -.6)" href="#top-antennaCrooked-b3dae8fb"/><use transform="translate(25 44)" href="#head-round02-b3dae8fb"/><use transform="translate(56 128)" href="#mouth-smile01-b3dae8fb"/><use transform="translate(38 76)" href="#eyes-frame1-b3dae8fb"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,471 @@
|
||||
(() => {
|
||||
'use strict';
|
||||
|
||||
const exactLabels = new Map([
|
||||
['Code', 'Files'],
|
||||
['Issues', 'Tasks'],
|
||||
['Pull Requests', 'Proposals'],
|
||||
['Pull requests', 'Proposals'],
|
||||
['Actions', 'Evidence'],
|
||||
['Commits', 'Checkpoints'],
|
||||
['Branches', 'Attempts'],
|
||||
['New Issue', 'New Task'],
|
||||
['Create Issue', 'Create Task'],
|
||||
['New Pull Request', 'New Proposal'],
|
||||
['Create Pull Request', 'Create Proposal'],
|
||||
['Merge Pull Request', 'Accept Proposal'],
|
||||
['Compare & pull request', 'Review as Proposal'],
|
||||
]);
|
||||
|
||||
const phraseLabels = [
|
||||
[/\bPull Requests\b/g, 'Proposals'],
|
||||
[/\bPull requests\b/g, 'Proposals'],
|
||||
[/\bpull requests\b/g, 'proposals'],
|
||||
[/\bNew Issue\b/g, 'New Task'],
|
||||
[/\bnew issue\b/g, 'new task'],
|
||||
[/\bIssues\b/g, 'Tasks'],
|
||||
[/\bissues\b/g, 'tasks'],
|
||||
[/\bActions\b/g, 'Evidence'],
|
||||
[/\bCommits\b/g, 'Checkpoints'],
|
||||
[/\bBranches\b/g, 'Attempts'],
|
||||
];
|
||||
|
||||
const semanticRoots = [
|
||||
'#navbar',
|
||||
'.secondary-nav',
|
||||
'[role="main"] .ui.header',
|
||||
'[role="main"] h1',
|
||||
'[role="main"] h2',
|
||||
'[role="main"] h3',
|
||||
'[role="main"] .ui.button',
|
||||
'[role="main"] .menu',
|
||||
'[role="main"] .breadcrumb',
|
||||
'[role="main"] label',
|
||||
].join(',');
|
||||
|
||||
function replaceExactText(root) {
|
||||
const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);
|
||||
const nodes = [];
|
||||
while (walker.nextNode()) nodes.push(walker.currentNode);
|
||||
|
||||
for (const node of nodes) {
|
||||
const original = node.nodeValue;
|
||||
const trimmed = original.trim();
|
||||
const replacement = exactLabels.get(trimmed);
|
||||
if (!replacement) continue;
|
||||
node.nodeValue = original.replace(trimmed, replacement);
|
||||
}
|
||||
}
|
||||
|
||||
function replacePhrases(value) {
|
||||
let result = value;
|
||||
for (const [pattern, replacement] of phraseLabels) {
|
||||
result = result.replace(pattern, replacement);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function replaceAccessibleLabels(root) {
|
||||
const attributes = ['aria-label', 'data-text', 'data-tooltip-content', 'placeholder', 'title'];
|
||||
for (const element of root.querySelectorAll('[aria-label], [data-text], [data-tooltip-content], [placeholder], [title]')) {
|
||||
for (const attribute of attributes) {
|
||||
const value = element.getAttribute(attribute);
|
||||
if (!value) continue;
|
||||
const replacement = replacePhrases(value);
|
||||
if (replacement !== value) element.setAttribute(attribute, replacement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function repoNavigation() {
|
||||
return document.querySelector('.secondary-nav .overflow-menu-items');
|
||||
}
|
||||
|
||||
function navigationLink(suffix) {
|
||||
const navigation = repoNavigation();
|
||||
if (!navigation) return null;
|
||||
return [...navigation.querySelectorAll(':scope > a.item')].find((link) => {
|
||||
const path = new URL(link.href, window.location.origin).pathname.replace(/\/$/, '');
|
||||
return path.endsWith(suffix);
|
||||
}) || null;
|
||||
}
|
||||
|
||||
function repositoryPath() {
|
||||
const issues = navigationLink('/issues');
|
||||
if (issues) return new URL(issues.href, window.location.origin).pathname.replace(/\/issues$/, '');
|
||||
const match = window.location.pathname.match(/^\/[^/]+\/[^/]+/);
|
||||
return match ? match[0].replace(/\/$/, '') : null;
|
||||
}
|
||||
|
||||
function promptsHref() {
|
||||
const path = repositoryPath();
|
||||
return path ? `${path}/issues?hop=prompts` : null;
|
||||
}
|
||||
|
||||
function promptsPage() {
|
||||
return new URLSearchParams(window.location.search).get('hop') === 'prompts';
|
||||
}
|
||||
|
||||
function promptsIcon() {
|
||||
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
svg.setAttribute('viewBox', '0 0 16 16');
|
||||
svg.setAttribute('width', '16');
|
||||
svg.setAttribute('height', '16');
|
||||
svg.setAttribute('aria-hidden', 'true');
|
||||
const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
||||
path.setAttribute('fill', 'currentColor');
|
||||
path.setAttribute('d', 'M2 2.75A1.75 1.75 0 0 1 3.75 1h8.5A1.75 1.75 0 0 1 14 2.75v6.5A1.75 1.75 0 0 1 12.25 11H7.6l-2.82 2.1A.5.5 0 0 1 4 12.7V11h-.25A1.75 1.75 0 0 1 2 9.25Zm1.75-.75a.75.75 0 0 0-.75.75v6.5c0 .414.336.75.75.75H4.5a.5.5 0 0 1 .5.5v1.2l2.15-1.6A.5.5 0 0 1 7.45 10h4.8a.75.75 0 0 0 .75-.75v-6.5a.75.75 0 0 0-.75-.75Z');
|
||||
svg.append(path);
|
||||
return svg;
|
||||
}
|
||||
|
||||
function addPromptsNavigation() {
|
||||
const navigation = repoNavigation();
|
||||
const tasks = navigationLink('/issues');
|
||||
const href = promptsHref();
|
||||
if (!navigation || !tasks || !href) return;
|
||||
|
||||
let link = navigation.querySelector('.hop-native-prompts-tab');
|
||||
if (!link) {
|
||||
link = document.createElement('a');
|
||||
link.className = tasks.className;
|
||||
link.classList.add('hop-native-prompts-tab');
|
||||
link.append(promptsIcon());
|
||||
link.append(document.createTextNode('Prompts'));
|
||||
navigation.insertBefore(link, tasks);
|
||||
}
|
||||
link.href = href;
|
||||
link.setAttribute('aria-label', 'Prompts');
|
||||
link.classList.toggle('active', promptsPage());
|
||||
if (promptsPage()) tasks.classList.remove('active');
|
||||
}
|
||||
|
||||
function workflowLink(source, label) {
|
||||
if (!source) return null;
|
||||
const link = document.createElement('a');
|
||||
link.className = 'flex-text-block muted';
|
||||
link.href = source.href;
|
||||
link.setAttribute('aria-label', label);
|
||||
|
||||
const icon = source.querySelector('svg');
|
||||
if (icon) link.append(icon.cloneNode(true));
|
||||
link.append(document.createTextNode(` ${label}`));
|
||||
|
||||
const count = source.querySelector('.ui.label');
|
||||
if (count) link.append(count.cloneNode(true));
|
||||
return link;
|
||||
}
|
||||
|
||||
function addWorkflowSummary() {
|
||||
const sidebar = document.querySelector('.repo-home-sidebar-top');
|
||||
if (!sidebar || sidebar.querySelector('.hop-native-workflow')) return;
|
||||
|
||||
const links = [
|
||||
workflowLink(document.querySelector('.hop-native-prompts-tab'), 'Prompts'),
|
||||
workflowLink(navigationLink('/issues'), 'Tasks'),
|
||||
workflowLink(navigationLink('/pulls'), 'Proposals'),
|
||||
workflowLink(navigationLink('/actions'), 'Evidence'),
|
||||
].filter(Boolean);
|
||||
if (!links.length) return;
|
||||
|
||||
const list = document.createElement('div');
|
||||
list.className = 'flex-list hop-native-workflow';
|
||||
|
||||
const item = document.createElement('div');
|
||||
item.className = 'flex-item';
|
||||
const main = document.createElement('div');
|
||||
main.className = 'flex-item-main';
|
||||
const title = document.createElement('div');
|
||||
title.className = 'flex-item-title';
|
||||
title.textContent = 'Hop workflow';
|
||||
const body = document.createElement('div');
|
||||
body.className = 'flex-item-body tw-text-15';
|
||||
const linkList = document.createElement('div');
|
||||
linkList.className = 'tw-flex tw-flex-col tw-gap-2 tw-mt-2';
|
||||
for (const link of links) linkList.append(link);
|
||||
|
||||
body.append(linkList);
|
||||
main.append(title, body);
|
||||
item.append(main);
|
||||
list.append(item);
|
||||
sidebar.prepend(list);
|
||||
}
|
||||
|
||||
function makeElement(tag, className, text) {
|
||||
const element = document.createElement(tag);
|
||||
if (className) element.className = className;
|
||||
if (text !== undefined) element.textContent = text;
|
||||
return element;
|
||||
}
|
||||
|
||||
function formatTime(value) {
|
||||
if (!value) return '';
|
||||
const date = new Date(value);
|
||||
return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
|
||||
}
|
||||
|
||||
function promptFact(list, label, value) {
|
||||
if (!value) return;
|
||||
const row = document.createElement('div');
|
||||
row.append(makeElement('dt', '', label), makeElement('dd', '', String(value)));
|
||||
list.append(row);
|
||||
}
|
||||
|
||||
function promptDetails(prompt) {
|
||||
const body = makeElement('div', 'hop-prompt__body');
|
||||
const record = document.createElement('div');
|
||||
record.append(makeElement('h2', '', 'Captured request'));
|
||||
record.append(makeElement('pre', '', prompt.prompt));
|
||||
if (prompt.response_summary) {
|
||||
record.append(makeElement('h2', 'hop-prompt__outcome-heading', 'Proposal outcome'));
|
||||
record.append(makeElement('div', 'hop-prompt__response', prompt.response_summary));
|
||||
}
|
||||
|
||||
const facts = document.createElement('dl');
|
||||
facts.className = 'hop-prompt__facts';
|
||||
promptFact(facts, 'State', prompt.state_id);
|
||||
promptFact(facts, 'Task', prompt.task_id);
|
||||
promptFact(facts, 'Attempt', prompt.attempt_id);
|
||||
promptFact(facts, 'Agent', [prompt.agent_name, prompt.agent_model].filter(Boolean).join(' · '));
|
||||
promptFact(facts, 'Captured', formatTime(prompt.created_at));
|
||||
promptFact(facts, 'Completed', formatTime(prompt.completed_at));
|
||||
if (prompt.metadata && typeof prompt.metadata === 'object') {
|
||||
Object.entries(prompt.metadata).slice(0, 8).forEach(([key, value]) => {
|
||||
if (value === null || typeof value === 'object') return;
|
||||
promptFact(facts, key.replace(/_/g, ' '), value);
|
||||
});
|
||||
}
|
||||
body.append(record, facts);
|
||||
return body;
|
||||
}
|
||||
|
||||
function promptRow(prompt) {
|
||||
const details = document.createElement('details');
|
||||
details.className = 'hop-prompt';
|
||||
const summary = document.createElement('summary');
|
||||
const request = makeElement('div', 'hop-prompt__request', prompt.prompt);
|
||||
request.title = prompt.prompt;
|
||||
const meta = makeElement('div', 'hop-prompt__meta');
|
||||
const status = makeElement('span', 'hop-prompt__status', prompt.status || 'running');
|
||||
status.dataset.status = prompt.status || 'running';
|
||||
meta.append(status);
|
||||
const agent = [prompt.agent_name, prompt.agent_model].filter(Boolean).join(' · ');
|
||||
meta.append(document.createTextNode(agent || formatTime(prompt.created_at)));
|
||||
summary.append(request, meta);
|
||||
details.append(summary, promptDetails(prompt));
|
||||
return details;
|
||||
}
|
||||
|
||||
async function portablePromptRecords(path) {
|
||||
const [owner, repo] = path.slice(1).split('/');
|
||||
let branches = ['main', 'master'];
|
||||
try {
|
||||
const repository = await fetch(`/api/v1/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`, {credentials: 'same-origin'});
|
||||
if (repository.ok) {
|
||||
const payload = await repository.json();
|
||||
if (payload.default_branch) branches = [payload.default_branch, ...branches.filter((branch) => branch !== payload.default_branch)];
|
||||
}
|
||||
} catch (_) {
|
||||
// The raw-file fallback below still works for the common default branches.
|
||||
}
|
||||
|
||||
for (const branch of branches) {
|
||||
const treeResponse = await fetch(`/api/v1/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/git/trees/${encodeURIComponent(branch)}?recursive=true`, {credentials: 'same-origin'});
|
||||
if (treeResponse.status === 404) continue;
|
||||
if (!treeResponse.ok) throw new Error('Could not inspect the published prompt records');
|
||||
const tree = await treeResponse.json();
|
||||
const records = (Array.isArray(tree.tree) ? tree.tree : [])
|
||||
.filter((entry) => entry.type === 'blob' && /^\.hop\/records\/prompts\/[^/]+\.json$/.test(entry.path));
|
||||
if (!records.length) return [];
|
||||
const prompts = await Promise.all(records.map(async (entry) => {
|
||||
const recordPath = entry.path.split('/').map(encodeURIComponent).join('/');
|
||||
const response = await fetch(`${path}/raw/branch/${encodeURIComponent(branch)}/${recordPath}`, {credentials: 'same-origin'});
|
||||
if (!response.ok) throw new Error('Could not load a published prompt record');
|
||||
return response.json();
|
||||
}));
|
||||
return prompts
|
||||
.filter((prompt) => prompt.status !== 'active' && prompt.status !== 'running')
|
||||
.sort((left, right) => String(right.created_at).localeCompare(String(left.created_at)));
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
function renderPromptPage() {
|
||||
if (!promptsPage()) return;
|
||||
const main = document.querySelector('[role="main"].page-content.repository.issue-list');
|
||||
const path = repositoryPath();
|
||||
if (!main || !path || main.dataset.hopPromptsRendered === 'true') return;
|
||||
main.dataset.hopPromptsRendered = 'true';
|
||||
main.setAttribute('aria-label', 'Prompts');
|
||||
const navigation = main.querySelector(':scope > .secondary-nav');
|
||||
for (const child of [...main.children]) {
|
||||
if (child !== navigation) child.remove();
|
||||
}
|
||||
|
||||
const page = makeElement('section', 'hop-prompts');
|
||||
page.setAttribute('aria-labelledby', 'hop-prompts-title');
|
||||
const header = makeElement('header', 'hop-prompts__header');
|
||||
const heading = document.createElement('div');
|
||||
heading.append(
|
||||
makeElement('p', 'hop-prompts__eyebrow', 'Hop causal record'),
|
||||
makeElement('h1', '', 'Prompts'),
|
||||
makeElement('p', 'hop-prompts__lede', 'Review what you requested, which agent acted, and the proposal that resulted. Internal agent instructions are not published.'),
|
||||
);
|
||||
heading.querySelector('h1').id = 'hop-prompts-title';
|
||||
const refresh = makeElement('button', 'ui button hop-prompts__refresh', 'Refresh');
|
||||
refresh.type = 'button';
|
||||
header.append(heading, refresh);
|
||||
const status = makeElement('p', 'hop-prompts__status', 'Loading prompt records…');
|
||||
status.setAttribute('role', 'status');
|
||||
page.append(header, status);
|
||||
main.append(page);
|
||||
document.title = `Prompts - ${path.slice(1).replace('/', ' / ')} - Hop`;
|
||||
|
||||
const load = async () => {
|
||||
status.textContent = 'Loading prompt records…';
|
||||
page.querySelector('.hop-prompt-list, .hop-prompts__empty')?.remove();
|
||||
try {
|
||||
const prompts = await portablePromptRecords(path);
|
||||
if (!prompts.length) {
|
||||
status.textContent = 'No published prompt records';
|
||||
const empty = makeElement('div', 'hop-prompts__empty');
|
||||
empty.append(
|
||||
makeElement('strong', '', 'No prompts have been published yet.'),
|
||||
document.createTextNode('Hop publishes an immutable record for each prompt when it creates a proposal. Those files travel with the repository and appear here after the push.'),
|
||||
);
|
||||
page.append(empty);
|
||||
return;
|
||||
}
|
||||
status.textContent = prompts.length === 1 ? '1 captured request' : `${prompts.length} captured requests`;
|
||||
if (!prompts.length) {
|
||||
const empty = makeElement('div', 'hop-prompts__empty');
|
||||
empty.append(
|
||||
makeElement('strong', '', 'The published prompt record set is empty.'),
|
||||
document.createTextNode('Capture work through Hop and create a proposal to publish its prompt records.'),
|
||||
);
|
||||
page.append(empty);
|
||||
return;
|
||||
}
|
||||
const list = makeElement('div', 'hop-prompt-list');
|
||||
prompts.forEach((prompt) => list.append(promptRow(prompt)));
|
||||
page.append(list);
|
||||
} catch (error) {
|
||||
status.textContent = error.message || 'Could not load prompt records.';
|
||||
}
|
||||
};
|
||||
refresh.addEventListener('click', load);
|
||||
load();
|
||||
}
|
||||
|
||||
async function copyToClipboard(value) {
|
||||
if (navigator.clipboard?.writeText) {
|
||||
try {
|
||||
await navigator.clipboard.writeText(value);
|
||||
return true;
|
||||
} catch {
|
||||
// Fall back for browsers that block clipboard access outside a secure context.
|
||||
}
|
||||
}
|
||||
|
||||
const input = document.createElement('textarea');
|
||||
input.value = value;
|
||||
input.setAttribute('readonly', '');
|
||||
input.style.position = 'fixed';
|
||||
input.style.opacity = '0';
|
||||
document.body.append(input);
|
||||
input.select();
|
||||
input.setSelectionRange(0, value.length);
|
||||
const copied = document.execCommand('copy');
|
||||
input.remove();
|
||||
return copied;
|
||||
}
|
||||
|
||||
function bindInstallationSwitchers() {
|
||||
for (const switcher of document.querySelectorAll('.hop-agent-install-shell')) {
|
||||
if (switcher.dataset.hopInstallBound === 'true') continue;
|
||||
switcher.dataset.hopInstallBound = 'true';
|
||||
const buttons = [...switcher.querySelectorAll('[data-hop-install-command]')];
|
||||
const output = switcher.querySelector('[data-hop-install-command-output]');
|
||||
const copyButton = switcher.querySelector('[data-hop-copy]');
|
||||
const status = copyButton ? document.getElementById(copyButton.getAttribute('aria-describedby')) : null;
|
||||
for (const button of buttons) {
|
||||
button.addEventListener('click', () => {
|
||||
for (const option of buttons) option.setAttribute('aria-pressed', String(option === button));
|
||||
if (output) output.textContent = button.dataset.hopInstallCommand;
|
||||
if (copyButton) copyButton.setAttribute('aria-label', `Copy ${button.dataset.hopInstallPlatform} installation command`);
|
||||
if (status) status.textContent = '';
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bindInstallationCopyButtons() {
|
||||
for (const button of document.querySelectorAll('[data-hop-copy]')) {
|
||||
if (button.dataset.hopCopyBound === 'true') continue;
|
||||
button.dataset.hopCopyBound = 'true';
|
||||
button.addEventListener('click', async () => {
|
||||
const command = button.closest('.hop-agent-install-command')?.querySelector('code')?.textContent?.trim();
|
||||
const status = document.getElementById(button.getAttribute('aria-describedby'));
|
||||
if (!command) return;
|
||||
|
||||
button.disabled = true;
|
||||
button.textContent = 'Copying…';
|
||||
const copied = await copyToClipboard(command);
|
||||
button.disabled = false;
|
||||
button.textContent = copied ? 'Copied' : 'Retry';
|
||||
if (status) status.textContent = copied ? 'Command copied to clipboard.' : 'Could not copy automatically. Select the command and copy it.';
|
||||
|
||||
window.setTimeout(() => {
|
||||
button.textContent = 'Copy';
|
||||
if (status) status.textContent = '';
|
||||
}, 2400);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function replaceBrandImages() {
|
||||
const upstreamBrandAsset = /\/img\/(?:avatar_default\.png|logo\.png|logo\.svg)(?:\?.*)?$/;
|
||||
for (const image of document.querySelectorAll('img[src]')) {
|
||||
if (!upstreamBrandAsset.test(image.src)) continue;
|
||||
image.src = image.src.replace(upstreamBrandAsset, '/img/hop.svg?v=4');
|
||||
}
|
||||
}
|
||||
|
||||
function removeHelpNavigation() {
|
||||
for (const link of document.querySelectorAll('#navbar a[href*="docs.gitea.com"]')) {
|
||||
if (link.textContent.trim() === 'Help') link.remove();
|
||||
}
|
||||
}
|
||||
|
||||
function applyHopSemantics() {
|
||||
const brandLogo = document.querySelector('#navbar-logo img');
|
||||
if (brandLogo) brandLogo.src = brandLogo.src.replace(/\/img\/(?:logo|hop)\.svg(?:\?.*)?$/, '/img/hop.svg?v=4');
|
||||
replaceBrandImages();
|
||||
removeHelpNavigation();
|
||||
for (const root of document.querySelectorAll(semanticRoots)) replaceExactText(root);
|
||||
replaceAccessibleLabels(document);
|
||||
addPromptsNavigation();
|
||||
addWorkflowSummary();
|
||||
renderPromptPage();
|
||||
bindInstallationSwitchers();
|
||||
bindInstallationCopyButtons();
|
||||
const title = replacePhrases(document.title);
|
||||
if (title !== document.title) document.title = title;
|
||||
document.documentElement.dataset.hopNative = 'true';
|
||||
}
|
||||
|
||||
let queued = false;
|
||||
function queueApply() {
|
||||
if (queued) return;
|
||||
queued = true;
|
||||
window.requestAnimationFrame(() => {
|
||||
queued = false;
|
||||
applyHopSemantics();
|
||||
});
|
||||
}
|
||||
|
||||
applyHopSemantics();
|
||||
document.addEventListener('DOMContentLoaded', queueApply);
|
||||
document.addEventListener('htmx:afterSwap', queueApply);
|
||||
new MutationObserver(queueApply).observe(document.documentElement, {childList: true, subtree: true});
|
||||
})();
|
||||
@@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ctx.Locale.Lang}}" data-theme="{{ctx.CurrentWebTheme.InternalName}}">
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{if .Title}}{{.Title}} - {{end}}{{.PageTitleCommon}}</title>
|
||||
{{if .ManifestData}}<link rel="manifest" href="data:{{.ManifestData}}">{{end}}
|
||||
<meta name="author" content="{{if .Repository}}{{.Owner.Name}}{{else}}{{MetaAuthor}}{{end}}">
|
||||
<meta name="description" content="{{if .Repository}}{{.Repository.Name}}{{if .Repository.Description}} - {{.Repository.Description}}{{end}}{{else}}{{MetaDescription}}{{end}}">
|
||||
<meta name="keywords" content="{{MetaKeywords}}">
|
||||
<meta name="referrer" content="same-origin">{{/* required by: 1. "redirect_to" cookie; 2. cross-origin protection */}}
|
||||
{{if .GoGetImport}}
|
||||
<meta name="go-import" content="{{.GoGetImport}} git {{.RepoCloneLink.HTTPS}}">
|
||||
<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}">
|
||||
{{end}}
|
||||
{{if and .EnableFeed .FeedURL}}
|
||||
<link rel="alternate" type="application/atom+xml" title="" href="{{.FeedURL}}.atom">
|
||||
<link rel="alternate" type="application/rss+xml" title="" href="{{.FeedURL}}.rss">
|
||||
{{end}}
|
||||
<link rel="icon" href="{{AssetUrlPrefix}}/img/hop.svg?v=5" type="image/svg+xml">
|
||||
<link rel="alternate icon" href="{{AssetUrlPrefix}}/img/favicon.png?v=5" type="image/png">
|
||||
{{template "base/head_opengraph" .}}
|
||||
{{template "base/head_style" .}}
|
||||
{{template "base/head_script" .}}
|
||||
{{template "custom/header" .}}
|
||||
</head>
|
||||
<body hx-swap="outerHTML" hx-ext="morph" hx-push-url="false">
|
||||
{{template "custom/body_outer_pre" .}}
|
||||
|
||||
<div class="full height">
|
||||
<noscript>{{ctx.Locale.Tr "enable_javascript"}}</noscript>
|
||||
|
||||
{{template "custom/body_inner_pre" .}}
|
||||
|
||||
{{if not .PageIsInstall}}
|
||||
{{template "base/head_navbar" .}}
|
||||
{{end}}
|
||||
|
||||
{{if false}}
|
||||
{{/* to make html structure "likely" complete to prevent IDE warnings */}}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
{{end}}
|
||||
@@ -0,0 +1,3 @@
|
||||
<link rel="stylesheet" href="{{AssetUrlPrefix}}/css/hop-home.css?v=4">
|
||||
<link rel="stylesheet" href="{{AssetUrlPrefix}}/css/hop-prompts.css?v=3">
|
||||
<script src="{{AssetUrlPrefix}}/js/hop-native-v14.js?v=1"></script>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user