@struktoai/mirage-core
Version:
A Unified Virtual Filesystem For AI Agents
45 lines • 2.13 kB
JavaScript
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
import { FlagView } from "../../../spec/flag_view.js";
import { sendMessage } from "../../../../core/discord/post.js";
import { IOResult } from "../../../../io/types.js";
import { compactJsonBytes } from "../../../../core/render/json.js";
import { fsStrerror, isEnotdir, isMissingPath } from "../../../../errors/fs.js";
import { posixPhrase } from "../../../../errors/posix.js";
import { rstripSlash } from "../../../../utils/slash.js";
async function attachment(vfs, source) {
if (source === undefined)
return undefined;
if (vfs === undefined)
throw new Error('--file needs a workspace to read files from');
let data;
try {
data = await vfs.read(source);
}
catch (err) {
if (isMissingPath(err) || isEnotdir(err)) {
throw new Error(`read ${source.virtual}: ${fsStrerror(err) ?? posixPhrase('ENOENT')}`);
}
throw err;
}
const trimmed = rstripSlash(source.virtual);
return { name: trimmed.slice(trimmed.lastIndexOf('/') + 1), data };
}
export async function send(accessor, _paths, _texts, ctx) {
const fl = new FlagView(ctx.flags, ctx.spec);
const result = await sendMessage(accessor, fl.asStr('channel') ?? '', fl.asStr('text') ?? '', fl.asStr('reply_to') ?? undefined, await attachment(ctx.vfs, fl.asPath('file')));
const out = compactJsonBytes(result);
return [out, new IOResult()];
}
//# sourceMappingURL=send.js.map