Some checks failed
Main Confidence / confidence (push) Failing after 45s
## Summary - introduce surface-aware compressed governance outcomes and reuse the shared truth/explanation seams for operator-first summaries - apply the compressed outcome hierarchy across baseline, evidence, review, review-pack, canonical review/evidence, and artifact-oriented operation-run surfaces - expand spec 214 fixtures and Pest coverage, and fix tenant-panel route assertions by generating explicit tenant-panel URLs in the affected Filament tests ## Validation - `cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` - focused governance compression suite from `specs/214-governance-outcome-compression/quickstart.md` passed (`68` tests, `445` assertions) - `cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Filament/InventoryItemResourceTest.php tests/Feature/Filament/BackupSetUiEnforcementTest.php tests/Feature/Filament/RestoreRunUiEnforcementTest.php` passed (`18` tests, `81` assertions) Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #253
162 lines
4.6 KiB
Plaintext
162 lines
4.6 KiB
Plaintext
"use strict";
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames(from))
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
var chat_exports = {};
|
|
__export(chat_exports, {
|
|
Chat: () => Chat,
|
|
asString: () => asString
|
|
});
|
|
module.exports = __toCommonJS(chat_exports);
|
|
var import_transport = require("../transport");
|
|
class Chat {
|
|
constructor(wsEndpoint) {
|
|
this._history = [];
|
|
this._chatSinks = /* @__PURE__ */ new Map();
|
|
this._wsEndpoint = wsEndpoint;
|
|
}
|
|
clearHistory() {
|
|
this._history = [];
|
|
}
|
|
async post(prompt) {
|
|
await this._append("user", prompt);
|
|
let text = await asString(await this._post());
|
|
if (text.startsWith("```json") && text.endsWith("```"))
|
|
text = text.substring("```json".length, text.length - "```".length);
|
|
for (let i = 0; i < 3; ++i) {
|
|
try {
|
|
return JSON.parse(text);
|
|
} catch (e) {
|
|
await this._append("user", String(e));
|
|
}
|
|
}
|
|
throw new Error("Failed to parse response: " + text);
|
|
}
|
|
async _append(user, content) {
|
|
this._history.push({ user, content });
|
|
}
|
|
async _connection() {
|
|
if (!this._connectionPromise) {
|
|
this._connectionPromise = import_transport.WebSocketTransport.connect(void 0, this._wsEndpoint).then((transport) => {
|
|
return new Connection(transport, (method, params) => this._dispatchEvent(method, params), () => {
|
|
});
|
|
});
|
|
}
|
|
return this._connectionPromise;
|
|
}
|
|
_dispatchEvent(method, params) {
|
|
if (method === "chatChunk") {
|
|
const { chatId, chunk } = params;
|
|
const chunkSink = this._chatSinks.get(chatId);
|
|
chunkSink(chunk);
|
|
if (!chunk)
|
|
this._chatSinks.delete(chatId);
|
|
}
|
|
}
|
|
async _post() {
|
|
const connection = await this._connection();
|
|
const result = await connection.send("chat", { history: this._history });
|
|
const { chatId } = result;
|
|
const { iterable, addChunk } = iterablePump();
|
|
this._chatSinks.set(chatId, addChunk);
|
|
return iterable;
|
|
}
|
|
}
|
|
async function asString(stream) {
|
|
let result = "";
|
|
for await (const chunk of stream)
|
|
result += chunk;
|
|
return result;
|
|
}
|
|
function iterablePump() {
|
|
let controller;
|
|
const stream = new ReadableStream({ start: (c) => controller = c });
|
|
const iterable = (async function* () {
|
|
const reader = stream.getReader();
|
|
while (true) {
|
|
const { done, value } = await reader.read();
|
|
if (done)
|
|
break;
|
|
yield value;
|
|
}
|
|
})();
|
|
return {
|
|
iterable,
|
|
addChunk: (chunk) => {
|
|
if (chunk)
|
|
controller.enqueue(chunk);
|
|
else
|
|
controller.close();
|
|
}
|
|
};
|
|
}
|
|
class Connection {
|
|
constructor(transport, onEvent, onClose) {
|
|
this._lastId = 0;
|
|
this._closed = false;
|
|
this._pending = /* @__PURE__ */ new Map();
|
|
this._transport = transport;
|
|
this._onEvent = onEvent;
|
|
this._onClose = onClose;
|
|
this._transport.onmessage = this._dispatchMessage.bind(this);
|
|
this._transport.onclose = this._close.bind(this);
|
|
}
|
|
send(method, params) {
|
|
const id = this._lastId++;
|
|
const message = { id, method, params };
|
|
this._transport.send(message);
|
|
return new Promise((resolve, reject) => {
|
|
this._pending.set(id, { resolve, reject });
|
|
});
|
|
}
|
|
_dispatchMessage(message) {
|
|
if (message.id === void 0) {
|
|
this._onEvent(message.method, message.params);
|
|
return;
|
|
}
|
|
const callback = this._pending.get(message.id);
|
|
this._pending.delete(message.id);
|
|
if (!callback)
|
|
return;
|
|
if (message.error) {
|
|
callback.reject(new Error(message.error.message));
|
|
return;
|
|
}
|
|
callback.resolve(message.result);
|
|
}
|
|
_close() {
|
|
this._closed = true;
|
|
this._transport.onmessage = void 0;
|
|
this._transport.onclose = void 0;
|
|
for (const { reject } of this._pending.values())
|
|
reject(new Error("Connection closed"));
|
|
this._onClose();
|
|
}
|
|
isClosed() {
|
|
return this._closed;
|
|
}
|
|
close() {
|
|
if (!this._closed)
|
|
this._transport.close();
|
|
}
|
|
}
|
|
// Annotate the CommonJS export names for ESM import in node:
|
|
0 && (module.exports = {
|
|
Chat,
|
|
asString
|
|
});
|