From 7e05d0a4e7f838446fd642fe8d74d60c1a5dbbb5 Mon Sep 17 00:00:00 2001 From: npc0-hue Date: Sat, 11 Jul 2026 14:56:10 +0800 Subject: [PATCH] first commit --- AGENTS.md | 91 + README.md | 192 + docker-compose.yml | 90 + docs/local-debug-workspace.md | 171 + go_build_main_go | 1 + main | Bin 0 -> 5016434 bytes .../add-local-docker-deployment/design.md | 32 + .../add-local-docker-deployment/proposal.md | 19 + .../specs/local-docker-deployment/spec.md | 37 + .../add-local-docker-deployment/tasks.md | 22 + .../design.md | 36 + .../proposal.md | 20 + .../mysql-platform-metadata-storage/spec.md | 45 + .../tasks.md | 23 + .../.openspec.yaml | 2 + .../NEXT_CHANGE.md | 55 + .../delivery-plan.md | 123 + .../architecture-delivery-stream/design.md | 94 + .../architecture-delivery-stream/proposal.md | 26 + .../architecture-delivery-workflow/spec.md | 67 + .../architecture-delivery-stream/tasks.md | 27 + .../.openspec.yaml | 2 + .../design.md | 111 + .../proposal.md | 34 + .../specs/game-plugin-system/spec.md | 44 + .../specs/game-server-platform-core/spec.md | 48 + .../specs/platform-web-console/spec.md | 36 + .../project-workspace-governance/spec.md | 45 + .../specs/run-execution-channel/spec.md | 52 + .../tasks.md | 43 + .../.openspec.yaml | 2 + .../design.md | 75 + .../proposal.md | 26 + .../development-runtime-baseline/spec.md | 67 + .../tasks.md | 75 + .../fix-env-profile-settings/.openspec.yaml | 2 + .../fix-env-profile-settings/design.md | 51 + .../fix-env-profile-settings/proposal.md | 30 + .../specs/personal-settings-workspace/spec.md | 34 + .../specs/platform-env-bootstrap/spec.md | 23 + .../changes/fix-env-profile-settings/tasks.md | 31 + .../.openspec.yaml | 2 + .../fix-platform-auth-session-api/design.md | 16 + .../fix-platform-auth-session-api/proposal.md | 17 + .../specs/platform-auth-session/spec.md | 56 + .../fix-platform-auth-session-api/tasks.md | 21 + .../.openspec.yaml | 2 + .../design.md | 66 + .../proposal.md | 25 + .../log-artifact-channel-isolation/spec.md | 56 + .../tasks.md | 56 + .../.openspec.yaml | 2 + .../design.md | 77 + .../proposal.md | 28 + .../specs/ai-provider-management/spec.md | 79 + .../implement-ai-provider-management/tasks.md | 36 + .../.openspec.yaml | 2 + .../design.md | 61 + .../proposal.md | 28 + .../spec.md | 57 + .../tasks.md | 46 + .../.openspec.yaml | 2 + .../design.md | 86 + .../proposal.md | 29 + .../specs/artifact-transfer-channel/spec.md | 65 + .../tasks.md | 35 + .../.openspec.yaml | 2 + .../design.md | 77 + .../proposal.md | 26 + .../specs/browser-acceptance-suite/spec.md | 68 + .../tasks.md | 65 + .../.openspec.yaml | 2 + .../design.md | 59 + .../proposal.md | 28 + .../config-write-and-file-dispatch/spec.md | 45 + .../tasks.md | 58 + .../.openspec.yaml | 2 + .../design.md | 62 + .../proposal.md | 26 + .../specs/durable-platform-storage/spec.md | 57 + .../tasks.md | 25 + .../.openspec.yaml | 2 + .../implement-local-debug-workspace/design.md | 66 + .../proposal.md | 26 + .../specs/local-debug-workspace/spec.md | 67 + .../implement-local-debug-workspace/tasks.md | 83 + .../.openspec.yaml | 2 + .../implement-log-ingest-pipeline/design.md | 81 + .../implement-log-ingest-pipeline/proposal.md | 29 + .../specs/log-ingest-pipeline/spec.md | 74 + .../implement-log-ingest-pipeline/tasks.md | 35 + .../.openspec.yaml | 2 + .../implement-platform-api-surface/design.md | 79 + .../proposal.md | 30 + .../specs/platform-api-surface/spec.md | 82 + .../implement-platform-api-surface/tasks.md | 30 + .../.openspec.yaml | 2 + .../implement-platform-core-domain/design.md | 79 + .../proposal.md | 28 + .../specs/platform-core-domain/spec.md | 85 + .../implement-platform-core-domain/tasks.md | 34 + .../.openspec.yaml | 2 + .../design.md | 67 + .../proposal.md | 28 + .../platform-mediated-ai-invocation/spec.md | 65 + .../tasks.md | 41 + .../.openspec.yaml | 2 + .../design.md | 62 + .../proposal.md | 27 + .../spec.md | 53 + .../tasks.md | 51 + .../.openspec.yaml | 2 + .../design.md | 71 + .../proposal.md | 27 + .../specs/platform-web-console-shell/spec.md | 91 + .../tasks.md | 40 + .../.openspec.yaml | 2 + .../implement-plugin-bridge-and-sdk/design.md | 83 + .../proposal.md | 28 + .../specs/plugin-bridge-and-sdk/spec.md | 76 + .../implement-plugin-bridge-and-sdk/tasks.md | 38 + .../.openspec.yaml | 2 + .../design.md | 60 + .../proposal.md | 27 + .../plugin-marketplace-api-driven-ui/spec.md | 57 + .../tasks.md | 42 + .../.openspec.yaml | 2 + .../design.md | 60 + .../proposal.md | 27 + .../plugin-page-bridge-execution/spec.md | 61 + .../tasks.md | 46 + .../.openspec.yaml | 2 + .../design.md | 68 + .../proposal.md | 27 + .../spec.md | 52 + .../tasks.md | 68 + .../.openspec.yaml | 2 + .../design.md | 80 + .../proposal.md | 29 + .../real-game-plugin-lifecycle-proof/spec.md | 56 + .../tasks.md | 92 + .../.openspec.yaml | 2 + .../design.md | 49 + .../proposal.md | 25 + .../specs/role-scoped-server-access/spec.md | 72 + .../tasks.md | 19 + .../.openspec.yaml | 2 + .../design.md | 79 + .../proposal.md | 28 + .../specs/run-control-registration/spec.md | 71 + .../tasks.md | 34 + .../implement-run-job-channel/.openspec.yaml | 2 + .../implement-run-job-channel/design.md | 78 + .../implement-run-job-channel/proposal.md | 28 + .../specs/run-job-channel/spec.md | 104 + .../implement-run-job-channel/tasks.md | 35 + .../.openspec.yaml | 2 + .../design.md | 58 + .../proposal.md | 28 + .../specs/run-worker-real-execution/spec.md | 45 + .../tasks.md | 56 + .../implement-scum-server-plugin/design.md | 38 + .../implement-scum-server-plugin/proposal.md | 22 + .../specs/scum-server-plugin/spec.md | 22 + .../implement-scum-server-plugin/tasks.md | 50 + .../.openspec.yaml | 2 + .../design.md | 87 + .../proposal.md | 29 + .../specs/server-management-workflows/spec.md | 79 + .../tasks.md | 43 + .../.openspec.yaml | 2 + .../design.md | 67 + .../proposal.md | 28 + .../spec.md | 80 + .../tasks.md | 57 + .../polish-theme-frame-accessories/design.md | 35 + .../proposal.md | 34 + .../platform-web-theme-accessories/spec.md | 72 + .../polish-theme-frame-accessories/tasks.md | 37 + .../.openspec.yaml | 2 + .../design.md | 114 + .../proposal.md | 34 + .../operation-feedback-and-safety/spec.md | 93 + .../role-aware-platform-workspace/spec.md | 71 + .../server-plugin-control-workspace/spec.md | 78 + .../specs/user-identity-and-profile/spec.md | 108 + .../tasks.md | 64 + .../.openspec.yaml | 2 + .../design.md | 81 + .../proposal.md | 38 + .../specs/platform-web-theme-menu/spec.md | 64 + .../tasks.md | 12 + .../.openspec.yaml | 2 + .../design.md | 82 + .../proposal.md | 28 + .../serial-openspec-delivery-queue/spec.md | 71 + .../tasks.md | 28 + .../.openspec.yaml | 2 + .../design.md | 26 + .../proposal.md | 28 + .../implemented-documentation-sync/spec.md | 23 + .../tasks.md | 16 + .../.openspec.yaml | 2 + .../design.md | 85 + .../proof-report.md | 97 + .../proposal.md | 27 + .../current-platform-e2e-baseline/spec.md | 64 + .../tasks.md | 59 + openspec/config.yaml | 20 + package-lock.json | 1374 ++++++ package.json | 5 + platform/.env | 20 + platform/.env.example | 20 + platform/.platform-data/metadata.json | 64 + platform/AGENTS.md | 26 + platform/Dockerfile | 24 + platform/README.md | 76 + .../api/artifact_download_handlers_test.go | 177 + .../api/artifact_transfer_handlers_test.go | 144 + .../api/channel_isolation_handlers_test.go | 241 ++ platform/api/control_handlers_test.go | 113 + platform/api/health_handler.go | 32 + platform/api/health_handler_test.go | 41 + platform/api/job_channel_handlers_test.go | 160 + platform/api/json.go | 81 + platform/api/log_ingest_handlers_test.go | 106 + platform/api/resource_handlers.go | 2068 +++++++++ platform/api/resource_handlers_test.go | 1422 ++++++ platform/api/router.go | 74 + platform/api/routes.md | 201 + platform/api/server_lifecycle_handlers.go | 100 + platform/cmd/platform/main.go | 31 + platform/config/config.go | 130 + platform/config/config_test.go | 122 + platform/domain/ai_invocation.go | 71 + platform/domain/artifact_download.go | 84 + platform/domain/artifact_transfer.go | 187 + platform/domain/control.go | 81 + platform/domain/job_channel.go | 193 + platform/domain/log_ingest.go | 93 + platform/domain/resources.go | 816 ++++ platform/domain/resources.md | 130 + platform/domain/resources_test.go | 36 + platform/domain/server_lifecycle.go | 64 + platform/dto/README.md | 15 + platform/dto/ai_invocation.go | 108 + platform/dto/artifact_download.go | 88 + platform/dto/artifact_transfer.go | 201 + platform/dto/control.go | 98 + platform/dto/health.go | 8 + platform/dto/job_channel.go | 317 ++ platform/dto/log_ingest.go | 147 + platform/dto/resources.go | 1498 +++++++ platform/dto/resources_test.go | 112 + platform/dto/server_lifecycle.go | 53 + platform/go.mod | 8 + platform/go.sum | 4 + platform/main | Bin 0 -> 9142354 bytes platform/model/README.md | 17 + platform/model/resources.go | 677 +++ platform/model/resources_test.go | 100 + .../download/filippo.io/edwards25519/@v/list | 1 + .../filippo.io/edwards25519/@v/v1.2.0.info | 1 + .../filippo.io/edwards25519/@v/v1.2.0.lock | 0 .../filippo.io/edwards25519/@v/v1.2.0.mod | 3 + .../filippo.io/edwards25519/@v/v1.2.0.zip | Bin 0 -> 56057 bytes .../filippo.io/edwards25519/@v/v1.2.0.ziphash | 1 + .../github.com/go-sql-driver/mysql/@v/list | 1 + .../go-sql-driver/mysql/@v/v1.10.0.info | 1 + .../go-sql-driver/mysql/@v/v1.10.0.lock | 0 .../go-sql-driver/mysql/@v/v1.10.0.mod | 5 + .../go-sql-driver/mysql/@v/v1.10.0.zip | Bin 0 -> 140215 bytes .../go-sql-driver/mysql/@v/v1.10.0.ziphash | 1 + ...d901cb8141ec90c971c1cc6402f50aa5ff099.info | 1 + ...d901cb8141ec90c971c1cc6402f50aa5ff099.lock | 0 .../FETCH_HEAD | 1 + .../HEAD | 1 + .../config | 9 + .../description | 1 + .../hooks/applypatch-msg.sample | 15 + .../hooks/commit-msg.sample | 24 + .../hooks/fsmonitor-watchman.sample | 174 + .../hooks/post-update.sample | 8 + .../hooks/pre-applypatch.sample | 14 + .../hooks/pre-commit.sample | 49 + .../hooks/pre-merge-commit.sample | 13 + .../hooks/pre-push.sample | 53 + .../hooks/pre-rebase.sample | 169 + .../hooks/pre-receive.sample | 24 + .../hooks/prepare-commit-msg.sample | 42 + .../hooks/push-to-checkout.sample | 78 + .../hooks/sendemail-validate.sample | 77 + .../hooks/update.sample | 128 + .../info/attributes | 2 + .../info/exclude | 6 + .../00/bf8f4479225b29048dec9f1d899c242f6bfef9 | 2 + .../0c/81239458d04a1f5d84cacdd3f1af36a082004b | Bin 0 -> 1146 bytes .../1e/f503b9a2ff52bdf9f0b2c57ad930ffec668c3b | Bin 0 -> 972 bytes .../2e/5782b6058c535c1b84651ba74ebd1eb05b9652 | Bin 0 -> 8788 bytes .../3b/b606b1df622d6d2c69fbaefb024c887a204bd8 | Bin 0 -> 117 bytes .../48/3bba883964dc78c043f7d68b592e7a44a3715b | Bin 0 -> 414 bytes .../4a/00c79ace52bfc930a7f50699b69e9c50764e5e | Bin 0 -> 1659 bytes .../4a/2b54ebadf285c9b2c363fd5050235a15fcc3a7 | Bin 0 -> 1149 bytes .../4b/81f25d1d0f5336d8c4af79fe6e7b2c063d9740 | 2 + .../4d/52cc10d1900a915e17ca7b8096b63ce27451c5 | Bin 0 -> 4603 bytes .../5e/06e242ed8e92221ebef566714201d7f39182d3 | Bin 0 -> 1440 bytes .../66/5058ee887fd1584b32c20937259d1434bfcee8 | Bin 0 -> 2350 bytes .../6a/66aea5eafe0ca6a688840c47219556c552488e | Bin 0 -> 811 bytes .../76/e920a2feb2e22239934fdfd1d3f1b369b0c375 | Bin 0 -> 2953 bytes .../7d/8bea03a80e6d5575e731a18eb26fedb585df57 | Bin 0 -> 501 bytes .../8c/d865de788cc2cb12f7f428f679432c2213c224 | Bin 0 -> 851 bytes .../8f/21212a398541f5c51c46a0dbf10b1514a06add | Bin 0 -> 594 bytes .../95/b081d9e79ad6a3195835ec03c44a5dc8a11eee | Bin 0 -> 2588 bytes .../96/deeaede0a8a9d670aa7ba2b090bcb64a2f2f81 | Bin 0 -> 2534 bytes .../9a/bbc42457fefb0650fe8bd77d9edeeb52d68a0c | Bin 0 -> 345 bytes .../a4/820a23c4ac77c99a50eeb87b372c8410fdc48b | Bin 0 -> 52 bytes .../a7/44da2c6d3edbdb6d02665c4bf4d92f03205d0c | Bin 0 -> 3467 bytes .../ad/6d326501029c0a8f72f8054b220a08179fe053 | Bin 0 -> 51 bytes .../b1/82a6575cfd9f4fbb1d1d4e487a6b00a3ec06f7 | 1 + .../b2/68878912197b9b7710495ae1d156006dfd094d | Bin 0 -> 4708 bytes .../b5/794635d62c9c4323f9145208370cff7fe98c6c | 1 + .../b5/d161ad495146ef51512a0b5bb271bbf995498d | Bin 0 -> 687 bytes .../dc/dd8d85fc230e8c577d25c08c91797471be5719 | Bin 0 -> 717 bytes .../dd/2deb64493f88f70b4f6710584fb5a8791896ab | Bin 0 -> 533 bytes .../e2/0ec3869f4535f5445ff91f0f9e0c759e181e69 | Bin 0 -> 186 bytes .../ee/9b5ca5bfe20398de497b3c47907e7b412ccb44 | Bin 0 -> 4181 bytes .../ef/1f15a5dc05987672f1a7ee5bcfeecd906d1507 | Bin 0 -> 3188 bytes .../f0/8b26245c2d1bd474d7a89df0c6964af54ab463 | Bin 0 -> 4819 bytes .../f4/81953587acbc5d636020e7788af5c2c283016b | Bin 0 -> 58 bytes .../f6/217c96e2edcb1a67bae8f2030925bbffafc5a5 | Bin 0 -> 833 bytes .../f7/ca3cef993c0cc1de0bc6101cdac1fe5c7d3b17 | Bin 0 -> 2329 bytes .../fb/80ca88fe255dff2a7b1a330e29fa01ff3779b2 | Bin 0 -> 367 bytes .../refs/tags/v1.2.0 | 1 + .../shallow | 1 + ...5ba5dcb56cd0b82738f309ccb84fc69628714.info | 1 + ...5ba5dcb56cd0b82738f309ccb84fc69628714.lock | 0 .../FETCH_HEAD | 1 + .../HEAD | 1 + .../config | 9 + .../description | 1 + .../hooks/applypatch-msg.sample | 15 + .../hooks/commit-msg.sample | 24 + .../hooks/fsmonitor-watchman.sample | 174 + .../hooks/post-update.sample | 8 + .../hooks/pre-applypatch.sample | 14 + .../hooks/pre-commit.sample | 49 + .../hooks/pre-merge-commit.sample | 13 + .../hooks/pre-push.sample | 53 + .../hooks/pre-rebase.sample | 169 + .../hooks/pre-receive.sample | 24 + .../hooks/prepare-commit-msg.sample | 42 + .../hooks/push-to-checkout.sample | 78 + .../hooks/sendemail-validate.sample | 77 + .../hooks/update.sample | 128 + .../info/attributes | 2 + .../info/exclude | 6 + .../00/5a61c183f1fbf6134cf211b43fee0b170063a3 | Bin 0 -> 401 bytes .../02/61903b9df868a569ef1e3d8cb29b193b72312d | Bin 0 -> 2380 bytes .../03/0deaefa0c4ae7c125992d9ffa698edde881c5c | Bin 0 -> 1278 bytes .../07/1b69a9115d25c042b3ff4fcbe177ab19616096 | Bin 0 -> 1312 bytes .../0e/bf05c213023a4026bce0a34fca04412734c7bc | 2 + .../10/5316b8164963854cc4f99328578259e80c1d6b | Bin 0 -> 1414 bytes .../14/e2f777f6c395e7e04ab4aa306bbcc4b0c1120e | Bin 0 -> 6141 bytes .../15/f9d7c3353e6e9cfbb78e8d3f96fd1e37fa2c26 | Bin 0 -> 1040 bytes .../19/0e75f9bfe09a7d4e43f961427d70609301f9dc | Bin 0 -> 1602 bytes .../1c/38fad04121760e5ce3005bf3f722bf067f69a9 | Bin 0 -> 560 bytes .../27/7ea2e5314e3b3f151e3b71aa9da5a94114f7d9 | Bin 0 -> 152 bytes .../28/27fd0bb71c1a7177d30db8ab5ed2b7945acd8f | Bin 0 -> 3792 bytes .../29/b1aa43f27cfd1c8e5e3f08c2ea84b23c8b274d | Bin 0 -> 2702 bytes .../2d/ccb7d53ea23d35c5948d728ae51de4f80fc696 | Bin 0 -> 6614 bytes .../2d/e28da16638ab523cbe1bc461ed2d67746939f4 | Bin 0 -> 85 bytes .../31/6a48aae18e9d2e9077a5eb32c44ee26703723b | Bin 0 -> 901 bytes .../32/7009e408bfc552c2f8ece74b1e7495b2785d5d | Bin 0 -> 1287 bytes .../38/bfa000e8ab0f64eb83d5121bd8d2ff46b118a9 | Bin 0 -> 2459 bytes .../3d/376047759197056e8a003048efea11fd68c956 | Bin 0 -> 2415 bytes .../3d/a0538c79a0a8d69209c3a42ee22973f0d32481 | Bin 0 -> 11385 bytes .../42/c7f02c0bda756bf1d2968116b72a883527c673 | Bin 0 -> 2767 bytes .../46/e1e3b4ed277a612670d4910d6a8e5a548d5a57 | Bin 0 -> 5534 bytes .../49/1e10f37105b07be2a0e5dffe03e7b6da86dbcf | Bin 0 -> 6036 bytes .../4c/171f6216d8c64b1ba4b42bcb534bf367a7dbcc | Bin 0 -> 3851 bytes .../4f/1d9029e069a0d60418725ac15d97283297632f | Bin 0 -> 706 bytes .../53/d634454aa30689058404891907a3e2ae1e2aca | Bin 0 -> 832 bytes .../58/4617b1180c749445b741aa55ea48de6ad4b914 | Bin 0 -> 1441 bytes .../59/7b5e7f67791cf0f59fc41ba62bd7591d4ec171 | Bin 0 -> 1936 bytes .../5e/513f27604f6b06efe93b32a99955271471cbbe | 1 + .../61/0044fc16ac510e9c0fcfd56fcec013d1807bf7 | Bin 0 -> 4421 bytes .../65/204e2d212113d8e32fd18ee7664ad0be1a0b9b | Bin 0 -> 6471 bytes .../6f/0cdf3032357a8150c4f8dc8bbc8279c7cddaed | Bin 0 -> 1954 bytes .../6f/5c7ebeb7350d1036ef541ff206606e96e9f666 | 6 + .../72/8ab9fc7778ee9ad010a9d67033697a4146354b | Bin 0 -> 95 bytes .../82/d8c5989dc90094469059f84f29db2eb45d5f0f | Bin 0 -> 349 bytes .../82/dc0f9b6cecf296a886635a2b20b65a67dd3398 | Bin 0 -> 705 bytes .../87/844a9b2ab7d15cc351667cb815fd2059cf4cf5 | Bin 0 -> 3791 bytes .../8c/502f49e6013bae93152155721d9eb71bec2366 | 2 + .../8f/9122a0f265286cceebac1cdac9aa164a76a40b | Bin 0 -> 84 bytes .../8f/e16bcb497b7ce4bfa7deac567276ead4c17f81 | Bin 0 -> 602 bytes .../a0/65b60ab6d0c8e15468e7709c7f76acf4431647 | Bin 0 -> 835 bytes .../b2/4af9bed6ceccae71368dfa79d3e92c76a7710e | Bin 0 -> 7155 bytes .../b4/87051e2d18c4a177d305174d31eb7a571348d5 | Bin 0 -> 2785 bytes .../c4/ec989c618573a00c998a958491ab1fb33b1115 | Bin 0 -> 4058 bytes .../c5/613332ef24d31ec2865fbeab5e31174ef79e2d | Bin 0 -> 468 bytes .../d0/b21b06c9e325b622ceeff877447e63ea397484 | Bin 0 -> 12312 bytes .../d8/63ab810e77a4d0db11e6c72f91e59627355d0f | Bin 0 -> 210 bytes .../d9/771f1ddc4ecbde14a3f986b01f4c4a629b1f74 | 1 + .../ee/9d964171ba583274d138656534a380b46fece3 | Bin 0 -> 1530 bytes .../f2/aaf35bd5d60e43352b0801306fedc7d605a6be | Bin 0 -> 28415 bytes .../f8/95e87b3c4d8de8321351553b64aa7bde3d6d3d | Bin 0 -> 1800 bytes .../f9/c5cb65cb680d52b260f337a7477816dd4affca | Bin 0 -> 658 bytes .../refs/tags/v1.10.0 | 1 + .../shallow | 1 + .../.github/workflows/test.yml | 17 + .../filippo.io/edwards25519@v1.2.0/LICENSE | 27 + .../filippo.io/edwards25519@v1.2.0/README.md | 16 + .../mod/filippo.io/edwards25519@v1.2.0/doc.go | 20 + .../edwards25519@v1.2.0/edwards25519.go | 427 ++ .../edwards25519@v1.2.0/edwards25519_test.go | 314 ++ .../filippo.io/edwards25519@v1.2.0/extra.go | 401 ++ .../edwards25519@v1.2.0/extra_test.go | 301 ++ .../edwards25519@v1.2.0/field/fe.go | 420 ++ .../field/fe_alias_test.go | 140 + .../edwards25519@v1.2.0/field/fe_amd64.go | 15 + .../edwards25519@v1.2.0/field/fe_amd64.s | 398 ++ .../field/fe_amd64_noasm.go | 11 + .../field/fe_bench_test.go | 57 + .../edwards25519@v1.2.0/field/fe_extra.go | 50 + .../field/fe_extra_test.go | 37 + .../edwards25519@v1.2.0/field/fe_generic.go | 272 ++ .../edwards25519@v1.2.0/field/fe_test.go | 542 +++ .../mod/filippo.io/edwards25519@v1.2.0/go.mod | 3 + .../filippo.io/edwards25519@v1.2.0/pull.sh | 53 + .../filippo.io/edwards25519@v1.2.0/scalar.go | 352 ++ .../edwards25519@v1.2.0/scalar_alias_test.go | 111 + .../edwards25519@v1.2.0/scalar_fiat.go | 1147 +++++ .../edwards25519@v1.2.0/scalar_test.go | 268 ++ .../edwards25519@v1.2.0/scalarmult.go | 214 + .../edwards25519@v1.2.0/scalarmult_test.go | 205 + .../filippo.io/edwards25519@v1.2.0/tables.go | 127 + .../edwards25519@v1.2.0/tables_test.go | 119 + .../mysql@v1.10.0/.github/CONTRIBUTING.md | 23 + .../mysql@v1.10.0/.github/ISSUE_TEMPLATE.md | 21 + .../.github/PULL_REQUEST_TEMPLATE.md | 9 + .../mysql@v1.10.0/.github/dependabot.yml | 24 + .../.github/workflows/codeql.yml | 41 + .../mysql@v1.10.0/.github/workflows/test.yml | 118 + .../go-sql-driver/mysql@v1.10.0/.gitignore | 9 + .../go-sql-driver/mysql@v1.10.0/AUTHORS | 159 + .../go-sql-driver/mysql@v1.10.0/CHANGELOG.md | 373 ++ .../go-sql-driver/mysql@v1.10.0/LICENSE | 373 ++ .../go-sql-driver/mysql@v1.10.0/README.md | 598 +++ .../go-sql-driver/mysql@v1.10.0/auth.go | 484 +++ .../go-sql-driver/mysql@v1.10.0/auth_test.go | 1381 ++++++ .../mysql@v1.10.0/benchmark_test.go | 511 +++ .../go-sql-driver/mysql@v1.10.0/buffer.go | 149 + .../go-sql-driver/mysql@v1.10.0/collations.go | 266 ++ .../go-sql-driver/mysql@v1.10.0/compress.go | 213 + .../mysql@v1.10.0/compress_test.go | 119 + .../go-sql-driver/mysql@v1.10.0/conncheck.go | 54 + .../mysql@v1.10.0/conncheck_dummy.go | 17 + .../mysql@v1.10.0/conncheck_test.go | 38 + .../go-sql-driver/mysql@v1.10.0/connection.go | 816 ++++ .../mysql@v1.10.0/connection_test.go | 362 ++ .../go-sql-driver/mysql@v1.10.0/connector.go | 229 + .../mysql@v1.10.0/connector_test.go | 30 + .../go-sql-driver/mysql@v1.10.0/const.go | 205 + .../go-sql-driver/mysql@v1.10.0/driver.go | 118 + .../mysql@v1.10.0/driver_test.go | 3652 ++++++++++++++++ .../go-sql-driver/mysql@v1.10.0/dsn.go | 700 +++ .../mysql@v1.10.0/dsn_fuzz_test.go | 46 + .../go-sql-driver/mysql@v1.10.0/dsn_test.go | 442 ++ .../go-sql-driver/mysql@v1.10.0/errors.go | 83 + .../mysql@v1.10.0/errors_test.go | 61 + .../go-sql-driver/mysql@v1.10.0/fields.go | 228 + .../go-sql-driver/mysql@v1.10.0/go.mod | 5 + .../go-sql-driver/mysql@v1.10.0/go.sum | 2 + .../go-sql-driver/mysql@v1.10.0/infile.go | 181 + .../go-sql-driver/mysql@v1.10.0/nulltime.go | 71 + .../mysql@v1.10.0/nulltime_test.go | 62 + .../go-sql-driver/mysql@v1.10.0/packets.go | 1451 +++++++ .../mysql@v1.10.0/packets_test.go | 357 ++ .../go-sql-driver/mysql@v1.10.0/result.go | 52 + .../go-sql-driver/mysql@v1.10.0/rows.go | 225 + .../go-sql-driver/mysql@v1.10.0/statement.go | 234 + .../mysql@v1.10.0/statement_test.go | 151 + .../mysql@v1.10.0/transaction.go | 45 + .../go-sql-driver/mysql@v1.10.0/utils.go | 805 ++++ .../go-sql-driver/mysql@v1.10.0/utils_test.go | 555 +++ platform/protocol/ai-provider-contracts.md | 39 + platform/protocol/run-contracts.md | 99 + platform/protocol/server-lifecycle.md | 77 + platform/repo/file_store.go | 225 + platform/repo/mysql_store.go | 174 + platform/repo/resources.go | 315 ++ platform/repo/resources_test.go | 145 + platform/service/ai_invocation.go | 185 + platform/service/artifact_download.go | 188 + platform/service/artifact_transfer.go | 412 ++ platform/service/artifact_transfer_test.go | 205 + platform/service/control.go | 121 + platform/service/control_test.go | 189 + platform/service/job_channel.go | 408 ++ platform/service/job_channel_test.go | 263 ++ platform/service/log_body_store.go | 251 ++ platform/service/log_ingest.go | 113 + platform/service/log_ingest_test.go | 198 + platform/service/resources.go | 1754 ++++++++ platform/service/resources_test.go | 1127 +++++ platform/service/server_access.go | 56 + platform/service/server_lifecycle.go | 233 + .../service/server_lifecycle_projection.go | 47 + platform/service/server_lifecycle_test.go | 294 ++ platform/validator/ai_invocation.go | 103 + platform/validator/artifact_download.go | 140 + platform/validator/artifact_transfer.go | 121 + platform/validator/control.go | 67 + platform/validator/job_channel.go | 121 + platform/validator/log_ingest.go | 117 + platform/validator/resources.go | 1372 ++++++ platform/validator/resources_test.go | 221 + platform/validator/rules.md | 10 + platform/validator/server_lifecycle.go | 50 + platform_web/.env.example | 4 + platform_web/AGENTS.md | 40 + platform_web/Dockerfile | 15 + platform_web/README.md | 91 + .../acceptance/browser-acceptance.mjs | 870 ++++ platform_web/api/client.env.test.ts | 27 + platform_web/api/client.test.ts | 506 +++ platform_web/api/client.ts | 414 ++ platform_web/api/contracts.md | 50 + platform_web/api/types.ts | 679 +++ platform_web/app/App.test.tsx | 14 + platform_web/app/App.tsx | 101 + platform_web/app/main.tsx | 11 + platform_web/components/AppShell.tsx | 164 + platform_web/components/AuthView.tsx | 132 + .../components/MagicalParticleLayer.tsx | 41 + platform_web/components/OperationControls.tsx | 72 + platform_web/components/PageFrame.tsx | 36 + platform_web/components/StateViews.tsx | 112 + platform_web/contracts/aiProviders.ts | 73 + platform_web/contracts/page.ts | 75 + platform_web/contracts/pages.md | 42 + platform_web/contracts/plugin-page-bridge.md | 24 + platform_web/contracts/pluginBridge.ts | 70 + platform_web/contracts/serverManagement.ts | 85 + platform_web/contracts/shell.ts | 69 + platform_web/contracts/workspace.ts | 192 + platform_web/index.html | 12 + platform_web/nginx.conf | 30 + platform_web/package-lock.json | 1806 ++++++++ platform_web/package.json | 27 + platform_web/pages/AiProvidersPage.test.tsx | 28 + platform_web/pages/AiProvidersPage.tsx | 370 ++ platform_web/pages/ConsolePages.test.tsx | 104 + platform_web/pages/HomePage.tsx | 321 ++ platform_web/pages/MaintenancePage.tsx | 130 + platform_web/pages/PluginsPage.test.tsx | 74 + platform_web/pages/PluginsPage.tsx | 386 ++ platform_web/pages/ProfileSettingsPage.tsx | 249 ++ platform_web/pages/README.md | 25 + platform_web/pages/ServerDetailPage.test.tsx | 86 + platform_web/pages/ServerDetailPage.tsx | 1544 +++++++ platform_web/pages/ServersPage.tsx | 330 ++ platform_web/pages/UsersPage.tsx | 296 ++ platform_web/pages/pageRegistry.tsx | 22 + platform_web/routes/routes.md | 25 + platform_web/routes/routes.test.ts | 86 + platform_web/routes/routes.ts | 141 + platform_web/schemas/aiProviders.ts | 28 + platform_web/schemas/env.ts | 11 + platform_web/schemas/frontend-structure.md | 12 + platform_web/schemas/serverManagement.ts | 24 + platform_web/stores/navigation.ts | 23 + platform_web/stores/operations.ts | 93 + platform_web/stores/session.test.ts | 69 + platform_web/stores/session.ts | 281 ++ platform_web/theme/README.md | 61 + platform_web/theme/base-css.test.js | 13 + platform_web/theme/base.css | 3852 +++++++++++++++++ platform_web/theme/tokens.test.ts | 121 + platform_web/theme/tokens.ts | 368 ++ platform_web/tsconfig.json | 33 + platform_web/utils/classes.ts | 3 + platform_web/utils/diff.ts | 56 + platform_web/utils/pluginBridgeHost.test.ts | 171 + platform_web/utils/pluginBridgeHost.ts | 209 + platform_web/vite.config.ts | 26 + plugins/AGENTS.md | 19 + plugins/README.md | 49 + plugins/docs/local-development.md | 24 + .../examples/dev-game-plugin/manifest.json | 83 + .../schemas/create-form.schema.json | 17 + .../scum-server-plugin/actions/install.json | 8 + .../scum-server-plugin/actions/restart.json | 8 + .../scum-server-plugin/actions/start.json | 8 + .../scum-server-plugin/actions/status.json | 8 + .../scum-server-plugin/actions/stop.json | 8 + .../examples/scum-server-plugin/manifest.json | 83 + .../schemas/create-form.schema.json | 31 + .../game-plugin.manifest.schema.json | 145 + plugins/package-lock.json | 1602 +++++++ plugins/package.json | 20 + plugins/schemas/create-form.schema.json | 26 + plugins/scripts/validate-manifest.ts | 150 + plugins/sdk/bridge-contract.md | 35 + plugins/sdk/index.ts | 384 ++ .../tests/fixtures/create-form.invalid.json | 9 + plugins/tests/fixtures/create-form.valid.json | 10 + .../invalid-create-form-manifest.json | 20 + plugins/tests/fixtures/unsafe-manifest.json | 23 + plugins/tests/manifest-validation.test.ts | 269 ++ plugins/tsconfig.json | 18 + run/.env.example | 13 + run/AGENTS.md | 23 + run/Dockerfile | 29 + run/README.md | 66 + run/api/artifact_client_test.go | 154 + run/api/channel_isolation_test.go | 105 + run/api/job_client_test.go | 234 + run/api/log_ingest_client_test.go | 81 + run/api/platform_client.go | 125 + run/api/platform_client_test.go | 212 + run/artifact/README.md | 13 + run/cmd/run/main.go | 61 + run/config/config.go | 83 + run/config/config_test.go | 54 + run/domain/status.go | 9 + run/go.mod | 3 + run/logingest/README.md | 7 + run/protocol/artifact.go | 101 + run/protocol/artifact.md | 44 + run/protocol/control.go | 52 + run/protocol/control.md | 28 + run/protocol/game-client-bridge.md | 17 + run/protocol/job.go | 132 + run/protocol/job.md | 57 + run/protocol/job_validation.go | 58 + run/protocol/job_validation_test.go | 46 + run/protocol/log-ingest.md | 30 + run/protocol/log_ingest.go | 50 + run/runtime/lifecycle.go | 454 ++ run/runtime/lifecycle_test.go | 252 ++ run/runtime/smoke.go | 19 + run/runtime/smoke_test.go | 24 + run/runtime/worker.go | 384 ++ run/runtime/worker_test.go | 401 ++ run/spool/README.md | 19 + run/spool/artifact_queue.go | 125 + run/spool/artifact_queue_test.go | 75 + run/spool/channel_isolation_test.go | 85 + run/spool/log_spool.go | 136 + run/spool/log_spool_test.go | 81 + scripts/browser-acceptance.sh | 35 + scripts/check-all.sh | 24 + scripts/check-structure.sh | 146 + scripts/local-debug-env.sh | 51 + scripts/local-debug-reset.sh | 22 + scripts/local-debug-smoke.sh | 383 ++ scripts/local-debug-start.sh | 144 + scripts/local-debug-stop.sh | 26 + 660 files changed, 78119 insertions(+) create mode 100644 AGENTS.md create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 docs/local-debug-workspace.md create mode 100755 go_build_main_go create mode 100755 main create mode 100644 openspec/changes/add-local-docker-deployment/design.md create mode 100644 openspec/changes/add-local-docker-deployment/proposal.md create mode 100644 openspec/changes/add-local-docker-deployment/specs/local-docker-deployment/spec.md create mode 100644 openspec/changes/add-local-docker-deployment/tasks.md create mode 100644 openspec/changes/add-mysql-platform-metadata-storage/design.md create mode 100644 openspec/changes/add-mysql-platform-metadata-storage/proposal.md create mode 100644 openspec/changes/add-mysql-platform-metadata-storage/specs/mysql-platform-metadata-storage/spec.md create mode 100644 openspec/changes/add-mysql-platform-metadata-storage/tasks.md create mode 100644 openspec/changes/architecture-delivery-stream/.openspec.yaml create mode 100644 openspec/changes/architecture-delivery-stream/NEXT_CHANGE.md create mode 100644 openspec/changes/architecture-delivery-stream/delivery-plan.md create mode 100644 openspec/changes/architecture-delivery-stream/design.md create mode 100644 openspec/changes/architecture-delivery-stream/proposal.md create mode 100644 openspec/changes/architecture-delivery-stream/specs/architecture-delivery-workflow/spec.md create mode 100644 openspec/changes/architecture-delivery-stream/tasks.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/.openspec.yaml create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/design.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/proposal.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/specs/game-plugin-system/spec.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/specs/game-server-platform-core/spec.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/specs/platform-web-console/spec.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/specs/project-workspace-governance/spec.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/specs/run-execution-channel/spec.md create mode 100644 openspec/changes/bootstrap-game-server-platform-architecture/tasks.md create mode 100644 openspec/changes/establish-development-runtime-baseline/.openspec.yaml create mode 100644 openspec/changes/establish-development-runtime-baseline/design.md create mode 100644 openspec/changes/establish-development-runtime-baseline/proposal.md create mode 100644 openspec/changes/establish-development-runtime-baseline/specs/development-runtime-baseline/spec.md create mode 100644 openspec/changes/establish-development-runtime-baseline/tasks.md create mode 100644 openspec/changes/fix-env-profile-settings/.openspec.yaml create mode 100644 openspec/changes/fix-env-profile-settings/design.md create mode 100644 openspec/changes/fix-env-profile-settings/proposal.md create mode 100644 openspec/changes/fix-env-profile-settings/specs/personal-settings-workspace/spec.md create mode 100644 openspec/changes/fix-env-profile-settings/specs/platform-env-bootstrap/spec.md create mode 100644 openspec/changes/fix-env-profile-settings/tasks.md create mode 100644 openspec/changes/fix-platform-auth-session-api/.openspec.yaml create mode 100644 openspec/changes/fix-platform-auth-session-api/design.md create mode 100644 openspec/changes/fix-platform-auth-session-api/proposal.md create mode 100644 openspec/changes/fix-platform-auth-session-api/specs/platform-auth-session/spec.md create mode 100644 openspec/changes/fix-platform-auth-session-api/tasks.md create mode 100644 openspec/changes/harden-log-artifact-channel-isolation/.openspec.yaml create mode 100644 openspec/changes/harden-log-artifact-channel-isolation/design.md create mode 100644 openspec/changes/harden-log-artifact-channel-isolation/proposal.md create mode 100644 openspec/changes/harden-log-artifact-channel-isolation/specs/log-artifact-channel-isolation/spec.md create mode 100644 openspec/changes/harden-log-artifact-channel-isolation/tasks.md create mode 100644 openspec/changes/implement-ai-provider-management/.openspec.yaml create mode 100644 openspec/changes/implement-ai-provider-management/design.md create mode 100644 openspec/changes/implement-ai-provider-management/proposal.md create mode 100644 openspec/changes/implement-ai-provider-management/specs/ai-provider-management/spec.md create mode 100644 openspec/changes/implement-ai-provider-management/tasks.md create mode 100644 openspec/changes/implement-artifact-download-and-browser-transfer/.openspec.yaml create mode 100644 openspec/changes/implement-artifact-download-and-browser-transfer/design.md create mode 100644 openspec/changes/implement-artifact-download-and-browser-transfer/proposal.md create mode 100644 openspec/changes/implement-artifact-download-and-browser-transfer/specs/artifact-download-and-browser-transfer/spec.md create mode 100644 openspec/changes/implement-artifact-download-and-browser-transfer/tasks.md create mode 100644 openspec/changes/implement-artifact-transfer-channel/.openspec.yaml create mode 100644 openspec/changes/implement-artifact-transfer-channel/design.md create mode 100644 openspec/changes/implement-artifact-transfer-channel/proposal.md create mode 100644 openspec/changes/implement-artifact-transfer-channel/specs/artifact-transfer-channel/spec.md create mode 100644 openspec/changes/implement-artifact-transfer-channel/tasks.md create mode 100644 openspec/changes/implement-browser-acceptance-suite/.openspec.yaml create mode 100644 openspec/changes/implement-browser-acceptance-suite/design.md create mode 100644 openspec/changes/implement-browser-acceptance-suite/proposal.md create mode 100644 openspec/changes/implement-browser-acceptance-suite/specs/browser-acceptance-suite/spec.md create mode 100644 openspec/changes/implement-browser-acceptance-suite/tasks.md create mode 100644 openspec/changes/implement-config-write-and-file-dispatch/.openspec.yaml create mode 100644 openspec/changes/implement-config-write-and-file-dispatch/design.md create mode 100644 openspec/changes/implement-config-write-and-file-dispatch/proposal.md create mode 100644 openspec/changes/implement-config-write-and-file-dispatch/specs/config-write-and-file-dispatch/spec.md create mode 100644 openspec/changes/implement-config-write-and-file-dispatch/tasks.md create mode 100644 openspec/changes/implement-durable-platform-storage/.openspec.yaml create mode 100644 openspec/changes/implement-durable-platform-storage/design.md create mode 100644 openspec/changes/implement-durable-platform-storage/proposal.md create mode 100644 openspec/changes/implement-durable-platform-storage/specs/durable-platform-storage/spec.md create mode 100644 openspec/changes/implement-durable-platform-storage/tasks.md create mode 100644 openspec/changes/implement-local-debug-workspace/.openspec.yaml create mode 100644 openspec/changes/implement-local-debug-workspace/design.md create mode 100644 openspec/changes/implement-local-debug-workspace/proposal.md create mode 100644 openspec/changes/implement-local-debug-workspace/specs/local-debug-workspace/spec.md create mode 100644 openspec/changes/implement-local-debug-workspace/tasks.md create mode 100644 openspec/changes/implement-log-ingest-pipeline/.openspec.yaml create mode 100644 openspec/changes/implement-log-ingest-pipeline/design.md create mode 100644 openspec/changes/implement-log-ingest-pipeline/proposal.md create mode 100644 openspec/changes/implement-log-ingest-pipeline/specs/log-ingest-pipeline/spec.md create mode 100644 openspec/changes/implement-log-ingest-pipeline/tasks.md create mode 100644 openspec/changes/implement-platform-api-surface/.openspec.yaml create mode 100644 openspec/changes/implement-platform-api-surface/design.md create mode 100644 openspec/changes/implement-platform-api-surface/proposal.md create mode 100644 openspec/changes/implement-platform-api-surface/specs/platform-api-surface/spec.md create mode 100644 openspec/changes/implement-platform-api-surface/tasks.md create mode 100644 openspec/changes/implement-platform-core-domain/.openspec.yaml create mode 100644 openspec/changes/implement-platform-core-domain/design.md create mode 100644 openspec/changes/implement-platform-core-domain/proposal.md create mode 100644 openspec/changes/implement-platform-core-domain/specs/platform-core-domain/spec.md create mode 100644 openspec/changes/implement-platform-core-domain/tasks.md create mode 100644 openspec/changes/implement-platform-mediated-ai-invocation/.openspec.yaml create mode 100644 openspec/changes/implement-platform-mediated-ai-invocation/design.md create mode 100644 openspec/changes/implement-platform-mediated-ai-invocation/proposal.md create mode 100644 openspec/changes/implement-platform-mediated-ai-invocation/specs/platform-mediated-ai-invocation/spec.md create mode 100644 openspec/changes/implement-platform-mediated-ai-invocation/tasks.md create mode 100644 openspec/changes/implement-platform-observability-and-config-read/.openspec.yaml create mode 100644 openspec/changes/implement-platform-observability-and-config-read/design.md create mode 100644 openspec/changes/implement-platform-observability-and-config-read/proposal.md create mode 100644 openspec/changes/implement-platform-observability-and-config-read/specs/platform-observability-and-config-read/spec.md create mode 100644 openspec/changes/implement-platform-observability-and-config-read/tasks.md create mode 100644 openspec/changes/implement-platform-web-console-shell/.openspec.yaml create mode 100644 openspec/changes/implement-platform-web-console-shell/design.md create mode 100644 openspec/changes/implement-platform-web-console-shell/proposal.md create mode 100644 openspec/changes/implement-platform-web-console-shell/specs/platform-web-console-shell/spec.md create mode 100644 openspec/changes/implement-platform-web-console-shell/tasks.md create mode 100644 openspec/changes/implement-plugin-bridge-and-sdk/.openspec.yaml create mode 100644 openspec/changes/implement-plugin-bridge-and-sdk/design.md create mode 100644 openspec/changes/implement-plugin-bridge-and-sdk/proposal.md create mode 100644 openspec/changes/implement-plugin-bridge-and-sdk/specs/plugin-bridge-and-sdk/spec.md create mode 100644 openspec/changes/implement-plugin-bridge-and-sdk/tasks.md create mode 100644 openspec/changes/implement-plugin-marketplace-api-driven-ui/.openspec.yaml create mode 100644 openspec/changes/implement-plugin-marketplace-api-driven-ui/design.md create mode 100644 openspec/changes/implement-plugin-marketplace-api-driven-ui/proposal.md create mode 100644 openspec/changes/implement-plugin-marketplace-api-driven-ui/specs/plugin-marketplace-api-driven-ui/spec.md create mode 100644 openspec/changes/implement-plugin-marketplace-api-driven-ui/tasks.md create mode 100644 openspec/changes/implement-plugin-page-bridge-execution/.openspec.yaml create mode 100644 openspec/changes/implement-plugin-page-bridge-execution/design.md create mode 100644 openspec/changes/implement-plugin-page-bridge-execution/proposal.md create mode 100644 openspec/changes/implement-plugin-page-bridge-execution/specs/plugin-page-bridge-execution/spec.md create mode 100644 openspec/changes/implement-plugin-page-bridge-execution/tasks.md create mode 100644 openspec/changes/implement-plugin-registry-and-manifest-validation/.openspec.yaml create mode 100644 openspec/changes/implement-plugin-registry-and-manifest-validation/design.md create mode 100644 openspec/changes/implement-plugin-registry-and-manifest-validation/proposal.md create mode 100644 openspec/changes/implement-plugin-registry-and-manifest-validation/specs/plugin-registry-and-manifest-validation/spec.md create mode 100644 openspec/changes/implement-plugin-registry-and-manifest-validation/tasks.md create mode 100644 openspec/changes/implement-real-game-plugin-lifecycle-proof/.openspec.yaml create mode 100644 openspec/changes/implement-real-game-plugin-lifecycle-proof/design.md create mode 100644 openspec/changes/implement-real-game-plugin-lifecycle-proof/proposal.md create mode 100644 openspec/changes/implement-real-game-plugin-lifecycle-proof/specs/real-game-plugin-lifecycle-proof/spec.md create mode 100644 openspec/changes/implement-real-game-plugin-lifecycle-proof/tasks.md create mode 100644 openspec/changes/implement-role-scoped-server-access/.openspec.yaml create mode 100644 openspec/changes/implement-role-scoped-server-access/design.md create mode 100644 openspec/changes/implement-role-scoped-server-access/proposal.md create mode 100644 openspec/changes/implement-role-scoped-server-access/specs/role-scoped-server-access/spec.md create mode 100644 openspec/changes/implement-role-scoped-server-access/tasks.md create mode 100644 openspec/changes/implement-run-control-registration/.openspec.yaml create mode 100644 openspec/changes/implement-run-control-registration/design.md create mode 100644 openspec/changes/implement-run-control-registration/proposal.md create mode 100644 openspec/changes/implement-run-control-registration/specs/run-control-registration/spec.md create mode 100644 openspec/changes/implement-run-control-registration/tasks.md create mode 100644 openspec/changes/implement-run-job-channel/.openspec.yaml create mode 100644 openspec/changes/implement-run-job-channel/design.md create mode 100644 openspec/changes/implement-run-job-channel/proposal.md create mode 100644 openspec/changes/implement-run-job-channel/specs/run-job-channel/spec.md create mode 100644 openspec/changes/implement-run-job-channel/tasks.md create mode 100644 openspec/changes/implement-run-worker-real-execution/.openspec.yaml create mode 100644 openspec/changes/implement-run-worker-real-execution/design.md create mode 100644 openspec/changes/implement-run-worker-real-execution/proposal.md create mode 100644 openspec/changes/implement-run-worker-real-execution/specs/run-worker-real-execution/spec.md create mode 100644 openspec/changes/implement-run-worker-real-execution/tasks.md create mode 100644 openspec/changes/implement-scum-server-plugin/design.md create mode 100644 openspec/changes/implement-scum-server-plugin/proposal.md create mode 100644 openspec/changes/implement-scum-server-plugin/specs/scum-server-plugin/spec.md create mode 100644 openspec/changes/implement-scum-server-plugin/tasks.md create mode 100644 openspec/changes/implement-server-management-workflows/.openspec.yaml create mode 100644 openspec/changes/implement-server-management-workflows/design.md create mode 100644 openspec/changes/implement-server-management-workflows/proposal.md create mode 100644 openspec/changes/implement-server-management-workflows/specs/server-management-workflows/spec.md create mode 100644 openspec/changes/implement-server-management-workflows/tasks.md create mode 100644 openspec/changes/polish-platform-interaction-design/.openspec.yaml create mode 100644 openspec/changes/polish-platform-interaction-design/design.md create mode 100644 openspec/changes/polish-platform-interaction-design/proposal.md create mode 100644 openspec/changes/polish-platform-interaction-design/specs/platform-interaction-design-polish/spec.md create mode 100644 openspec/changes/polish-platform-interaction-design/tasks.md create mode 100644 openspec/changes/polish-theme-frame-accessories/design.md create mode 100644 openspec/changes/polish-theme-frame-accessories/proposal.md create mode 100644 openspec/changes/polish-theme-frame-accessories/specs/platform-web-theme-accessories/spec.md create mode 100644 openspec/changes/polish-theme-frame-accessories/tasks.md create mode 100644 openspec/changes/redesign-platform-web-interactions/.openspec.yaml create mode 100644 openspec/changes/redesign-platform-web-interactions/design.md create mode 100644 openspec/changes/redesign-platform-web-interactions/proposal.md create mode 100644 openspec/changes/redesign-platform-web-interactions/specs/operation-feedback-and-safety/spec.md create mode 100644 openspec/changes/redesign-platform-web-interactions/specs/role-aware-platform-workspace/spec.md create mode 100644 openspec/changes/redesign-platform-web-interactions/specs/server-plugin-control-workspace/spec.md create mode 100644 openspec/changes/redesign-platform-web-interactions/specs/user-identity-and-profile/spec.md create mode 100644 openspec/changes/redesign-platform-web-interactions/tasks.md create mode 100644 openspec/changes/redesign-platform-web-themes-menu/.openspec.yaml create mode 100644 openspec/changes/redesign-platform-web-themes-menu/design.md create mode 100644 openspec/changes/redesign-platform-web-themes-menu/proposal.md create mode 100644 openspec/changes/redesign-platform-web-themes-menu/specs/platform-web-theme-menu/spec.md create mode 100644 openspec/changes/redesign-platform-web-themes-menu/tasks.md create mode 100644 openspec/changes/refresh-architecture-delivery-stream/.openspec.yaml create mode 100644 openspec/changes/refresh-architecture-delivery-stream/design.md create mode 100644 openspec/changes/refresh-architecture-delivery-stream/proposal.md create mode 100644 openspec/changes/refresh-architecture-delivery-stream/specs/serial-openspec-delivery-queue/spec.md create mode 100644 openspec/changes/refresh-architecture-delivery-stream/tasks.md create mode 100644 openspec/changes/sync-implemented-docs-and-comments/.openspec.yaml create mode 100644 openspec/changes/sync-implemented-docs-and-comments/design.md create mode 100644 openspec/changes/sync-implemented-docs-and-comments/proposal.md create mode 100644 openspec/changes/sync-implemented-docs-and-comments/specs/implemented-documentation-sync/spec.md create mode 100644 openspec/changes/sync-implemented-docs-and-comments/tasks.md create mode 100644 openspec/changes/verify-current-platform-e2e-baseline/.openspec.yaml create mode 100644 openspec/changes/verify-current-platform-e2e-baseline/design.md create mode 100644 openspec/changes/verify-current-platform-e2e-baseline/proof-report.md create mode 100644 openspec/changes/verify-current-platform-e2e-baseline/proposal.md create mode 100644 openspec/changes/verify-current-platform-e2e-baseline/specs/current-platform-e2e-baseline/spec.md create mode 100644 openspec/changes/verify-current-platform-e2e-baseline/tasks.md create mode 100644 openspec/config.yaml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 platform/.env create mode 100644 platform/.env.example create mode 100644 platform/.platform-data/metadata.json create mode 100644 platform/AGENTS.md create mode 100644 platform/Dockerfile create mode 100644 platform/README.md create mode 100644 platform/api/artifact_download_handlers_test.go create mode 100644 platform/api/artifact_transfer_handlers_test.go create mode 100644 platform/api/channel_isolation_handlers_test.go create mode 100644 platform/api/control_handlers_test.go create mode 100644 platform/api/health_handler.go create mode 100644 platform/api/health_handler_test.go create mode 100644 platform/api/job_channel_handlers_test.go create mode 100644 platform/api/json.go create mode 100644 platform/api/log_ingest_handlers_test.go create mode 100644 platform/api/resource_handlers.go create mode 100644 platform/api/resource_handlers_test.go create mode 100644 platform/api/router.go create mode 100644 platform/api/routes.md create mode 100644 platform/api/server_lifecycle_handlers.go create mode 100755 platform/cmd/platform/main.go create mode 100644 platform/config/config.go create mode 100644 platform/config/config_test.go create mode 100644 platform/domain/ai_invocation.go create mode 100644 platform/domain/artifact_download.go create mode 100644 platform/domain/artifact_transfer.go create mode 100644 platform/domain/control.go create mode 100644 platform/domain/job_channel.go create mode 100644 platform/domain/log_ingest.go create mode 100644 platform/domain/resources.go create mode 100644 platform/domain/resources.md create mode 100644 platform/domain/resources_test.go create mode 100644 platform/domain/server_lifecycle.go create mode 100644 platform/dto/README.md create mode 100644 platform/dto/ai_invocation.go create mode 100644 platform/dto/artifact_download.go create mode 100644 platform/dto/artifact_transfer.go create mode 100644 platform/dto/control.go create mode 100644 platform/dto/health.go create mode 100644 platform/dto/job_channel.go create mode 100644 platform/dto/log_ingest.go create mode 100644 platform/dto/resources.go create mode 100644 platform/dto/resources_test.go create mode 100644 platform/dto/server_lifecycle.go create mode 100644 platform/go.mod create mode 100644 platform/go.sum create mode 100755 platform/main create mode 100644 platform/model/README.md create mode 100644 platform/model/resources.go create mode 100644 platform/model/resources_test.go create mode 100644 platform/pkg/mod/cache/download/filippo.io/edwards25519/@v/list create mode 100644 platform/pkg/mod/cache/download/filippo.io/edwards25519/@v/v1.2.0.info create mode 100644 platform/pkg/mod/cache/download/filippo.io/edwards25519/@v/v1.2.0.lock create mode 100644 platform/pkg/mod/cache/download/filippo.io/edwards25519/@v/v1.2.0.mod create mode 100644 platform/pkg/mod/cache/download/filippo.io/edwards25519/@v/v1.2.0.zip create mode 100644 platform/pkg/mod/cache/download/filippo.io/edwards25519/@v/v1.2.0.ziphash create mode 100644 platform/pkg/mod/cache/download/github.com/go-sql-driver/mysql/@v/list create mode 100644 platform/pkg/mod/cache/download/github.com/go-sql-driver/mysql/@v/v1.10.0.info create mode 100644 platform/pkg/mod/cache/download/github.com/go-sql-driver/mysql/@v/v1.10.0.lock create mode 100644 platform/pkg/mod/cache/download/github.com/go-sql-driver/mysql/@v/v1.10.0.mod create mode 100644 platform/pkg/mod/cache/download/github.com/go-sql-driver/mysql/@v/v1.10.0.zip create mode 100644 platform/pkg/mod/cache/download/github.com/go-sql-driver/mysql/@v/v1.10.0.ziphash create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099.info create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099.lock create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/FETCH_HEAD create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/HEAD create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/config create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/description create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/applypatch-msg.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/commit-msg.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/fsmonitor-watchman.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/post-update.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/pre-applypatch.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/pre-commit.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/pre-merge-commit.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/pre-push.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/pre-rebase.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/pre-receive.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/prepare-commit-msg.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/push-to-checkout.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/sendemail-validate.sample create mode 100755 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/hooks/update.sample create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/info/attributes create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/info/exclude create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/00/bf8f4479225b29048dec9f1d899c242f6bfef9 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/0c/81239458d04a1f5d84cacdd3f1af36a082004b create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/1e/f503b9a2ff52bdf9f0b2c57ad930ffec668c3b create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/2e/5782b6058c535c1b84651ba74ebd1eb05b9652 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/3b/b606b1df622d6d2c69fbaefb024c887a204bd8 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/48/3bba883964dc78c043f7d68b592e7a44a3715b create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/4a/00c79ace52bfc930a7f50699b69e9c50764e5e create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/4a/2b54ebadf285c9b2c363fd5050235a15fcc3a7 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/4b/81f25d1d0f5336d8c4af79fe6e7b2c063d9740 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/4d/52cc10d1900a915e17ca7b8096b63ce27451c5 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/5e/06e242ed8e92221ebef566714201d7f39182d3 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/66/5058ee887fd1584b32c20937259d1434bfcee8 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/6a/66aea5eafe0ca6a688840c47219556c552488e create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/76/e920a2feb2e22239934fdfd1d3f1b369b0c375 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/7d/8bea03a80e6d5575e731a18eb26fedb585df57 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/8c/d865de788cc2cb12f7f428f679432c2213c224 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/8f/21212a398541f5c51c46a0dbf10b1514a06add create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/95/b081d9e79ad6a3195835ec03c44a5dc8a11eee create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/96/deeaede0a8a9d670aa7ba2b090bcb64a2f2f81 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/9a/bbc42457fefb0650fe8bd77d9edeeb52d68a0c create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/a4/820a23c4ac77c99a50eeb87b372c8410fdc48b create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/a7/44da2c6d3edbdb6d02665c4bf4d92f03205d0c create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/ad/6d326501029c0a8f72f8054b220a08179fe053 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/b1/82a6575cfd9f4fbb1d1d4e487a6b00a3ec06f7 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/b2/68878912197b9b7710495ae1d156006dfd094d create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/b5/794635d62c9c4323f9145208370cff7fe98c6c create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/b5/d161ad495146ef51512a0b5bb271bbf995498d create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/dc/dd8d85fc230e8c577d25c08c91797471be5719 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/dd/2deb64493f88f70b4f6710584fb5a8791896ab create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/e2/0ec3869f4535f5445ff91f0f9e0c759e181e69 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/ee/9b5ca5bfe20398de497b3c47907e7b412ccb44 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/ef/1f15a5dc05987672f1a7ee5bcfeecd906d1507 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/f0/8b26245c2d1bd474d7a89df0c6964af54ab463 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/f4/81953587acbc5d636020e7788af5c2c283016b create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/f6/217c96e2edcb1a67bae8f2030925bbffafc5a5 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/f7/ca3cef993c0cc1de0bc6101cdac1fe5c7d3b17 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/objects/fb/80ca88fe255dff2a7b1a330e29fa01ff3779b2 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/refs/tags/v1.2.0 create mode 100644 platform/pkg/mod/cache/vcs/41754dd3b2793c060e8e10e2556d901cb8141ec90c971c1cc6402f50aa5ff099/shallow create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714.info create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714.lock create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/FETCH_HEAD create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/HEAD create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/config create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/description create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/applypatch-msg.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/commit-msg.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/fsmonitor-watchman.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/post-update.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/pre-applypatch.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/pre-commit.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/pre-merge-commit.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/pre-push.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/pre-rebase.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/pre-receive.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/prepare-commit-msg.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/push-to-checkout.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/sendemail-validate.sample create mode 100755 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/hooks/update.sample create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/info/attributes create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/info/exclude create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/00/5a61c183f1fbf6134cf211b43fee0b170063a3 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/02/61903b9df868a569ef1e3d8cb29b193b72312d create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/03/0deaefa0c4ae7c125992d9ffa698edde881c5c create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/07/1b69a9115d25c042b3ff4fcbe177ab19616096 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/0e/bf05c213023a4026bce0a34fca04412734c7bc create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/10/5316b8164963854cc4f99328578259e80c1d6b create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/14/e2f777f6c395e7e04ab4aa306bbcc4b0c1120e create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/15/f9d7c3353e6e9cfbb78e8d3f96fd1e37fa2c26 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/19/0e75f9bfe09a7d4e43f961427d70609301f9dc create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/1c/38fad04121760e5ce3005bf3f722bf067f69a9 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/27/7ea2e5314e3b3f151e3b71aa9da5a94114f7d9 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/28/27fd0bb71c1a7177d30db8ab5ed2b7945acd8f create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/29/b1aa43f27cfd1c8e5e3f08c2ea84b23c8b274d create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/2d/ccb7d53ea23d35c5948d728ae51de4f80fc696 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/2d/e28da16638ab523cbe1bc461ed2d67746939f4 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/31/6a48aae18e9d2e9077a5eb32c44ee26703723b create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/32/7009e408bfc552c2f8ece74b1e7495b2785d5d create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/38/bfa000e8ab0f64eb83d5121bd8d2ff46b118a9 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/3d/376047759197056e8a003048efea11fd68c956 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/3d/a0538c79a0a8d69209c3a42ee22973f0d32481 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/42/c7f02c0bda756bf1d2968116b72a883527c673 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/46/e1e3b4ed277a612670d4910d6a8e5a548d5a57 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/49/1e10f37105b07be2a0e5dffe03e7b6da86dbcf create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/4c/171f6216d8c64b1ba4b42bcb534bf367a7dbcc create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/4f/1d9029e069a0d60418725ac15d97283297632f create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/53/d634454aa30689058404891907a3e2ae1e2aca create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/58/4617b1180c749445b741aa55ea48de6ad4b914 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/59/7b5e7f67791cf0f59fc41ba62bd7591d4ec171 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/5e/513f27604f6b06efe93b32a99955271471cbbe create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/61/0044fc16ac510e9c0fcfd56fcec013d1807bf7 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/65/204e2d212113d8e32fd18ee7664ad0be1a0b9b create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/6f/0cdf3032357a8150c4f8dc8bbc8279c7cddaed create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/6f/5c7ebeb7350d1036ef541ff206606e96e9f666 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/72/8ab9fc7778ee9ad010a9d67033697a4146354b create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/82/d8c5989dc90094469059f84f29db2eb45d5f0f create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/82/dc0f9b6cecf296a886635a2b20b65a67dd3398 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/87/844a9b2ab7d15cc351667cb815fd2059cf4cf5 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/8c/502f49e6013bae93152155721d9eb71bec2366 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/8f/9122a0f265286cceebac1cdac9aa164a76a40b create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/8f/e16bcb497b7ce4bfa7deac567276ead4c17f81 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/a0/65b60ab6d0c8e15468e7709c7f76acf4431647 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/b2/4af9bed6ceccae71368dfa79d3e92c76a7710e create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/b4/87051e2d18c4a177d305174d31eb7a571348d5 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/c4/ec989c618573a00c998a958491ab1fb33b1115 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/c5/613332ef24d31ec2865fbeab5e31174ef79e2d create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/d0/b21b06c9e325b622ceeff877447e63ea397484 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/d8/63ab810e77a4d0db11e6c72f91e59627355d0f create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/d9/771f1ddc4ecbde14a3f986b01f4c4a629b1f74 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/ee/9d964171ba583274d138656534a380b46fece3 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/f2/aaf35bd5d60e43352b0801306fedc7d605a6be create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/f8/95e87b3c4d8de8321351553b64aa7bde3d6d3d create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/objects/f9/c5cb65cb680d52b260f337a7477816dd4affca create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/refs/tags/v1.10.0 create mode 100644 platform/pkg/mod/cache/vcs/825229b4e0cfd56be471a970fb75ba5dcb56cd0b82738f309ccb84fc69628714/shallow create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/.github/workflows/test.yml create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/LICENSE create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/README.md create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/doc.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/edwards25519.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/edwards25519_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/extra.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/extra_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_alias_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_amd64.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_amd64.s create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_amd64_noasm.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_bench_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_extra.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_extra_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_generic.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/field/fe_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/go.mod create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/pull.sh create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/scalar.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/scalar_alias_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/scalar_fiat.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/scalar_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/scalarmult.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/scalarmult_test.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/tables.go create mode 100644 platform/pkg/mod/filippo.io/edwards25519@v1.2.0/tables_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/.github/CONTRIBUTING.md create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/.github/ISSUE_TEMPLATE.md create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/.github/dependabot.yml create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/.github/workflows/codeql.yml create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/.github/workflows/test.yml create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/.gitignore create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/AUTHORS create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/CHANGELOG.md create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/LICENSE create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/README.md create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/auth.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/auth_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/benchmark_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/buffer.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/collations.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/compress.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/compress_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/conncheck.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/conncheck_dummy.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/conncheck_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/connection.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/connection_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/connector.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/connector_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/const.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/driver.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/driver_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/dsn.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/dsn_fuzz_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/dsn_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/errors.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/errors_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/fields.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/go.mod create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/go.sum create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/infile.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/nulltime.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/nulltime_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/packets.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/packets_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/result.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/rows.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/statement.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/statement_test.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/transaction.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/utils.go create mode 100644 platform/pkg/mod/github.com/go-sql-driver/mysql@v1.10.0/utils_test.go create mode 100644 platform/protocol/ai-provider-contracts.md create mode 100644 platform/protocol/run-contracts.md create mode 100644 platform/protocol/server-lifecycle.md create mode 100644 platform/repo/file_store.go create mode 100644 platform/repo/mysql_store.go create mode 100644 platform/repo/resources.go create mode 100644 platform/repo/resources_test.go create mode 100644 platform/service/ai_invocation.go create mode 100644 platform/service/artifact_download.go create mode 100644 platform/service/artifact_transfer.go create mode 100644 platform/service/artifact_transfer_test.go create mode 100644 platform/service/control.go create mode 100644 platform/service/control_test.go create mode 100644 platform/service/job_channel.go create mode 100644 platform/service/job_channel_test.go create mode 100644 platform/service/log_body_store.go create mode 100644 platform/service/log_ingest.go create mode 100644 platform/service/log_ingest_test.go create mode 100644 platform/service/resources.go create mode 100644 platform/service/resources_test.go create mode 100644 platform/service/server_access.go create mode 100644 platform/service/server_lifecycle.go create mode 100644 platform/service/server_lifecycle_projection.go create mode 100644 platform/service/server_lifecycle_test.go create mode 100644 platform/validator/ai_invocation.go create mode 100644 platform/validator/artifact_download.go create mode 100644 platform/validator/artifact_transfer.go create mode 100644 platform/validator/control.go create mode 100644 platform/validator/job_channel.go create mode 100644 platform/validator/log_ingest.go create mode 100644 platform/validator/resources.go create mode 100644 platform/validator/resources_test.go create mode 100644 platform/validator/rules.md create mode 100644 platform/validator/server_lifecycle.go create mode 100644 platform_web/.env.example create mode 100644 platform_web/AGENTS.md create mode 100644 platform_web/Dockerfile create mode 100644 platform_web/README.md create mode 100644 platform_web/acceptance/browser-acceptance.mjs create mode 100644 platform_web/api/client.env.test.ts create mode 100644 platform_web/api/client.test.ts create mode 100644 platform_web/api/client.ts create mode 100644 platform_web/api/contracts.md create mode 100644 platform_web/api/types.ts create mode 100644 platform_web/app/App.test.tsx create mode 100644 platform_web/app/App.tsx create mode 100644 platform_web/app/main.tsx create mode 100644 platform_web/components/AppShell.tsx create mode 100644 platform_web/components/AuthView.tsx create mode 100644 platform_web/components/MagicalParticleLayer.tsx create mode 100644 platform_web/components/OperationControls.tsx create mode 100644 platform_web/components/PageFrame.tsx create mode 100644 platform_web/components/StateViews.tsx create mode 100644 platform_web/contracts/aiProviders.ts create mode 100644 platform_web/contracts/page.ts create mode 100644 platform_web/contracts/pages.md create mode 100644 platform_web/contracts/plugin-page-bridge.md create mode 100644 platform_web/contracts/pluginBridge.ts create mode 100644 platform_web/contracts/serverManagement.ts create mode 100644 platform_web/contracts/shell.ts create mode 100644 platform_web/contracts/workspace.ts create mode 100644 platform_web/index.html create mode 100644 platform_web/nginx.conf create mode 100644 platform_web/package-lock.json create mode 100644 platform_web/package.json create mode 100644 platform_web/pages/AiProvidersPage.test.tsx create mode 100644 platform_web/pages/AiProvidersPage.tsx create mode 100644 platform_web/pages/ConsolePages.test.tsx create mode 100644 platform_web/pages/HomePage.tsx create mode 100644 platform_web/pages/MaintenancePage.tsx create mode 100644 platform_web/pages/PluginsPage.test.tsx create mode 100644 platform_web/pages/PluginsPage.tsx create mode 100644 platform_web/pages/ProfileSettingsPage.tsx create mode 100644 platform_web/pages/README.md create mode 100644 platform_web/pages/ServerDetailPage.test.tsx create mode 100644 platform_web/pages/ServerDetailPage.tsx create mode 100644 platform_web/pages/ServersPage.tsx create mode 100644 platform_web/pages/UsersPage.tsx create mode 100644 platform_web/pages/pageRegistry.tsx create mode 100644 platform_web/routes/routes.md create mode 100644 platform_web/routes/routes.test.ts create mode 100644 platform_web/routes/routes.ts create mode 100644 platform_web/schemas/aiProviders.ts create mode 100644 platform_web/schemas/env.ts create mode 100644 platform_web/schemas/frontend-structure.md create mode 100644 platform_web/schemas/serverManagement.ts create mode 100644 platform_web/stores/navigation.ts create mode 100644 platform_web/stores/operations.ts create mode 100644 platform_web/stores/session.test.ts create mode 100644 platform_web/stores/session.ts create mode 100644 platform_web/theme/README.md create mode 100644 platform_web/theme/base-css.test.js create mode 100644 platform_web/theme/base.css create mode 100644 platform_web/theme/tokens.test.ts create mode 100644 platform_web/theme/tokens.ts create mode 100644 platform_web/tsconfig.json create mode 100644 platform_web/utils/classes.ts create mode 100644 platform_web/utils/diff.ts create mode 100644 platform_web/utils/pluginBridgeHost.test.ts create mode 100644 platform_web/utils/pluginBridgeHost.ts create mode 100644 platform_web/vite.config.ts create mode 100644 plugins/AGENTS.md create mode 100644 plugins/README.md create mode 100644 plugins/docs/local-development.md create mode 100644 plugins/examples/dev-game-plugin/manifest.json create mode 100644 plugins/examples/dev-game-plugin/schemas/create-form.schema.json create mode 100644 plugins/examples/scum-server-plugin/actions/install.json create mode 100644 plugins/examples/scum-server-plugin/actions/restart.json create mode 100644 plugins/examples/scum-server-plugin/actions/start.json create mode 100644 plugins/examples/scum-server-plugin/actions/status.json create mode 100644 plugins/examples/scum-server-plugin/actions/stop.json create mode 100644 plugins/examples/scum-server-plugin/manifest.json create mode 100644 plugins/examples/scum-server-plugin/schemas/create-form.schema.json create mode 100644 plugins/manifests/game-plugin.manifest.schema.json create mode 100644 plugins/package-lock.json create mode 100644 plugins/package.json create mode 100644 plugins/schemas/create-form.schema.json create mode 100644 plugins/scripts/validate-manifest.ts create mode 100644 plugins/sdk/bridge-contract.md create mode 100644 plugins/sdk/index.ts create mode 100644 plugins/tests/fixtures/create-form.invalid.json create mode 100644 plugins/tests/fixtures/create-form.valid.json create mode 100644 plugins/tests/fixtures/invalid-create-form-manifest.json create mode 100644 plugins/tests/fixtures/unsafe-manifest.json create mode 100644 plugins/tests/manifest-validation.test.ts create mode 100644 plugins/tsconfig.json create mode 100644 run/.env.example create mode 100644 run/AGENTS.md create mode 100644 run/Dockerfile create mode 100644 run/README.md create mode 100644 run/api/artifact_client_test.go create mode 100644 run/api/channel_isolation_test.go create mode 100644 run/api/job_client_test.go create mode 100644 run/api/log_ingest_client_test.go create mode 100644 run/api/platform_client.go create mode 100644 run/api/platform_client_test.go create mode 100644 run/artifact/README.md create mode 100644 run/cmd/run/main.go create mode 100644 run/config/config.go create mode 100644 run/config/config_test.go create mode 100644 run/domain/status.go create mode 100644 run/go.mod create mode 100644 run/logingest/README.md create mode 100644 run/protocol/artifact.go create mode 100644 run/protocol/artifact.md create mode 100644 run/protocol/control.go create mode 100644 run/protocol/control.md create mode 100644 run/protocol/game-client-bridge.md create mode 100644 run/protocol/job.go create mode 100644 run/protocol/job.md create mode 100644 run/protocol/job_validation.go create mode 100644 run/protocol/job_validation_test.go create mode 100644 run/protocol/log-ingest.md create mode 100644 run/protocol/log_ingest.go create mode 100644 run/runtime/lifecycle.go create mode 100644 run/runtime/lifecycle_test.go create mode 100644 run/runtime/smoke.go create mode 100644 run/runtime/smoke_test.go create mode 100644 run/runtime/worker.go create mode 100644 run/runtime/worker_test.go create mode 100644 run/spool/README.md create mode 100644 run/spool/artifact_queue.go create mode 100644 run/spool/artifact_queue_test.go create mode 100644 run/spool/channel_isolation_test.go create mode 100644 run/spool/log_spool.go create mode 100644 run/spool/log_spool_test.go create mode 100755 scripts/browser-acceptance.sh create mode 100755 scripts/check-all.sh create mode 100755 scripts/check-structure.sh create mode 100755 scripts/local-debug-env.sh create mode 100755 scripts/local-debug-reset.sh create mode 100755 scripts/local-debug-smoke.sh create mode 100755 scripts/local-debug-start.sh create mode 100755 scripts/local-debug-stop.sh diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..8ad0147 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,91 @@ +# AGENTS.md + +This file applies to the entire repository. + +## Scope + +This repository is a game server management platform. Do not add billing, cloud host sales, agent-provider/cloud-provider workflows, or unrelated SaaS marketplace features unless a future OpenSpec change explicitly requires them. + +The platform's required first-party areas are 首页、服务器管理、插件市场、用户管理、AI 提供商管理. + +The platform_web visual direction is a unified magical-girl crystal-moonlight game operations console. Preserve the style rules in `platform_web/AGENTS.md` and `platform_web/theme/README.md`; do not replace it with generic opaque SaaS cards or unrelated visual systems without a future OpenSpec change. Global magical ultimate effects belong in `platform_web/components/MagicalParticleLayer.tsx`, not in page-local fixed decoration spans or one-off backdrop CSS. + +## Frontend Design and Browser Tools + +For frontend work, agents are allowed and encouraged to use [@浏览器](plugin://browser@openai-bundled) to automatically open local frontend pages, inspect UI behavior, debug visual issues, and perform browser walkthrough verification. + +For frontend design work, agents are allowed and encouraged to use [$design-taste-frontend](/Users/tasia/.agents/skills/design-taste-frontend/SKILL.md) as a design review and implementation aid. Apply it in support of this repository's existing platform_web visual direction and local theme rules; it must not override the magical-girl crystal-moonlight game operations console style without a future OpenSpec change. + +## Project Roots + +- `platform/` contains backend platform code. +- `run/` contains the machine-side executor. +- `platform_web/` contains the management frontend. +- `plugins/` contains game management plugins and plugin SDK/examples. + +Do not place implementation code outside the matching root. Shared contracts must be generated or copied through explicit contract packages, not imported by reaching across ownership boundaries casually. + +## OpenSpec Rules + +- Every non-trivial change must start with an OpenSpec change under `openspec/changes/`. +- Update proposal/design/specs/tasks before implementation when behavior, architecture, or validation rules change. +- Do not mark tasks complete until their verification evidence exists. +- Run `openspec validate --strict` before completion. + +## Structure Rules + +Backend roots must keep these concerns in fixed directories: + +- API route declarations and handlers. +- Request/response DTOs. +- Domain types. +- Database models. +- Repository interfaces and implementations. +- Service interfaces and implementations. +- Protocol contracts. +- Validation rules. +- Shared utilities. + +Frontend and plugin page roots must keep these concerns in fixed directories: + +- API clients and API types. +- Route definitions. +- Page/view contracts. +- Component contracts. +- Schemas and validators. +- Bridge/SDK types. +- Shared utilities. + +Do not define business structs inside functions. Do not define request/response structs inside handlers. Do not define database models inside migrations. Do not hide shared frontend types inside page components. + +## Run and Channel Rules + +Run must not expose host paths, raw credentials, or direct sockets to plugins or platform_web. + +Run-platform communication must remain channelized: + +- Control is lightweight and high priority. +- Jobs carry lifecycle and bounded operations. +- Logs use durable batch ingest with local spool and sequence acknowledgement. +- Artifacts use chunked and resumable transfer with lower priority than logs/control. +- Optional game client bridge is separate from run lifecycle and log ingest. + +Large file transfer must not block control heartbeat, job ack/result, or log upload. + +## AI Provider Rules + +AI provider keys and base URLs belong to `platform/`. Plugins may request AI assistance only through platform-mediated capabilities. Plugin page must never receive raw AI keys. + +AI-suggested config changes must produce a reviewable diff or recommendation before platform dispatches a run-side write job. + +## Verification Rules + +Run this before completion: + +```bash +scripts/check-structure.sh +``` + +If you add or change a structural rule, update `scripts/check-structure.sh` in the same change. + +If work touches frontend pages, use a browser walkthrough before claiming the UI is accepted. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4648d7e --- /dev/null +++ b/README.md @@ -0,0 +1,192 @@ +# Game Server Management Platform + +This repository is the new game server management platform workspace. It replaces the old SCUM-specific coupling with four explicit project roots: + +- `platform/`: backend control plane for users, game management plugins, server instances, AI providers, jobs, artifacts, logs, and audit. +- `run/`: machine-side executor for scoped process, file, artifact, log, and lifecycle work. +- `platform_web/`: management console frontend. +- `plugins/`: game management plugin workspace. A plugin defines how to create and manage one server type, and one installed plugin can create many server instances. + +## Product Scope + +The platform focuses on: + +- 首页 +- 服务器管理 +- 插件市场 +- 用户管理 +- AI 提供商管理 + +AI 提供商 means model providers such as OpenAI-compatible endpoints, GPT providers, Claude-compatible relays, local model gateways, or custom base URL/key/model configurations. It does not mean run executors, host providers, billing providers, or cloud vendors. + +## Communication Model + +The platform must not use one overloaded channel for everything. Run communication is split by workload: + +- Control: hello, heartbeat, version, capabilities, capacity. +- Job: claim, ack, progress, result, cancel, reconcile. +- Logs: compressed batch ingest with sequence ack and local spool. +- Artifacts: chunked, resumable, checksummed, throttled file transfer. +- Game client bridge: optional in-game command and snapshot polling for games that require it. + +Logs are historical data, not a UI-only stream. Browser realtime tail may use platform SSE/WebSocket later, but run-to-platform logs must use durable ingest semantics. + +## Governance + +Read `AGENTS.md` before changing code. Each subproject also has a local `AGENTS.md` with stricter rules for that area. + +The bootstrap skeleton already includes fixed directories for backend DTOs/models/protocols, run channels, frontend API/routes/contracts, and plugin manifests/schemas/SDK files. `scripts/check-structure.sh` checks these required paths so future changes cannot silently drop or bypass them. + +## Development Baseline + +Current tool baseline: + +- Go 1.25.1 for `platform/` and `run/`. +- Node 22.17.0 and npm 11.6.1 for `platform_web/` and `plugins/`. + +Install JavaScript dependencies before the first full check: + +```bash +(cd platform_web && npm install) +(cd plugins && npm install) +``` + +Run all baseline checks from the repository root: + +```bash +scripts/check-all.sh +``` + +Run focused checks when working in one root: + +```bash +(cd platform && go test ./...) +(cd run && go test ./...) +(cd platform_web && npm run typecheck && npm run test && npm run build) +(cd plugins && npm run typecheck && npm run test && npm run validate:manifest) +``` + +Run the API-backed local debug workspace when you need platform, run, platform_web, and the dev plugin fixture together: + +```bash +scripts/local-debug-start.sh +scripts/local-debug-smoke.sh +``` + +See `docs/local-debug-workspace.md` for ports, disposable data roots, log files, reset steps, smoke evidence, and the required browser walkthrough. This workflow treats frontend local auth fallback as a verification failure. +Use `LOCAL_DEBUG_SELF_START=true scripts/local-debug-smoke.sh` when you need the smoke command to own the temporary local stack for the duration of the verification. + +Start local processes: + +```bash +(cd platform && go run ./cmd/platform) +(cd run && go run ./cmd/run) +(cd platform_web && npm run dev) +``` + +## Docker Deployment + +Use the root compose file for a local all-in-one deployment: + +```bash +docker compose up --build +``` + +Then open: + +- Web console: `http://127.0.0.1:5173` +- Platform API health: `http://127.0.0.1:8080/healthz` + +The compose deployment starts: + +- `platform`: backend on container port `8080`, published as host port `8080`. +- `run`: worker mode executor connected to `http://platform:8080`. +- `platform-web`: built static console served by Nginx on container port `80`, published as host port `5173`. + +Persistent Docker data lives in named volumes: + +- `platform-data`: platform metadata and segmented log bodies. +- `run-data`: run worker workspace and local spool data. + +The default Docker storage is file-backed: + +```text +PLATFORM_METADATA_PATH=/data/platform/metadata.json +PLATFORM_LOG_BODY_BACKEND=file +PLATFORM_LOG_DIR=/data/platform/logs +RUN_WORKSPACE_ROOT=/data/run/workspace +RUN_SPOOL_ROOT=/data/run/spool +``` + +To use MySQL for platform metadata in Docker, edit the existing `platform.environment` block in `docker-compose.yml`: + +```yaml +PLATFORM_STORAGE_BACKEND: mysql +PLATFORM_MYSQL_DSN: platform:platform@tcp(mysql:3306)/platform?parseTime=true +PLATFORM_LOG_BODY_BACKEND: file +``` + +Change the existing `PLATFORM_STORAGE_BACKEND: file` line to `mysql`, uncomment/add the `PLATFORM_MYSQL_DSN` line, then uncomment the `mysql` service and the `platform.depends_on.mysql` block in `docker-compose.yml`. + +MySQL stores platform metadata only: users, plugins, servers, jobs, audit events, log stream cursors, and indexes. Log bodies stay in `PLATFORM_LOG_DIR` as segmented files unless a future `LogBodyStore` adapter such as ClickHouse/Loki/OpenSearch is configured. Do not store hundreds or thousands of servers' log lines as one MySQL row per line. + +To change Docker ports, storage paths, MySQL DSN, or run identity, edit `docker-compose.yml`. Do not put real secrets in committed compose files; use a local untracked `.env` or shell environment for machine-specific values. + +## Local Debug Configuration + +Local direct execution uses environment variables, not a hard-required config file. Example files are provided so you can copy and modify them: + +```text +.env.example +platform/.env.example +run/.env.example +platform_web/.env.example +``` + +Typical local debugging: + +```bash +cp platform/.env.example platform/.env +cp run/.env.example run/.env +cp platform_web/.env.example platform_web/.env + +(cd platform && set -a && source .env && set +a && go run ./cmd/platform) +(cd run && set -a && source .env && set +a && go run ./cmd/run) +(cd platform_web && npm run dev) +``` + +Most common edits: + +- Platform port: `PLATFORM_ADDR=:8080`. +- Platform file persistence: `PLATFORM_STORAGE_BACKEND=file`, `PLATFORM_METADATA_PATH`, `PLATFORM_LOG_DIR`. +- Platform MySQL metadata: `PLATFORM_STORAGE_BACKEND=mysql`, `PLATFORM_MYSQL_DSN=platform:platform@tcp(127.0.0.1:3306)/platform?parseTime=true`. +- Log body persistence: `PLATFORM_LOG_BODY_BACKEND=file`, `PLATFORM_LOG_DIR`. +- Run worker mode: `RUN_MODE=worker`. +- Run-to-platform URL: `RUN_PLATFORM_URL=http://127.0.0.1:8080` locally, `http://platform:8080` in Docker. +- Run local data: `RUN_WORKSPACE_ROOT`, `RUN_SPOOL_ROOT`. +- Frontend API: `VITE_PLATFORM_API_BASE_URL=/api/v1`. +- Vite dev proxy: `PLATFORM_API_PROXY=http://127.0.0.1:8080`. + +For hundreds or thousands of servers, keep relational databases for platform metadata, stream state, indexes, retention policy, and audit. Do not store high-volume log bodies as one MySQL row per line; use a future `LogBodyStore` adapter for ClickHouse, Loki, OpenSearch/Elasticsearch, or object-storage segments. + +The frontend shell touches first-party pages, so UI changes require a browser walkthrough at desktop and mobile widths. + +Before claiming a change is complete, run: + +```bash +scripts/check-structure.sh +openspec validate --strict +``` + +If a change adds new required directories, contracts, generated artifacts, or architectural rules, update `scripts/check-structure.sh` in the same change. + +## OpenSpec Stream + +The bootstrap proposal and delivery stream live at: + +```text +openspec/changes/bootstrap-game-server-platform-architecture/ +openspec/changes/architecture-delivery-stream/ +``` + +Use `openspec/changes/architecture-delivery-stream/delivery-plan.md` to pick the next implementation change. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fa4374a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,90 @@ +services: + platform: + build: + context: . + dockerfile: platform/Dockerfile + environment: + PLATFORM_ADDR: ":8080" + # Metadata backend: + # - file: default Docker deployment, persisted in the platform-data volume. + # - mysql: change PLATFORM_STORAGE_BACKEND from file to mysql, uncomment PLATFORM_MYSQL_DSN, + # then uncomment the mysql service and depends_on block below. + PLATFORM_STORAGE_BACKEND: file + # PLATFORM_MYSQL_DSN: platform:platform@tcp(mysql:3306)/platform?parseTime=true + PLATFORM_DATA_DIR: /data/platform + PLATFORM_METADATA_PATH: /data/platform/metadata.json + # Log bodies are separate from metadata. Keep file for local Docker. + # MySQL should store metadata/cursors/indexes, not one row per log line. + PLATFORM_LOG_BODY_BACKEND: file + PLATFORM_LOG_DIR: /data/platform/logs + ports: + - "8080:8080" + volumes: + - platform-data:/data/platform + healthcheck: + test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8080/healthz"] + interval: 10s + timeout: 3s + retries: 12 + # To run platform metadata on MySQL, uncomment this dependency and the mysql service below. + # Also change PLATFORM_STORAGE_BACKEND above from file to mysql. + # depends_on: + # mysql: + # condition: service_healthy + + # Optional local MySQL metadata database. + # Uncomment this block plus PLATFORM_STORAGE_BACKEND/PLATFORM_MYSQL_DSN above. + # mysql: + # image: mysql:8.4 + # environment: + # MYSQL_DATABASE: platform + # MYSQL_USER: platform + # MYSQL_PASSWORD: platform + # MYSQL_ROOT_PASSWORD: platform-root + # ports: + # - "3306:3306" + # volumes: + # - mysql-data:/var/lib/mysql + # healthcheck: + # test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uplatform", "-pplatform"] + # interval: 10s + # timeout: 5s + # retries: 20 + + run: + build: + context: . + dockerfile: run/Dockerfile + depends_on: + platform: + condition: service_healthy + environment: + RUN_MODE: worker + RUN_PLATFORM_URL: http://platform:8080 + RUN_ENDPOINT_ID: run-docker + RUN_DISPLAY_NAME: Docker Run + RUN_VERSION: 0.1.0 + RUN_REGISTRATION_TOKEN: local-registration + RUN_WORKSPACE_ROOT: /data/run/workspace + RUN_SPOOL_ROOT: /data/run/spool + RUN_MAX_JOBS: "1" + RUN_HEARTBEAT_INTERVAL_MS: "15000" + RUN_POLL_INTERVAL_MS: "2000" + RUN_RETRY_BACKOFF_MS: "1000" + volumes: + - run-data:/data/run + + platform-web: + build: + context: . + dockerfile: platform_web/Dockerfile + depends_on: + platform: + condition: service_healthy + ports: + - "5173:80" + +volumes: + platform-data: + run-data: + # mysql-data: diff --git a/docs/local-debug-workspace.md b/docs/local-debug-workspace.md new file mode 100644 index 0000000..8032989 --- /dev/null +++ b/docs/local-debug-workspace.md @@ -0,0 +1,171 @@ +# Local Debug Workspace + +The local debug workspace runs the real platform API, run worker, platform_web console, and the development game plugin fixture together. It is for API-backed local proof, not demo-only fallback. + +## Scope + +- Platform listens on `http://127.0.0.1:18080` by default. +- platform_web listens on `http://127.0.0.1:5173` by default and proxies `/api/v1` plus `/healthz` to platform. +- Run worker registers as `run-local-debug`. +- Disposable state lives under `.local-debug/`. +- Logs live under `.local-debug/logs/`. +- PIDs live under `.local-debug/pids/`. +- Go build cache for local services lives under `.local-debug/go-build-cache/`. +- The dev plugin fixture is `plugins/examples/dev-game-plugin/manifest.json`. + +The workflow does not require Docker-only infrastructure, external cloud services, real game binaries, raw credentials, raw AI keys, direct run sockets, or browser/plugin direct access to run. + +## Start + +```bash +scripts/local-debug-start.sh +``` + +The script prints the resolved platform URL, platform_web URL, log files, and the exact local account for browser login: + +- Account: `operator.local@example.test` +- Password: `operator-local` + +Useful defaults can be overridden before running the script: + +```bash +LOCAL_DEBUG_PLATFORM_PORT=18081 LOCAL_DEBUG_WEB_PORT=5174 scripts/local-debug-start.sh +``` + +## Environment + +The scripts source `scripts/local-debug-env.sh`. + +Key platform variables: + +- `PLATFORM_ADDR=127.0.0.1:18080` +- `PLATFORM_STORAGE_BACKEND=file` +- `PLATFORM_DATA_DIR=.local-debug/platform` +- `PLATFORM_METADATA_PATH=.local-debug/platform/metadata.json` +- `PLATFORM_LOG_BODY_BACKEND=file` +- `PLATFORM_LOG_DIR=.local-debug/platform/logs` +- `GOCACHE=.local-debug/go-build-cache` + +Key run variables: + +- `RUN_MODE=worker` +- `RUN_PLATFORM_URL=http://127.0.0.1:18080` +- `RUN_ENDPOINT_ID=run-local-debug` +- `RUN_WORKSPACE_ROOT=.local-debug/run/workspace` +- `RUN_SPOOL_ROOT=.local-debug/run/spool` + +Key frontend variables: + +- `PLATFORM_API_PROXY=http://127.0.0.1:18080` +- `VITE_PLATFORM_API_BASE_URL=/api/v1` +- `VITE_ENABLE_LOCAL_AUTH_FALLBACK=false` + +`VITE_ENABLE_LOCAL_AUTH_FALLBACK=false` is required. Local fallback data is a smoke failure for this workspace. + +## Smoke + +Start the stack, then run: + +```bash +scripts/local-debug-smoke.sh +``` + +For one-command verification in environments that clean up background processes when a command returns, run: + +```bash +LOCAL_DEBUG_SELF_START=true scripts/local-debug-smoke.sh +``` + +The smoke command verifies: + +- platform health at `/healthz`. +- API-backed login for the seeded local platform administrator. +- dev plugin manifest validation and registration through `POST /api/v1/game-plugins/register-manifest`. +- run endpoint heartbeat through `GET /api/v1/run/endpoints?status=online`. +- server lifecycle fixture setup through `POST /api/v1/server-instances/workflows/create`. +- job, log stream, artifact, marketplace, and server list references. +- `PLATFORM_API_PROXY` and `VITE_PLATFORM_API_BASE_URL=/api/v1`. +- `VITE_ENABLE_LOCAL_AUTH_FALLBACK=false`. +- absence of forbidden fragments in API evidence: `/Users/`, `/private/`, `unix://`, `tcp://`, `Bearer `, `sk-`, `password=`, `apiKeyRef`, `rawApiKey`, run session tokens, direct run URLs, and plugin-owned transport details. + +Smoke evidence is written to `.local-debug/smoke/`. + +## Automated Browser Acceptance + +Run the automated browser acceptance suite when you need repeatable proof for the API-backed console routes: + +```bash +LOCAL_DEBUG_PLATFORM_PORT=18189 LOCAL_DEBUG_WEB_PORT=5183 LOCAL_DEBUG_ROOT=/private/tmp/browser-local-debug-acceptance scripts/browser-acceptance.sh +``` + +By default the command safely resets the configured local debug root, starts platform, run worker, and platform_web, runs `scripts/local-debug-smoke.sh`, verifies browser-facing route contracts, and cleans up the self-started stack. Set `BROWSER_ACCEPTANCE_SELF_START=false` to run against an already-started local debug stack. + +Acceptance evidence is written to: + +```text +/browser-acceptance/browser-acceptance-evidence.json +``` + +The evidence records stack URLs, the smoke seed evidence directory, first-party route checks, plugin/server operation proof, fallback scans, and forbidden-fragment scans. + +## Browser Walkthrough + +After `scripts/local-debug-smoke.sh` passes, open platform_web: + +```text +http://127.0.0.1:5173 +``` + +Required walkthrough: + +- Login with `operator.local@example.test` / `operator-local`. +- Confirm no local fallback banner, local fallback workspace, or demo-only session is visible. +- Open 首页. +- Open 服务器管理. +- Open 插件市场. +- Open 用户管理. +- Open AI 提供商管理. +- Inspect `server-local-debug` server detail, plugin controls or marketplace detail, operation history, log references, and artifact references. +- Scan visible browser text for forbidden fragments: `/Users/`, `/private/`, `unix://`, `tcp://`, `Bearer `, `sk-`, `password=`, `apiKeyRef`, `rawApiKey`, run session tokens, direct run URLs, and plugin-owned transport details. + +Acceptance requires logical IDs, platform routes, job refs, log refs, artifact refs, and safe metadata only. + +## Stop + +```bash +scripts/local-debug-stop.sh +``` + +## Reset + +```bash +scripts/local-debug-reset.sh +``` + +Reset stops the local debug processes and deletes only the documented local debug root. By default that root is: + +```text +.local-debug +``` + +The reset script refuses unexpected roots. It allows only: + +- `/.local-debug` +- `/private/tmp/browser-local-debug-*` +- `/tmp/browser-local-debug-*` + +## Manual Commands + +The start script wraps these commands with the local debug environment: + +```bash +go run ./platform/cmd/platform +go run ./run/cmd/run +npm --prefix platform_web run dev -- --port 5173 +``` + +The dev plugin fixture validation command is: + +```bash +cd plugins && npm run validate:manifest +``` diff --git a/go_build_main_go b/go_build_main_go new file mode 100755 index 0000000..bb7da68 --- /dev/null +++ b/go_build_main_go @@ -0,0 +1 @@ +ELF \ No newline at end of file diff --git a/main b/main new file mode 100755 index 0000000000000000000000000000000000000000..478e41d42f6ce75809ea544cf3582904554d3831 GIT binary patch literal 5016434 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%0A;W-+$Xw(qfYu?q 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