@mono-agent/agent-app 0.6.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +210 -19
- package/dist/adapter-send-proxy.d.ts +18 -0
- package/dist/adapter-send-proxy.d.ts.map +1 -0
- package/dist/adapter-send-proxy.js +229 -0
- package/dist/adapter-send-proxy.js.map +1 -0
- package/dist/adapter-send-tools-main.js +62 -4
- package/dist/adapter-send-tools-main.js.map +1 -1
- package/dist/adapter-send-tools.d.ts +33 -6
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +485 -87
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +8 -0
- package/dist/app-config.js.map +1 -1
- package/dist/app.d.ts +2 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +528 -135
- package/dist/app.js.map +1 -1
- package/dist/broadcast-recorder.d.ts.map +1 -1
- package/dist/broadcast-recorder.js +24 -2
- package/dist/broadcast-recorder.js.map +1 -1
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +16 -6
- package/dist/channels.js.map +1 -1
- package/dist/cli.d.ts +76 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2102 -102
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +195 -6
- package/dist/config-reference.js.map +1 -1
- package/dist/configuration-proposal-main.d.ts +3 -0
- package/dist/configuration-proposal-main.d.ts.map +1 -0
- package/dist/configuration-proposal-main.js +13 -0
- package/dist/configuration-proposal-main.js.map +1 -0
- package/dist/configuration-proposal-tool.d.ts +26 -0
- package/dist/configuration-proposal-tool.d.ts.map +1 -0
- package/dist/configuration-proposal-tool.js +139 -0
- package/dist/configuration-proposal-tool.js.map +1 -0
- package/dist/configured-agent.d.ts +12 -0
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +150 -18
- package/dist/configured-agent.js.map +1 -1
- package/dist/consumer-contract.d.ts +3 -0
- package/dist/consumer-contract.d.ts.map +1 -1
- package/dist/consumer-contract.js +44 -1
- package/dist/consumer-contract.js.map +1 -1
- package/dist/doctor.d.ts +27 -5
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +1197 -101
- package/dist/doctor.js.map +1 -1
- package/dist/first-run-managed-memory.d.ts +39 -0
- package/dist/first-run-managed-memory.d.ts.map +1 -0
- package/dist/first-run-managed-memory.js +521 -0
- package/dist/first-run-managed-memory.js.map +1 -0
- package/dist/first-run-readiness.d.ts +111 -0
- package/dist/first-run-readiness.d.ts.map +1 -0
- package/dist/first-run-readiness.js +757 -0
- package/dist/first-run-readiness.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +88 -3
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1212 -23
- package/dist/init.js.map +1 -1
- package/dist/interaction-bridge.d.ts +25 -1
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/interaction-bridge.js +281 -19
- package/dist/interaction-bridge.js.map +1 -1
- package/dist/local-configuration.d.ts +56 -0
- package/dist/local-configuration.d.ts.map +1 -0
- package/dist/local-configuration.js +914 -0
- package/dist/local-configuration.js.map +1 -0
- package/dist/memory-command.d.ts +4 -0
- package/dist/memory-command.d.ts.map +1 -1
- package/dist/memory-command.js +751 -27
- package/dist/memory-command.js.map +1 -1
- package/dist/memory-recall.d.ts +38 -10
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +82 -25
- package/dist/memory-recall.js.map +1 -1
- package/dist/memory-retrieval.d.ts +66 -0
- package/dist/memory-retrieval.d.ts.map +1 -0
- package/dist/memory-retrieval.js +332 -0
- package/dist/memory-retrieval.js.map +1 -0
- package/dist/modules/base.d.ts +6 -5
- package/dist/modules/base.d.ts.map +1 -1
- package/dist/modules/base.js +11 -7
- package/dist/modules/base.js.map +1 -1
- package/dist/modules/catalog.d.ts.map +1 -1
- package/dist/modules/catalog.js +54 -20
- package/dist/modules/catalog.js.map +1 -1
- package/dist/modules/index.d.ts +2 -2
- package/dist/modules/index.d.ts.map +1 -1
- package/dist/modules/index.js +1 -1
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/known-tools.d.ts +3 -0
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +11 -1
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/modules/types.d.ts +20 -6
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/modules/types.js.map +1 -1
- package/dist/package-version.d.ts +3 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +14 -0
- package/dist/package-version.js.map +1 -0
- package/dist/pi-auth-store-inspection.d.ts +21 -0
- package/dist/pi-auth-store-inspection.d.ts.map +1 -0
- package/dist/pi-auth-store-inspection.js +120 -0
- package/dist/pi-auth-store-inspection.js.map +1 -0
- package/dist/pi-oauth-login-main.d.ts +3 -0
- package/dist/pi-oauth-login-main.d.ts.map +1 -0
- package/dist/pi-oauth-login-main.js +14 -0
- package/dist/pi-oauth-login-main.js.map +1 -0
- package/dist/pi-oauth-login.d.ts +22 -0
- package/dist/pi-oauth-login.d.ts.map +1 -0
- package/dist/pi-oauth-login.js +79 -0
- package/dist/pi-oauth-login.js.map +1 -0
- package/dist/project-skills.d.ts +40 -0
- package/dist/project-skills.d.ts.map +1 -0
- package/dist/project-skills.js +573 -0
- package/dist/project-skills.js.map +1 -0
- package/dist/provider-setup.d.ts +117 -2
- package/dist/provider-setup.d.ts.map +1 -1
- package/dist/provider-setup.js +1505 -49
- package/dist/provider-setup.js.map +1 -1
- package/dist/readiness-probe-worker.d.ts +12 -0
- package/dist/readiness-probe-worker.d.ts.map +1 -0
- package/dist/readiness-probe-worker.js +276 -0
- package/dist/readiness-probe-worker.js.map +1 -0
- package/dist/readiness-probe.d.ts +100 -0
- package/dist/readiness-probe.d.ts.map +1 -0
- package/dist/readiness-probe.js +780 -0
- package/dist/readiness-probe.js.map +1 -0
- package/dist/request-model-override.d.ts +43 -1
- package/dist/request-model-override.d.ts.map +1 -1
- package/dist/request-model-override.js +178 -19
- package/dist/request-model-override.js.map +1 -1
- package/dist/run-history.d.ts +32 -0
- package/dist/run-history.d.ts.map +1 -0
- package/dist/run-history.js +859 -0
- package/dist/run-history.js.map +1 -0
- package/dist/runs-health.d.ts.map +1 -1
- package/dist/runs-health.js +12 -4
- package/dist/runs-health.js.map +1 -1
- package/dist/runtime-option-extensions.d.ts +14 -0
- package/dist/runtime-option-extensions.d.ts.map +1 -0
- package/dist/runtime-option-extensions.js +98 -0
- package/dist/runtime-option-extensions.js.map +1 -0
- package/dist/runtime-routes.d.ts +9 -0
- package/dist/runtime-routes.d.ts.map +1 -0
- package/dist/runtime-routes.js +13 -0
- package/dist/runtime-routes.js.map +1 -0
- package/dist/sandbox-manager.d.ts +69 -0
- package/dist/sandbox-manager.d.ts.map +1 -0
- package/dist/sandbox-manager.js +856 -0
- package/dist/sandbox-manager.js.map +1 -0
- package/dist/supermemory-plugin.d.ts +54 -0
- package/dist/supermemory-plugin.d.ts.map +1 -0
- package/dist/supermemory-plugin.js +136 -0
- package/dist/supermemory-plugin.js.map +1 -0
- package/dist/tui-command.d.ts +15 -0
- package/dist/tui-command.d.ts.map +1 -1
- package/dist/tui-command.js +46 -6
- package/dist/tui-command.js.map +1 -1
- package/dist/web-command.d.ts +8 -0
- package/dist/web-command.d.ts.map +1 -1
- package/dist/web-command.js +174 -17
- package/dist/web-command.js.map +1 -1
- package/dist/wizard/answers.d.ts +31 -4
- package/dist/wizard/answers.d.ts.map +1 -1
- package/dist/wizard/answers.js +145 -16
- package/dist/wizard/answers.js.map +1 -1
- package/dist/wizard/from-flags.d.ts +7 -0
- package/dist/wizard/from-flags.d.ts.map +1 -1
- package/dist/wizard/from-flags.js +36 -2
- package/dist/wizard/from-flags.js.map +1 -1
- package/dist/wizard/index.d.ts +4 -4
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +2 -2
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/model-discovery.d.ts +33 -2
- package/dist/wizard/model-discovery.d.ts.map +1 -1
- package/dist/wizard/model-discovery.js +826 -108
- package/dist/wizard/model-discovery.js.map +1 -1
- package/dist/wizard/presets.d.ts +1 -1
- package/dist/wizard/presets.d.ts.map +1 -1
- package/dist/wizard/presets.js +7 -12
- package/dist/wizard/presets.js.map +1 -1
- package/dist/wizard/prompts.d.ts +56 -9
- package/dist/wizard/prompts.d.ts.map +1 -1
- package/dist/wizard/prompts.js +172 -20
- package/dist/wizard/prompts.js.map +1 -1
- package/dist/wizard/run.d.ts +59 -3
- package/dist/wizard/run.d.ts.map +1 -1
- package/dist/wizard/run.js +1133 -191
- package/dist/wizard/run.js.map +1 -1
- package/package.json +21 -16
- package/resources/srt/package-lock.json +66 -0
- package/resources/srt/package.json +9 -0
- package/schema/mono-agent.config.schema.json +381 -17
- package/skills/mono-agent-composer/SKILL.md +4 -4
- package/skills/mono-agent-composer/references/config-blueprint.md +5 -4
- package/skills/mono-agent-composer/references/discovery-questions.md +8 -8
- package/skills/mono-agent-composer/references/feature-coverage.md +8 -6
- package/skills/mono-agent-composer/references/package-map.md +1 -1
- package/skills/mono-agent-composer/references/playbooks.md +8 -7
- package/skills/mono-agent-composer/references/validation.md +1 -1
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, constants, fchmodSync, fstatSync, fsyncSync, lstatSync, openSync, readFileSync, realpathSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { lstat, mkdir, readFile, realpath, stat } from "node:fs/promises";
|
|
4
|
+
import { basename, dirname, join, relative, resolve, sep } from "node:path";
|
|
5
|
+
import { isDeepStrictEqual } from "node:util";
|
|
6
|
+
export const PROJECT_SKILL_VERSION = "1.0.0";
|
|
7
|
+
export const PROJECT_SKILL_MANIFEST_PATH = "skills/.mono-agent-managed.json";
|
|
8
|
+
export const PROJECT_SKILL_NAMES = [
|
|
9
|
+
"mono-agent-configure",
|
|
10
|
+
"mono-agent-memory",
|
|
11
|
+
];
|
|
12
|
+
const CONFIGURE_SKILL = `---
|
|
13
|
+
name: mono-agent-configure
|
|
14
|
+
description: Safely refine this agent's identity and config from the local mono-agent TUI.
|
|
15
|
+
version: ${PROJECT_SKILL_VERSION}
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Configure this agent
|
|
19
|
+
|
|
20
|
+
Use this skill when the operator asks to configure, tune, or change this agent.
|
|
21
|
+
|
|
22
|
+
1. Treat the current resolved config, IDENTITY.md, and validation output as operational truth. Memory may recall preferences, but never use memory as proof that a change is active.
|
|
23
|
+
2. Ask at most one focused question at a time. If the operator gives an ordinary task instead of configuration intent, perform that task and stop the configuration flow.
|
|
24
|
+
3. Never ask for API keys, OAuth tokens, passwords, bot tokens, or other secrets in chat. Explain the exact masked mono-agent auth or owner-only .env flow instead.
|
|
25
|
+
4. For a safe local change, call ProposeAgentConfiguration with a short rationale, an RFC 6902 JSON Patch against mono-agent.config.json, and optionally a replacement body for the existing ## Role section in IDENTITY.md.
|
|
26
|
+
5. Do not claim the proposal was applied. The host validates it, shows an out-of-band diff, and requires the operator to approve it.
|
|
27
|
+
6. Keep config proposals to the host's documented low-risk allowlist: public name; effort, turn/session UX; selected project skills and disclosure; memory size or MemoryRecall enablement; and tool-policy tightening. Paths, memory tier/capture behavior, external MCP servers, plugins, channels or cron/proactive jobs, tool/runtime permissions, model-route or provider posture, embeddings/LLM endpoints, exporters, sandboxing, and network exposure require the explicit guided flow named by the host.
|
|
28
|
+
|
|
29
|
+
Keep proposals minimal. Preserve unrelated config, existing knowledge references, and every identity section except the optional Role body.
|
|
30
|
+
`;
|
|
31
|
+
const MEMORY_SKILL = `---
|
|
32
|
+
name: mono-agent-memory
|
|
33
|
+
description: Choose, inspect, and tune mono-agent's built-in memory without guessing about stored state.
|
|
34
|
+
version: ${PROJECT_SKILL_VERSION}
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
# Configure memory
|
|
38
|
+
|
|
39
|
+
Use this skill when the operator asks how this agent should remember information.
|
|
40
|
+
|
|
41
|
+
- No memory: conversations do not create durable cross-session memory.
|
|
42
|
+
- Lite: deterministic lexical recall with the smallest dependency and operating surface.
|
|
43
|
+
- Journal: deterministic semantic recall and background indexing, without capture-model calls.
|
|
44
|
+
- BuJo: curated capture plus entity relationships; use it only when the extra model work and graph behavior are valuable.
|
|
45
|
+
|
|
46
|
+
MemoryRecall is a read-only tool and is enabled by default whenever a memory tier is configured. Use it to recover prior preferences, but inspect the current config and memory audit before describing what is active.
|
|
47
|
+
|
|
48
|
+
Never paste remembered private content into a config proposal. Never request embedding or provider secrets in chat. Hand credential setup to the masked guided flow.
|
|
49
|
+
|
|
50
|
+
Use ProposeAgentConfiguration only to adjust memory.maxBytes or memory.recallTool.enabled. Memory tier, path, write/capture behavior, consolidation, embeddings, LLM, provider, endpoint, and credential changes belong in the explicit guided flow. Explain prerequisite services and expected indexing/capture cost before handing Journal or BuJo setup to that flow. The host, not this skill, decides whether a candidate validates and can be applied.
|
|
51
|
+
`;
|
|
52
|
+
export const BUNDLED_PROJECT_SKILLS = [
|
|
53
|
+
{ name: "mono-agent-configure", contents: CONFIGURE_SKILL },
|
|
54
|
+
{ name: "mono-agent-memory", contents: MEMORY_SKILL },
|
|
55
|
+
];
|
|
56
|
+
function sha256(contents) {
|
|
57
|
+
return createHash("sha256").update(contents).digest("hex");
|
|
58
|
+
}
|
|
59
|
+
function desiredManifest() {
|
|
60
|
+
return {
|
|
61
|
+
schema: "mono-agent.managed-project-skills.v1",
|
|
62
|
+
version: PROJECT_SKILL_VERSION,
|
|
63
|
+
skills: Object.fromEntries(BUNDLED_PROJECT_SKILLS.map((skill) => [
|
|
64
|
+
skill.name,
|
|
65
|
+
{ sha256: sha256(skill.contents) },
|
|
66
|
+
])),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function managedProjectSkillFiles() {
|
|
70
|
+
const manifest = desiredManifest();
|
|
71
|
+
return [
|
|
72
|
+
...BUNDLED_PROJECT_SKILLS.map((skill) => ({
|
|
73
|
+
path: `skills/${skill.name}/SKILL.md`,
|
|
74
|
+
contents: skill.contents,
|
|
75
|
+
})),
|
|
76
|
+
{
|
|
77
|
+
path: PROJECT_SKILL_MANIFEST_PATH,
|
|
78
|
+
contents: `${JSON.stringify(manifest, null, 2)}\n`,
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
export async function checkManagedProjectSkills(cwd) {
|
|
83
|
+
const root = await canonicalManagedRoot(cwd);
|
|
84
|
+
const manifestPath = join(root, PROJECT_SKILL_MANIFEST_PATH);
|
|
85
|
+
await inspectManagedFileInside(root, manifestPath, "Managed project-skill manifest");
|
|
86
|
+
const manifest = await readManifest(manifestPath);
|
|
87
|
+
const desired = desiredManifest();
|
|
88
|
+
const statuses = [];
|
|
89
|
+
for (const skill of BUNDLED_PROJECT_SKILLS) {
|
|
90
|
+
const path = join(root, "skills", skill.name, "SKILL.md");
|
|
91
|
+
await inspectManagedFileInside(root, path, `Managed project skill ${skill.name}`);
|
|
92
|
+
const expectedSha256 = desired.skills[skill.name].sha256;
|
|
93
|
+
const installed = await readOptional(path);
|
|
94
|
+
if (installed === undefined) {
|
|
95
|
+
statuses.push({ name: skill.name, path, status: "missing", expectedSha256 });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const installedSha256 = sha256(installed);
|
|
99
|
+
const recorded = manifest?.skills[skill.name]?.sha256;
|
|
100
|
+
if (recorded === undefined) {
|
|
101
|
+
statuses.push({ name: skill.name, path, status: "collision", installedSha256, expectedSha256 });
|
|
102
|
+
}
|
|
103
|
+
else if (installedSha256 !== recorded) {
|
|
104
|
+
statuses.push({ name: skill.name, path, status: "modified", installedSha256, expectedSha256 });
|
|
105
|
+
}
|
|
106
|
+
else if (installedSha256 !== expectedSha256 || manifest?.version !== PROJECT_SKILL_VERSION) {
|
|
107
|
+
statuses.push({ name: skill.name, path, status: "stale", installedSha256, expectedSha256 });
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
statuses.push({ name: skill.name, path, status: "ready", installedSha256, expectedSha256 });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
manifestPath,
|
|
115
|
+
...(manifest?.version === undefined ? {} : { manifestVersion: manifest.version }),
|
|
116
|
+
statuses,
|
|
117
|
+
ok: statuses.every((status) => status.status === "ready"),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** Fail before init writes anything when an existing skill would be claimed or overwritten. */
|
|
121
|
+
export async function assertManagedProjectSkillInitSafe(cwd) {
|
|
122
|
+
const check = await checkManagedProjectSkills(cwd);
|
|
123
|
+
const conflicts = check.statuses.filter((entry) => entry.status === "collision" || entry.status === "modified");
|
|
124
|
+
if (conflicts.length === 0)
|
|
125
|
+
return;
|
|
126
|
+
throw new Error(`Project skill collision: ${conflicts.map((entry) => entry.path).join(", ")} contains operator-managed content. ` +
|
|
127
|
+
"Move or rename the colliding skill, or keep it and select a different skill name; mono-agent will not overwrite it.");
|
|
128
|
+
}
|
|
129
|
+
export async function updateManagedProjectSkills(cwd, options = {}) {
|
|
130
|
+
const root = await canonicalManagedRoot(cwd);
|
|
131
|
+
return await withManagedProjectSkillLock(root, async () => await updateManagedProjectSkillsUnlocked(root, options));
|
|
132
|
+
}
|
|
133
|
+
async function updateManagedProjectSkillsUnlocked(root, options) {
|
|
134
|
+
const before = await checkManagedProjectSkills(root);
|
|
135
|
+
const unsafe = before.statuses.filter((entry) => entry.status === "modified" || entry.status === "collision");
|
|
136
|
+
if (unsafe.length > 0) {
|
|
137
|
+
throw new Error(`Refusing to update operator-modified project skills: ${unsafe.map((entry) => `${entry.name} (${entry.path})`).join(", ")}. ` +
|
|
138
|
+
"Copy your edits elsewhere or restore the recorded managed version, then retry.");
|
|
139
|
+
}
|
|
140
|
+
const needsUpdate = before.statuses.filter((entry) => entry.status !== "ready");
|
|
141
|
+
if (needsUpdate.length === 0) {
|
|
142
|
+
return { ...before, updated: [] };
|
|
143
|
+
}
|
|
144
|
+
const changeId = `${new Date().toISOString().replace(/[:.]/gu, "-")}-${randomUUID().slice(0, 8)}`;
|
|
145
|
+
const backupDir = join(root, "skills", ".mono-agent-backups", changeId);
|
|
146
|
+
await ensureOwnedManagedDirectoryInside(root, backupDir, "Managed project-skill backup directory");
|
|
147
|
+
const skillTargets = BUNDLED_PROJECT_SKILLS.flatMap((skill) => {
|
|
148
|
+
const status = needsUpdate.find((entry) => entry.name === skill.name);
|
|
149
|
+
return status === undefined ? [] : [{ path: status.path, contents: skill.contents, name: skill.name }];
|
|
150
|
+
});
|
|
151
|
+
const manifestPath = join(root, PROJECT_SKILL_MANIFEST_PATH);
|
|
152
|
+
const manifestContents = `${JSON.stringify(desiredManifest(), null, 2)}\n`;
|
|
153
|
+
const snapshots = new Map();
|
|
154
|
+
for (const target of [...skillTargets, { path: manifestPath, contents: manifestContents, name: "manifest" }]) {
|
|
155
|
+
snapshots.set(target.path, await snapshotManagedFile(root, target.path));
|
|
156
|
+
}
|
|
157
|
+
const afterSnapshots = await checkManagedProjectSkills(root);
|
|
158
|
+
if (!isDeepStrictEqual(afterSnapshots, before)) {
|
|
159
|
+
throw new Error("Managed project skills changed while the update was being prepared. No files were written; retry from the current copies.");
|
|
160
|
+
}
|
|
161
|
+
for (const status of needsUpdate) {
|
|
162
|
+
const snapshot = snapshots.get(status.path);
|
|
163
|
+
if (snapshot.contents !== undefined) {
|
|
164
|
+
const backup = join(backupDir, status.name, "SKILL.md");
|
|
165
|
+
await ensureOwnedManagedDirectoryInside(root, dirname(backup), "Managed project-skill backup directory");
|
|
166
|
+
writeNewManagedFileSync(root, backup, snapshot.contents, snapshot.mode ?? 0o600);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const manifestSnapshot = snapshots.get(manifestPath);
|
|
170
|
+
if (manifestSnapshot.contents !== undefined) {
|
|
171
|
+
writeNewManagedFileSync(root, join(backupDir, ".mono-agent-managed.json"), manifestSnapshot.contents, manifestSnapshot.mode ?? 0o600);
|
|
172
|
+
}
|
|
173
|
+
const updated = [];
|
|
174
|
+
const activated = [];
|
|
175
|
+
try {
|
|
176
|
+
for (const target of skillTargets) {
|
|
177
|
+
await ensureOwnedManagedDirectoryInside(root, dirname(target.path), "Managed project-skill directory");
|
|
178
|
+
await options.beforeActivate?.(target.path, target.contents);
|
|
179
|
+
const snapshot = snapshots.get(target.path);
|
|
180
|
+
await atomicWriteManagedExact(root, target.path, snapshot.contents, target.contents, snapshot.mode ?? 0o600);
|
|
181
|
+
activated.push({ path: target.path, contents: target.contents });
|
|
182
|
+
updated.push(target.path);
|
|
183
|
+
}
|
|
184
|
+
await options.beforeActivate?.(manifestPath, manifestContents);
|
|
185
|
+
await atomicWriteManagedExact(root, manifestPath, manifestSnapshot.contents, manifestContents, manifestSnapshot.mode ?? 0o600);
|
|
186
|
+
activated.push({ path: manifestPath, contents: manifestContents });
|
|
187
|
+
const after = await checkManagedProjectSkills(root);
|
|
188
|
+
if (!after.ok) {
|
|
189
|
+
throw new Error("Managed project skill update did not verify.");
|
|
190
|
+
}
|
|
191
|
+
return { ...after, updated, backupDir };
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
const rollbackFailures = [];
|
|
195
|
+
for (const activatedFile of [...activated].reverse()) {
|
|
196
|
+
const snapshot = snapshots.get(activatedFile.path);
|
|
197
|
+
try {
|
|
198
|
+
await restoreManagedFile(root, snapshot, activatedFile.contents);
|
|
199
|
+
}
|
|
200
|
+
catch (rollbackError) {
|
|
201
|
+
rollbackFailures.push(`${activatedFile.path}: ${rollbackError instanceof Error ? rollbackError.message : String(rollbackError)}`);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (rollbackFailures.length > 0) {
|
|
205
|
+
throw new Error(`${error instanceof Error ? error.message : String(error)} Managed skill rollback was incomplete: ` +
|
|
206
|
+
`${rollbackFailures.join("; ")}. Recover from ${backupDir}.`);
|
|
207
|
+
}
|
|
208
|
+
throw new Error(`${error instanceof Error ? error.message : String(error)} Previous managed skill files were restored; ` +
|
|
209
|
+
`the update remains retryable. Backups: ${backupDir}.`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async function readManifest(path) {
|
|
213
|
+
const contents = await readOptional(path);
|
|
214
|
+
if (contents === undefined)
|
|
215
|
+
return undefined;
|
|
216
|
+
try {
|
|
217
|
+
const parsed = JSON.parse(contents);
|
|
218
|
+
if (parsed.schema !== "mono-agent.managed-project-skills.v1" || typeof parsed.version !== "string") {
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
if (typeof parsed.skills !== "object" || parsed.skills === null)
|
|
222
|
+
return undefined;
|
|
223
|
+
return parsed;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async function readOptional(path) {
|
|
230
|
+
try {
|
|
231
|
+
return await readFile(path, "utf8");
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
if (error.code === "ENOENT")
|
|
235
|
+
return undefined;
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
async function canonicalManagedRoot(cwd) {
|
|
240
|
+
const root = await realpath(resolve(cwd));
|
|
241
|
+
assertManagedDirectoryInfo(await lstat(root), root, "Agent folder");
|
|
242
|
+
return root;
|
|
243
|
+
}
|
|
244
|
+
async function inspectManagedFileInside(root, path, label) {
|
|
245
|
+
const canonicalRoot = await canonicalManagedRoot(root);
|
|
246
|
+
const absolute = resolve(path);
|
|
247
|
+
assertManagedPathInside(canonicalRoot, absolute, label);
|
|
248
|
+
const segments = relative(canonicalRoot, absolute).split(sep).filter((segment) => segment.length > 0);
|
|
249
|
+
if (segments.length === 0)
|
|
250
|
+
throw new Error(`${label} must name a file inside the agent folder.`);
|
|
251
|
+
let parent = canonicalRoot;
|
|
252
|
+
for (const segment of segments.slice(0, -1)) {
|
|
253
|
+
parent = join(parent, segment);
|
|
254
|
+
let info;
|
|
255
|
+
try {
|
|
256
|
+
info = await lstat(parent);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
if (error.code === "ENOENT")
|
|
260
|
+
return absolute;
|
|
261
|
+
throw error;
|
|
262
|
+
}
|
|
263
|
+
assertManagedDirectoryInfo(info, parent, `${label} parent`);
|
|
264
|
+
}
|
|
265
|
+
try {
|
|
266
|
+
assertManagedFileInfo(await lstat(absolute), absolute);
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
if (error.code !== "ENOENT")
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
return absolute;
|
|
273
|
+
}
|
|
274
|
+
async function ensureOwnedManagedDirectoryInside(root, path, label) {
|
|
275
|
+
const canonicalRoot = await canonicalManagedRoot(root);
|
|
276
|
+
const absolute = resolve(path);
|
|
277
|
+
assertManagedPathInside(canonicalRoot, absolute, label);
|
|
278
|
+
const segments = relative(canonicalRoot, absolute).split(sep).filter((segment) => segment.length > 0);
|
|
279
|
+
let current = canonicalRoot;
|
|
280
|
+
for (const segment of segments) {
|
|
281
|
+
current = join(current, segment);
|
|
282
|
+
try {
|
|
283
|
+
await mkdir(current, { mode: 0o700 });
|
|
284
|
+
}
|
|
285
|
+
catch (error) {
|
|
286
|
+
if (error.code !== "EEXIST")
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
289
|
+
assertManagedDirectoryInfo(await lstat(current), current, label);
|
|
290
|
+
}
|
|
291
|
+
return absolute;
|
|
292
|
+
}
|
|
293
|
+
function inspectManagedFileInsideSync(root, path, label, allowMissingTarget) {
|
|
294
|
+
const canonicalRoot = realpathSync(resolve(root));
|
|
295
|
+
const absolute = resolve(path);
|
|
296
|
+
assertManagedPathInside(canonicalRoot, absolute, label);
|
|
297
|
+
const segments = relative(canonicalRoot, absolute).split(sep).filter((segment) => segment.length > 0);
|
|
298
|
+
if (segments.length === 0)
|
|
299
|
+
throw new Error(`${label} must name a file inside the agent folder.`);
|
|
300
|
+
assertManagedDirectoryInfo(lstatSync(canonicalRoot), canonicalRoot, "Agent folder");
|
|
301
|
+
let parent = canonicalRoot;
|
|
302
|
+
for (const segment of segments.slice(0, -1)) {
|
|
303
|
+
parent = join(parent, segment);
|
|
304
|
+
assertManagedDirectoryInfo(lstatSync(parent), parent, `${label} parent`);
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
assertManagedFileInfo(lstatSync(absolute), absolute);
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
if (!allowMissingTarget || error.code !== "ENOENT")
|
|
311
|
+
throw error;
|
|
312
|
+
}
|
|
313
|
+
return absolute;
|
|
314
|
+
}
|
|
315
|
+
function writeNewManagedFileSync(root, path, contents, mode) {
|
|
316
|
+
const securePath = inspectManagedFileInsideSync(root, path, "Managed project-skill backup", true);
|
|
317
|
+
let handle;
|
|
318
|
+
try {
|
|
319
|
+
handle = openSync(securePath, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | (constants.O_NOFOLLOW ?? 0), mode);
|
|
320
|
+
writeFileSync(handle, contents, "utf8");
|
|
321
|
+
fchmodSync(handle, mode);
|
|
322
|
+
fsyncSync(handle);
|
|
323
|
+
}
|
|
324
|
+
finally {
|
|
325
|
+
if (handle !== undefined)
|
|
326
|
+
closeSync(handle);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
function assertManagedDirectoryInfo(info, path, label) {
|
|
330
|
+
if (!info.isDirectory()) {
|
|
331
|
+
throw new Error(`${label} must be a real directory, not a symbolic link: ${path}`);
|
|
332
|
+
}
|
|
333
|
+
const uid = process.getuid?.();
|
|
334
|
+
if (uid !== undefined && info.uid !== uid) {
|
|
335
|
+
throw new Error(`${label} must be owned by the current user: ${path}`);
|
|
336
|
+
}
|
|
337
|
+
if ((info.mode & 0o022) !== 0) {
|
|
338
|
+
throw new Error(`${label} must not be group/world writable: ${path}`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
function assertManagedPathInside(root, path, label) {
|
|
342
|
+
const rel = relative(resolve(root), resolve(path));
|
|
343
|
+
if (rel === ".." || rel.startsWith(`..${sep}`)) {
|
|
344
|
+
throw new Error(`${label} must stay inside the agent folder: ${path}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
async function snapshotManagedFile(root, path) {
|
|
348
|
+
await inspectManagedFileInside(root, path, "Managed project skill");
|
|
349
|
+
let info;
|
|
350
|
+
try {
|
|
351
|
+
info = await lstat(path);
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
if (error.code === "ENOENT")
|
|
355
|
+
return { path };
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
assertManagedFileInfo(info, path);
|
|
359
|
+
const contents = await readFile(path, "utf8");
|
|
360
|
+
const after = await lstat(path);
|
|
361
|
+
if (!sameManagedFileMetadata(info, after)) {
|
|
362
|
+
throw new Error(`Managed project skill changed while it was being snapshotted: ${path}`);
|
|
363
|
+
}
|
|
364
|
+
return { path, contents, mode: info.mode & 0o777 };
|
|
365
|
+
}
|
|
366
|
+
async function restoreManagedFile(root, snapshot, expectedCurrent) {
|
|
367
|
+
if (snapshot.contents === undefined) {
|
|
368
|
+
removeManagedFileExactSync(root, snapshot.path, expectedCurrent);
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
await atomicWriteManagedExact(root, snapshot.path, expectedCurrent, snapshot.contents, snapshot.mode ?? 0o600);
|
|
372
|
+
}
|
|
373
|
+
async function atomicWriteManagedExact(root, path, expected, contents, mode = 0o600) {
|
|
374
|
+
const secureParent = await ensureOwnedManagedDirectoryInside(root, dirname(path), "Managed project-skill directory");
|
|
375
|
+
const securePath = join(secureParent, basename(path));
|
|
376
|
+
const temporary = join(secureParent, `.${randomUUID()}.mono-agent-tmp`);
|
|
377
|
+
const initialInfo = await managedFileInfo(root, securePath, expected);
|
|
378
|
+
let handle;
|
|
379
|
+
let temporaryIdentity;
|
|
380
|
+
try {
|
|
381
|
+
const secureTemporary = inspectManagedFileInsideSync(root, temporary, "Managed project-skill temporary file", true);
|
|
382
|
+
handle = openSync(secureTemporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | (constants.O_NOFOLLOW ?? 0), mode);
|
|
383
|
+
writeFileSync(handle, contents, "utf8");
|
|
384
|
+
fchmodSync(handle, mode);
|
|
385
|
+
fsyncSync(handle);
|
|
386
|
+
const temporaryInfo = fstatSync(handle);
|
|
387
|
+
assertManagedFileInfo(temporaryInfo, secureTemporary);
|
|
388
|
+
temporaryIdentity = { dev: temporaryInfo.dev, ino: temporaryInfo.ino };
|
|
389
|
+
closeSync(handle);
|
|
390
|
+
handle = undefined;
|
|
391
|
+
commitManagedReplacementSync(root, securePath, secureTemporary, expected, initialInfo);
|
|
392
|
+
}
|
|
393
|
+
finally {
|
|
394
|
+
if (handle !== undefined)
|
|
395
|
+
closeSync(handle);
|
|
396
|
+
removeManagedTemporaryIfOwnedSync(root, temporary, temporaryIdentity);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
function removeManagedTemporaryIfOwnedSync(root, path, identity) {
|
|
400
|
+
if (identity === undefined)
|
|
401
|
+
return;
|
|
402
|
+
const securePath = inspectManagedFileInsideSync(root, path, "Managed project-skill temporary file", true);
|
|
403
|
+
let info;
|
|
404
|
+
try {
|
|
405
|
+
info = lstatSync(securePath);
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
if (error.code === "ENOENT")
|
|
409
|
+
return;
|
|
410
|
+
throw error;
|
|
411
|
+
}
|
|
412
|
+
if (info.dev !== identity.dev || info.ino !== identity.ino) {
|
|
413
|
+
throw new Error(`Managed project-skill temporary file changed unexpectedly and was left untouched: ${securePath}`);
|
|
414
|
+
}
|
|
415
|
+
unlinkSync(securePath);
|
|
416
|
+
}
|
|
417
|
+
async function managedFileInfo(root, path, expected) {
|
|
418
|
+
await inspectManagedFileInside(root, path, "Managed project skill");
|
|
419
|
+
let info;
|
|
420
|
+
try {
|
|
421
|
+
info = await lstat(path);
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
if (error.code === "ENOENT" && expected === undefined)
|
|
425
|
+
return undefined;
|
|
426
|
+
throw error;
|
|
427
|
+
}
|
|
428
|
+
if (expected === undefined) {
|
|
429
|
+
throw new Error(`Refusing to overwrite a concurrently created managed project skill: ${path}`);
|
|
430
|
+
}
|
|
431
|
+
assertManagedFileInfo(info, path);
|
|
432
|
+
if (await readFile(path, "utf8") !== expected) {
|
|
433
|
+
throw new Error(`Refusing to overwrite a concurrently edited managed project skill: ${path}`);
|
|
434
|
+
}
|
|
435
|
+
return info;
|
|
436
|
+
}
|
|
437
|
+
function commitManagedReplacementSync(root, path, temporary, expected, initialInfo) {
|
|
438
|
+
const securePath = inspectManagedFileInsideSync(root, path, "Managed project skill", expected === undefined);
|
|
439
|
+
if (expected === undefined) {
|
|
440
|
+
try {
|
|
441
|
+
lstatSync(securePath);
|
|
442
|
+
throw new Error(`Refusing to overwrite a concurrently created managed project skill: ${securePath}`);
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
if (error.code !== "ENOENT")
|
|
446
|
+
throw error;
|
|
447
|
+
}
|
|
448
|
+
renameSync(temporary, securePath);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
let sourceHandle;
|
|
452
|
+
try {
|
|
453
|
+
sourceHandle = openSync(securePath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
454
|
+
const openedBefore = fstatSync(sourceHandle);
|
|
455
|
+
assertManagedFileInfo(openedBefore, securePath);
|
|
456
|
+
const current = readFileSync(sourceHandle, "utf8");
|
|
457
|
+
const openedAfter = fstatSync(sourceHandle);
|
|
458
|
+
const named = lstatSync(securePath);
|
|
459
|
+
if (current !== expected
|
|
460
|
+
|| initialInfo === undefined
|
|
461
|
+
|| !sameManagedFileMetadata(initialInfo, openedBefore)
|
|
462
|
+
|| !sameManagedFileMetadata(openedBefore, openedAfter)
|
|
463
|
+
|| !sameManagedFileMetadata(openedAfter, named)) {
|
|
464
|
+
throw new Error(`Refusing to overwrite a concurrently edited managed project skill: ${securePath}`);
|
|
465
|
+
}
|
|
466
|
+
renameSync(temporary, securePath);
|
|
467
|
+
}
|
|
468
|
+
finally {
|
|
469
|
+
if (sourceHandle !== undefined)
|
|
470
|
+
closeSync(sourceHandle);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
function removeManagedFileExactSync(root, path, expected) {
|
|
474
|
+
const securePath = inspectManagedFileInsideSync(root, path, "Managed project skill", false);
|
|
475
|
+
let sourceHandle;
|
|
476
|
+
try {
|
|
477
|
+
sourceHandle = openSync(securePath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
478
|
+
const openedBefore = fstatSync(sourceHandle);
|
|
479
|
+
assertManagedFileInfo(openedBefore, securePath);
|
|
480
|
+
const current = readFileSync(sourceHandle, "utf8");
|
|
481
|
+
const openedAfter = fstatSync(sourceHandle);
|
|
482
|
+
const named = lstatSync(securePath);
|
|
483
|
+
if (current !== expected
|
|
484
|
+
|| !sameManagedFileMetadata(openedBefore, openedAfter)
|
|
485
|
+
|| !sameManagedFileMetadata(openedAfter, named)) {
|
|
486
|
+
throw new Error(`Refusing to remove a concurrently edited managed project skill: ${securePath}`);
|
|
487
|
+
}
|
|
488
|
+
unlinkSync(securePath);
|
|
489
|
+
}
|
|
490
|
+
finally {
|
|
491
|
+
if (sourceHandle !== undefined)
|
|
492
|
+
closeSync(sourceHandle);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
function assertManagedFileInfo(info, path) {
|
|
496
|
+
if (!info.isFile() || info.nlink !== 1) {
|
|
497
|
+
throw new Error(`Managed project skill must be one regular file with one link: ${path}`);
|
|
498
|
+
}
|
|
499
|
+
const uid = process.getuid?.();
|
|
500
|
+
if (uid !== undefined && info.uid !== uid) {
|
|
501
|
+
throw new Error(`Managed project skill must be owned by the current user: ${path}`);
|
|
502
|
+
}
|
|
503
|
+
if ((info.mode & 0o022) !== 0) {
|
|
504
|
+
throw new Error(`Managed project skill must not be group/world writable: ${path}`);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
function sameManagedFileMetadata(left, right) {
|
|
508
|
+
return left.dev === right.dev
|
|
509
|
+
&& left.ino === right.ino
|
|
510
|
+
&& left.nlink === right.nlink
|
|
511
|
+
&& left.mode === right.mode
|
|
512
|
+
&& left.size === right.size
|
|
513
|
+
&& left.mtimeMs === right.mtimeMs
|
|
514
|
+
&& left.ctimeMs === right.ctimeMs;
|
|
515
|
+
}
|
|
516
|
+
async function withManagedProjectSkillLock(root, operation) {
|
|
517
|
+
const skillsDir = await ensureOwnedManagedDirectoryInside(root, join(root, "skills"), "Managed project-skills directory");
|
|
518
|
+
const lockPath = join(skillsDir, ".mono-agent-managed.lock");
|
|
519
|
+
const contents = `${JSON.stringify({
|
|
520
|
+
schema: "mono-agent.managed-project-skills-lock.v1",
|
|
521
|
+
pid: process.pid,
|
|
522
|
+
token: randomUUID(),
|
|
523
|
+
createdAt: new Date().toISOString(),
|
|
524
|
+
})}\n`;
|
|
525
|
+
let handle;
|
|
526
|
+
let identity;
|
|
527
|
+
try {
|
|
528
|
+
try {
|
|
529
|
+
const secureLockPath = inspectManagedFileInsideSync(root, lockPath, "Managed project-skill lock", true);
|
|
530
|
+
handle = openSync(secureLockPath, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | (constants.O_NOFOLLOW ?? 0), 0o600);
|
|
531
|
+
}
|
|
532
|
+
catch (error) {
|
|
533
|
+
if (error.code === "EEXIST") {
|
|
534
|
+
throw new Error(`Another managed project-skill update owns ${lockPath}. Wait for it to finish.`);
|
|
535
|
+
}
|
|
536
|
+
throw error;
|
|
537
|
+
}
|
|
538
|
+
writeFileSync(handle, contents, "utf8");
|
|
539
|
+
fchmodSync(handle, 0o600);
|
|
540
|
+
fsyncSync(handle);
|
|
541
|
+
const info = fstatSync(handle);
|
|
542
|
+
assertManagedFileInfo(info, lockPath);
|
|
543
|
+
identity = { dev: info.dev, ino: info.ino };
|
|
544
|
+
closeSync(handle);
|
|
545
|
+
handle = undefined;
|
|
546
|
+
return await operation();
|
|
547
|
+
}
|
|
548
|
+
finally {
|
|
549
|
+
if (handle !== undefined)
|
|
550
|
+
closeSync(handle);
|
|
551
|
+
if (identity !== undefined) {
|
|
552
|
+
const secureLockPath = inspectManagedFileInsideSync(root, lockPath, "Managed project-skill lock", false);
|
|
553
|
+
const current = lstatSync(secureLockPath);
|
|
554
|
+
if (current.dev !== identity.dev
|
|
555
|
+
|| current.ino !== identity.ino
|
|
556
|
+
|| readFileSync(secureLockPath, "utf8") !== contents) {
|
|
557
|
+
throw new Error(`Managed project-skill lock changed unexpectedly and was left untouched: ${lockPath}`);
|
|
558
|
+
}
|
|
559
|
+
unlinkSync(secureLockPath);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
export async function managedProjectSkillsExist(cwd) {
|
|
564
|
+
try {
|
|
565
|
+
const root = await canonicalManagedRoot(cwd);
|
|
566
|
+
const path = await inspectManagedFileInside(root, join(root, PROJECT_SKILL_MANIFEST_PATH), "Managed project-skill manifest");
|
|
567
|
+
return (await stat(path)).isFile();
|
|
568
|
+
}
|
|
569
|
+
catch {
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
//# sourceMappingURL=project-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../src/project-skills.ts"],"names":[],"mappings":"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"}
|