@namewta/speculo 2.0.6 → 2.1.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 +3 -0
- package/THIRD-PARTY-NOTICES.md +4 -0
- package/dist/src/agent-skills.d.ts +5 -0
- package/dist/src/agent-skills.js +10 -7
- package/dist/src/agent-skills.js.map +1 -1
- package/dist/src/cli.js +17 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/coordination.d.ts +3 -3
- package/dist/src/coordination.js +21 -4
- package/dist/src/coordination.js.map +1 -1
- package/dist/src/doctor.js +8 -1
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/external-files.d.ts +4 -2
- package/dist/src/external-files.js +4 -4
- package/dist/src/external-files.js.map +1 -1
- package/dist/src/hub-catalog.d.ts +11 -0
- package/dist/src/hub-catalog.js +91 -0
- package/dist/src/hub-catalog.js.map +1 -0
- package/dist/src/hub-resources.json +1 -0
- package/dist/src/hub-skills.d.ts +53 -0
- package/dist/src/hub-skills.js +157 -0
- package/dist/src/hub-skills.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +48 -47
- package/dist/src/index.js.map +1 -1
- package/dist/src/install-ui.d.ts +16 -0
- package/dist/src/install-ui.js +67 -11
- package/dist/src/install-ui.js.map +1 -1
- package/dist/src/manifest.d.ts +2 -0
- package/dist/src/manifest.js +2 -0
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/refresh.d.ts +1 -0
- package/dist/src/refresh.js +13 -10
- package/dist/src/refresh.js.map +1 -1
- package/dist/src/retained-workflows.d.ts +10 -0
- package/dist/src/retained-workflows.js +25 -0
- package/dist/src/retained-workflows.js.map +1 -0
- package/dist/src/runtime-entry.d.ts +1 -0
- package/dist/src/runtime-entry.js +1 -0
- package/dist/src/runtime-entry.js.map +1 -1
- package/dist/src/skill-trees.d.ts +27 -0
- package/dist/src/skill-trees.js +118 -0
- package/dist/src/skill-trees.js.map +1 -0
- package/dist/src/transaction.d.ts +3 -14
- package/dist/src/transaction.js +20 -36
- package/dist/src/transaction.js.map +1 -1
- package/dist/src/workflow-install.d.ts +15 -0
- package/dist/src/workflow-install.js +104 -0
- package/dist/src/workflow-install.js.map +1 -0
- package/package.json +4 -2
- package/skills-hub/automation/grok-bot-team-steward/CHEATSHEET.md +17 -0
- package/skills-hub/automation/grok-bot-team-steward/INSTALL.md +23 -0
- package/skills-hub/automation/grok-bot-team-steward/LICENSE +21 -0
- package/skills-hub/automation/grok-bot-team-steward/README.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/SKILL.md +52 -0
- package/skills-hub/automation/grok-bot-team-steward/agents/openai.yaml +4 -0
- package/skills-hub/automation/grok-bot-team-steward/references/00-hard-rules.md +50 -0
- package/skills-hub/automation/grok-bot-team-steward/references/01-snapshot-schema.md +84 -0
- package/skills-hub/automation/grok-bot-team-steward/references/02-export-protocol.md +57 -0
- package/skills-hub/automation/grok-bot-team-steward/references/03-restore-protocol.md +64 -0
- package/skills-hub/automation/grok-bot-team-steward/references/04-inventory.md +37 -0
- package/skills-hub/automation/grok-bot-team-steward/references/05-conversations.md +71 -0
- package/skills-hub/automation/grok-bot-team-steward/references/06-sanitizer.md +39 -0
- package/skills-hub/automation/grok-bot-team-steward/references/07-prompts.md +87 -0
- package/skills-hub/automation/grok-bot-team-steward/references/08-verification.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/references/09-sources.md +31 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/scrub.sh +17 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/snapshot-name.sh +18 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/validate-snapshot.sh +62 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/ACTIVATE.md +58 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/SETUP-INSTRUCTIONS.md +33 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/STEWARD-PROFILE.md +28 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHANGELOG.md +3 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHARTER.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/DROP-LIST.md +10 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/GAPS.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/INIT.md +14 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.yaml +20 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ORG.md +15 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/README.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/RESTORE.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ROSTER.md +11 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/GAPS.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/MEMORY.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/PROFILE.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/agent-spec.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/INDEX.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/main.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/routines.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/skills.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/connectors.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/COMPLETED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/CREATED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/RESTORE-NOTES.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SANITIZER.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SOURCE.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/rooms/_ROOM.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/routines/_ROUTINE.md +12 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/shared-memory.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/workspace-map.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/skills/_SKILL/SKILL.md +18 -0
- package/skills-hub/automation/herdr/SKILL.md +246 -0
- package/skills-hub/automation/orca/SKILL.md +328 -0
- package/skills-hub/coding/gitea-repo/LICENSE +21 -0
- package/skills-hub/coding/gitea-repo/SKILL.md +50 -0
- package/skills-hub/coding/gitea-repo/agents/openai.yaml +4 -0
- package/skills-hub/coding/gitea-repo/references/auth-and-scopes.md +58 -0
- package/skills-hub/coding/gitea-repo/references/endpoint-map.md +80 -0
- package/skills-hub/coding/gitea-repo/references/pagination-and-errors.md +34 -0
- package/skills-hub/coding/gitea-repo/scripts/gitea_api.py +814 -0
- package/skills-hub/coding/github-repo-steward/LICENSE +21 -0
- package/skills-hub/coding/github-repo-steward/SKILL.md +48 -0
- package/skills-hub/coding/github-repo-steward/agents/openai.yaml +4 -0
- package/skills-hub/coding/github-repo-steward/references/00-auth-and-tokens.md +73 -0
- package/skills-hub/coding/github-repo-steward/references/01-inventory.md +55 -0
- package/skills-hub/coding/github-repo-steward/references/02-lifecycle.md +57 -0
- package/skills-hub/coding/github-repo-steward/references/03-stars.md +42 -0
- package/skills-hub/coding/github-repo-steward/references/04-hygiene.md +40 -0
- package/skills-hub/coding/github-repo-steward/references/05-sources.md +42 -0
- package/skills-hub/coding/github-repo-steward/scripts/inventory.sh +64 -0
- package/skills-hub/coding/vscode-fullstack/LICENSE +21 -0
- package/skills-hub/coding/vscode-fullstack/SKILL.md +47 -0
- package/skills-hub/coding/vscode-fullstack/agents/openai.yaml +4 -0
- package/skills-hub/coding/vscode-fullstack/references/extensions-and-settings.md +181 -0
- package/skills-hub/coding/vscode-fullstack/references/profiles-and-validation.md +62 -0
- package/skills-hub/coding/vscode-fullstack/references/runtime-reuse.md +52 -0
- package/skills-hub/design/photo-retouch/LICENSE +21 -0
- package/skills-hub/design/photo-retouch/SKILL.md +50 -0
- package/skills-hub/design/photo-retouch/agents/openai.yaml +4 -0
- package/skills-hub/design/photo-retouch/references/basic-retouch.md +58 -0
- package/skills-hub/design/photo-retouch/references/formal-portrait.md +57 -0
- package/skills-hub/design/photo-retouch/references/object-and-canvas.md +82 -0
- package/skills-hub/design/photo-retouch/references/product-photo.md +41 -0
- package/skills-hub/design/photo-retouch/references/repair-and-look.md +61 -0
- package/skills-hub/design/photo-retouch/references/social-effects.md +55 -0
- package/skills-hub/design/photo-retouch/references/travel-creative.md +79 -0
- package/skills-hub/system/clash-client-profile/LICENSE +21 -0
- package/skills-hub/system/clash-client-profile/SKILL.md +79 -0
- package/skills-hub/system/clash-client-profile/agents/openai.yaml +4 -0
- package/skills-hub/system/clash-client-profile/references/acceptance.md +81 -0
- package/skills-hub/system/clash-client-profile/references/browser-privacy.md +35 -0
- package/skills-hub/system/clash-client-profile/references/clash-verge.md +40 -0
- package/skills-hub/system/clash-client-profile/references/dns-workflow.md +147 -0
- package/skills-hub/system/clash-client-profile/references/flclash.md +24 -0
- package/skills-hub/system/clash-client-profile/references/network-performance.md +25 -0
- package/skills-hub/system/clash-client-profile/references/platform-dns.md +109 -0
- package/skills-hub/system/clash-client-profile/references/sources.md +46 -0
- package/skills-hub/system/clash-client-profile/references/troubleshooting.md +82 -0
- package/skills-hub/system/clash-client-profile/scripts/dns_guard.py +650 -0
- package/skills-hub/system/clash-client-profile/scripts/proxy_doctor.py +213 -0
- package/skills-hub/system/clash-client-profile/scripts/render_rules.py +34 -0
- package/skills-hub/system/clash-client-profile/templates/ai-rules.yaml +18 -0
- package/skills-hub/system/clash-client-profile/templates/dns-request.example.json +9 -0
- package/skills-hub/system/clash-client-profile/templates/dns.yaml +8 -0
- package/skills-hub/system/linux-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/linux-dev-disk-cleanup/SKILL.md +42 -0
- package/skills-hub/system/linux-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/linux-dev-disk-cleanup/references/linux-cleanup-workflow.md +145 -0
- package/skills-hub/system/optimize-codex-config/LICENSE +21 -0
- package/skills-hub/system/optimize-codex-config/SKILL.md +101 -0
- package/skills-hub/system/optimize-codex-config/agents/openai.yaml +4 -0
- package/skills-hub/system/optimize-codex-config/assets/capabilities.example.json +22 -0
- package/skills-hub/system/optimize-codex-config/references/cli.md +35 -0
- package/skills-hub/system/optimize-codex-config/references/configuration-contract.md +33 -0
- package/skills-hub/system/optimize-codex-config/references/optimization-method.md +38 -0
- package/skills-hub/system/optimize-codex-config/references/privacy.md +41 -0
- package/skills-hub/system/optimize-codex-config/references/sources.md +24 -0
- package/skills-hub/system/optimize-codex-config/references/statusline.md +31 -0
- package/skills-hub/system/optimize-codex-config/references/transactions.md +32 -0
- package/skills-hub/system/optimize-codex-config/references/troubleshooting.md +95 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/claude.mjs +24 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/codex.mjs +10 -0
- package/skills-hub/system/optimize-codex-config/scripts/ai-cli-config.mjs +67 -0
- package/skills-hub/system/optimize-codex-config/scripts/audit-codex-config.mjs +762 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/document.mjs +166 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/inspect.mjs +211 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/io.mjs +104 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/plan.mjs +79 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/transaction.mjs +205 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/writers.mjs +46 -0
- package/skills-hub/system/optimize-codex-config/scripts/statusline/claude-statusline.mjs +94 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/THIRD-PARTY-NOTICES.txt +250 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/build-package-lock.json +488 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/manifest.json +14 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/parsers.mjs +16 -0
- package/skills-hub/system/proxy-region-locale/LICENSE +21 -0
- package/skills-hub/system/proxy-region-locale/SKILL.md +42 -0
- package/skills-hub/system/proxy-region-locale/agents/openai.yaml +4 -0
- package/skills-hub/system/proxy-region-locale/references/linux.md +35 -0
- package/skills-hub/system/proxy-region-locale/references/macos.md +31 -0
- package/skills-hub/system/proxy-region-locale/references/windows.md +45 -0
- package/skills-hub/system/system-health-audit/LICENSE +21 -0
- package/skills-hub/system/system-health-audit/SKILL.md +41 -0
- package/skills-hub/system/system-health-audit/agents/openai.yaml +4 -0
- package/skills-hub/system/system-health-audit/references/platforms.md +37 -0
- package/skills-hub/system/system-health-audit/scripts/system_audit.py +41 -0
- package/skills-hub/system/windows-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/windows-dev-disk-cleanup/SKILL.md +40 -0
- package/skills-hub/system/windows-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/windows-dev-disk-cleanup/references/windows-cleanup-workflow.md +121 -0
- package/skills-hub/writing/.gitkeep +0 -0
- package/skills-hub/writing/job-application/LICENSE +21 -0
- package/skills-hub/writing/job-application/SKILL.md +160 -0
- package/skills-hub/writing/job-application/agents/openai.yaml +4 -0
- package/skills-hub/writing/job-application/assets/resume.css +10 -0
- package/skills-hub/writing/job-application/config.example.json +9 -0
- package/skills-hub/writing/job-application/references/company-research.md +7 -0
- package/skills-hub/writing/job-application/references/corpus-schema.md +33 -0
- package/skills-hub/writing/job-application/references/honesty-gate.md +29 -0
- package/skills-hub/writing/job-application/references/improvement-plan.md +15 -0
- package/skills-hub/writing/job-application/references/ingest-protocol.md +18 -0
- package/skills-hub/writing/job-application/references/interview-speech.md +16 -0
- package/skills-hub/writing/job-application/references/jd-parse.md +18 -0
- package/skills-hub/writing/job-application/references/persist-paths.md +34 -0
- package/skills-hub/writing/job-application/references/question-bank.md +19 -0
- package/skills-hub/writing/job-application/references/rendering.md +9 -0
- package/skills-hub/writing/job-application/references/resume-playbook.md +30 -0
- package/skills-hub/writing/job-application/scripts/README.md +12 -0
- package/skills-hub/writing/job-application/scripts/ingest_kb.py +188 -0
- package/skills-hub/writing/job-application/scripts/render_resume.py +144 -0
- package/skills-hub/writing/job-application/scripts/validate_claims.py +52 -0
- package/skills-hub/writing/job-application/scripts/write_config.py +72 -0
- package/skills-hub/writing/job-application/templates/application-index.md +10 -0
- package/skills-hub/writing/job-application/templates/brief.md +16 -0
- package/skills-hub/writing/job-application/templates/changelog.md +6 -0
- package/skills-hub/writing/job-application/templates/company-research.md +15 -0
- package/skills-hub/writing/job-application/templates/corpus.md +11 -0
- package/skills-hub/writing/job-application/templates/evidence-map.md +5 -0
- package/skills-hub/writing/job-application/templates/framings.md +6 -0
- package/skills-hub/writing/job-application/templates/improvement-plan.md +16 -0
- package/skills-hub/writing/job-application/templates/ingest-log.md +4 -0
- package/skills-hub/writing/job-application/templates/known-gaps.md +4 -0
- package/skills-hub/writing/job-application/templates/match-report.md +21 -0
- package/skills-hub/writing/job-application/templates/methodology-cache.md +10 -0
- package/skills-hub/writing/job-application/templates/persist-index.md +11 -0
- package/skills-hub/writing/job-application/templates/profile.md +21 -0
- package/skills-hub/writing/job-application/templates/questions.md +22 -0
- package/skills-hub/writing/job-application/templates/resume-original.md +10 -0
- package/skills-hub/writing/job-application/templates/resume-tailored.md +21 -0
- package/skills-hub/writing/job-application/templates/sources-index.md +6 -0
- package/skills-hub/writing/job-application/templates/speech.md +19 -0
- package/skills-hub/writing/job-application/templates/stories.md +9 -0
- package/skills-hub/writing/job-application/templates/story-bank.md +11 -0
- package/skills-hub/writing/job-application/templates/strengths.md +4 -0
- package/skills-hub/writing/job-application/templates/style-memory.md +7 -0
- package/skills-hub/writing/ste-zh/LICENSE +21 -0
- package/skills-hub/writing/ste-zh/NOTICE.md +9 -0
- package/skills-hub/writing/ste-zh/SKILL.md +130 -0
- package/skills-hub/writing/ste-zh/agents/openai.yaml +6 -0
- package/skills-hub/writing/ste-zh/examples/zh-report.md +23 -0
- package/skills-hub/writing/ste-zh/references/english-modes.md +13 -0
- package/skills-hub/writing/ste-zh/references/terminology.md +13 -0
- package/skills-hub/writing/ste-zh/references/zh-rules.md +29 -0
- package/template/.speculo/refresh-contract.json +2 -0
- package/template/canonical/canonical-specdev-goal-plan.md +33 -25
- package/template/canonical/canonical-specdev-grill-with-docs.md +214 -206
- package/template/canonical/canonical-specdev-spec.md +214 -206
- package/template/canonical/canonical-specdev-tickets.md +214 -206
- package/template/canonical/canonical-specdev-wayfinder.md +214 -206
- package/template/lib/speculo-runtime.mjs +183 -8
- package/template/references/coordination/coordination-contract.md +11 -3
- package/template/references/coordination/modes/cli.md +2 -2
- package/template/references/coordination/modes/herdr.md +9 -9
- package/template/references/coordination/modes/orca.md +11 -11
- package/template/references/coordination/project-facts.schema.json +1 -0
- package/template/workflows/specdev/specdev-i-init-setup/SKILL.md +7 -6
- package/template/workflows/specdev/specdev-i-init-setup/references/first-setup.md +30 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { chmod, lstat, mkdir, readdir, rmdir } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { containedPath, safeRelativePath } from "./paths.js";
|
|
4
|
+
import { readImage, replaceImage, syncDirectory } from "./external-files.js";
|
|
5
|
+
export const absent = { kind: "absent" };
|
|
6
|
+
export const sameNode = (a, b) => a.kind === b.kind &&
|
|
7
|
+
(a.kind === "absent" || b.kind !== "absent" && a.mode === b.mode &&
|
|
8
|
+
(a.kind !== "file" || b.kind === "file" && a.content === b.content));
|
|
9
|
+
export function validSkillPath(path) {
|
|
10
|
+
return safeRelativePath(path) && !path.endsWith("/") && /^\.(agents|claude)\/skills\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\/[^/]+)*$/.test(path);
|
|
11
|
+
}
|
|
12
|
+
export function validSkillNode(node, directories = true) {
|
|
13
|
+
if (!node || typeof node !== "object")
|
|
14
|
+
return false;
|
|
15
|
+
if (node.kind === "absent")
|
|
16
|
+
return Object.keys(node).length === 1;
|
|
17
|
+
if (!Number.isInteger(node.mode) || node.mode < 0 || node.mode > 0o777)
|
|
18
|
+
return false;
|
|
19
|
+
if (node.kind === "directory")
|
|
20
|
+
return directories && Object.keys(node).length === 2;
|
|
21
|
+
return node.kind === "file" && Object.keys(node).length === 3 && typeof node.content === "string" &&
|
|
22
|
+
Buffer.from(node.content, "base64").toString("base64") === node.content;
|
|
23
|
+
}
|
|
24
|
+
export async function readSkillNode(path, source = false) {
|
|
25
|
+
let stat;
|
|
26
|
+
try {
|
|
27
|
+
stat = await lstat(path);
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
if (e.code === "ENOENT")
|
|
31
|
+
return absent;
|
|
32
|
+
throw e;
|
|
33
|
+
}
|
|
34
|
+
if (stat.isSymbolicLink())
|
|
35
|
+
throw new Error("skill-symlink: " + path);
|
|
36
|
+
if (stat.mode & 0o7000)
|
|
37
|
+
throw new Error("unsafe-skill-mode: " + path);
|
|
38
|
+
if (stat.isDirectory())
|
|
39
|
+
return { kind: "directory", mode: process.platform === "win32" ? 0o755 : stat.mode & 0o777 };
|
|
40
|
+
const value = await readImage(path, { allowSourceHardlinks: source });
|
|
41
|
+
if (!value)
|
|
42
|
+
return absent;
|
|
43
|
+
return { kind: "file", ...value };
|
|
44
|
+
}
|
|
45
|
+
/** Includes empty directories and modes. Never follows symlinks; only read-only package sources may contain pnpm hardlinks. */
|
|
46
|
+
export async function snapshotSkillTree(root, options = {}) {
|
|
47
|
+
const nodes = new Map();
|
|
48
|
+
async function visit(name) {
|
|
49
|
+
if (name && (!safeRelativePath(name) || name.endsWith("/")))
|
|
50
|
+
throw new Error("unsafe-skill-resource: " + name);
|
|
51
|
+
const node = await readSkillNode(join(root, name), options.source);
|
|
52
|
+
if (node.kind === "absent")
|
|
53
|
+
return;
|
|
54
|
+
nodes.set(name, node);
|
|
55
|
+
if (node.kind === "directory") {
|
|
56
|
+
const names = (await readdir(join(root, name))).sort();
|
|
57
|
+
if (new Set(names.map(n => n.toLowerCase())).size !== names.length)
|
|
58
|
+
throw new Error("ambiguous-skill-casing: " + root);
|
|
59
|
+
for (const child of names)
|
|
60
|
+
await visit(name ? `${name}/${child}` : child);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await visit("");
|
|
64
|
+
return nodes;
|
|
65
|
+
}
|
|
66
|
+
export async function assertSkillRecords(target, records, side) {
|
|
67
|
+
for (const record of records) {
|
|
68
|
+
const current = await readSkillNode(await containedPath(target, record.name));
|
|
69
|
+
if (!(side !== "after" && sameNode(current, record.before)) && !(side !== "before" && sameNode(current, record.after)))
|
|
70
|
+
throw new Error("recovery-drift: " + record.name);
|
|
71
|
+
}
|
|
72
|
+
// A root directory record means this is a complete owned package, not a pointer.
|
|
73
|
+
for (const record of records.filter(r => r.name.split("/").length === 3 && (r.before.kind === "directory" || r.after.kind === "directory"))) {
|
|
74
|
+
const allowed = new Set(records.map(r => r.name));
|
|
75
|
+
const tree = await snapshotSkillTree(await containedPath(target, record.name));
|
|
76
|
+
for (const name of tree.keys())
|
|
77
|
+
if (!allowed.has(record.name + (name ? "/" + name : "")))
|
|
78
|
+
throw new Error("recovery-drift: unrecorded Skill resource " + name);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Every node has before/after evidence, so recovery also handles an interrupted package copy. */
|
|
82
|
+
export async function applySkillRecords(target, records, side) {
|
|
83
|
+
await assertSkillRecords(target, records, side === "before" ? "either" : "before");
|
|
84
|
+
const deepest = [...records].sort((a, b) => b.name.split("/").length - a.name.split("/").length);
|
|
85
|
+
for (const r of deepest) {
|
|
86
|
+
const path = await containedPath(target, r.name), current = await readSkillNode(path);
|
|
87
|
+
if (current.kind === "absent" || r[side].kind !== "absent")
|
|
88
|
+
continue;
|
|
89
|
+
if (current.kind === "directory") {
|
|
90
|
+
await rmdir(path);
|
|
91
|
+
await syncDirectory(dirname(path));
|
|
92
|
+
}
|
|
93
|
+
else
|
|
94
|
+
await replaceImage(path, current, null);
|
|
95
|
+
}
|
|
96
|
+
for (const r of deepest.reverse()) {
|
|
97
|
+
const desired = r[side];
|
|
98
|
+
if (desired.kind === "absent")
|
|
99
|
+
continue;
|
|
100
|
+
const path = await containedPath(target, r.name), current = await readSkillNode(path);
|
|
101
|
+
if (sameNode(current, desired))
|
|
102
|
+
continue;
|
|
103
|
+
if (desired.kind === "directory") {
|
|
104
|
+
if (current.kind !== "absent" && current.kind !== "directory")
|
|
105
|
+
throw new Error("skill-node-type-conflict: " + r.name);
|
|
106
|
+
await mkdir(path, { recursive: true, mode: desired.mode });
|
|
107
|
+
await chmod(path, desired.mode);
|
|
108
|
+
await syncDirectory(dirname(path));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
if (current.kind === "directory")
|
|
112
|
+
throw new Error("skill-node-type-conflict: " + r.name);
|
|
113
|
+
await mkdir(dirname(path), { recursive: true });
|
|
114
|
+
await replaceImage(path, current.kind === "absent" ? null : current, desired);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=skill-trees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-trees.js","sourceRoot":"","sources":["../../src/skill-trees.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,20 +3,10 @@ export declare const LOCK_NAME = ".agents/.speculo-install.lock";
|
|
|
3
3
|
export declare const TRANSACTIONS_ROOT = ".agents/.speculo-transactions";
|
|
4
4
|
export type TransactionPhase = "prepared" | "old-renamed" | "installed" | "skills-applying" | "skills-projected" | "external-finalized" | "committed" | "rolled-back";
|
|
5
5
|
export type TransactionHook = (phase: TransactionPhase) => Promise<void>;
|
|
6
|
-
export type SkillNode
|
|
7
|
-
|
|
8
|
-
} | {
|
|
9
|
-
kind: "file";
|
|
10
|
-
content: string;
|
|
11
|
-
mode: number;
|
|
12
|
-
};
|
|
13
|
-
export type SkillRecord = {
|
|
14
|
-
name: string;
|
|
15
|
-
before: SkillNode;
|
|
16
|
-
after: SkillNode;
|
|
17
|
-
};
|
|
6
|
+
export type { SkillNode, SkillRecord } from "./skill-trees.js";
|
|
7
|
+
import { type SkillRecord } from "./skill-trees.js";
|
|
18
8
|
type Journal = {
|
|
19
|
-
schema_version: 3;
|
|
9
|
+
schema_version: 3 | 4;
|
|
20
10
|
id: string;
|
|
21
11
|
host: string;
|
|
22
12
|
pid: number;
|
|
@@ -40,4 +30,3 @@ export declare function recoverInstall(targetArg: string, id: string): Promise<{
|
|
|
40
30
|
outcome: string;
|
|
41
31
|
}>;
|
|
42
32
|
export declare function hasTransaction(target: string): Promise<boolean>;
|
|
43
|
-
export {};
|
package/dist/src/transaction.js
CHANGED
|
@@ -4,9 +4,10 @@ import { hostname } from "node:os";
|
|
|
4
4
|
import { lstat, mkdir, rename, rm, rmdir } from "node:fs/promises";
|
|
5
5
|
import { dirname, relative, join, resolve } from "node:path";
|
|
6
6
|
import { fingerprintTree, isTreeFingerprint, TREE_FINGERPRINT_PREFIX } from "./manifest.js";
|
|
7
|
-
import { EXTERNAL_NAMES,
|
|
7
|
+
import { EXTERNAL_NAMES, assertImage, imageDigest, readImage, replaceImage, syncDirectory, writeDurableJson } from "./external-files.js";
|
|
8
8
|
export const LOCK_NAME = ".agents/.speculo-install.lock";
|
|
9
9
|
export const TRANSACTIONS_ROOT = ".agents/.speculo-transactions";
|
|
10
|
+
import { validSkillPath, validSkillNode, assertSkillRecords, applySkillRecords } from "./skill-trees.js";
|
|
10
11
|
const BASE_PHASES = ["prepared", "old-renamed", "installed", "external-finalized", "committed", "rolled-back"];
|
|
11
12
|
const SKILL_PHASES = ["skills-applying", "skills-projected"];
|
|
12
13
|
async function exists(path) { try {
|
|
@@ -45,37 +46,19 @@ export async function cleanEmptyTransactionsDirectory(target) {
|
|
|
45
46
|
await syncDirectory(join(target, ".agents"));
|
|
46
47
|
}
|
|
47
48
|
function journalPath(target) { return join(target, LOCK_NAME, 'transaction.json'); }
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
for (const r of j.skills ?? [])
|
|
55
|
-
await assertImage(await containedPath(j.target, r.name), imageOf(r.before));
|
|
56
|
-
for (const r of j.skills ?? []) {
|
|
57
|
-
const file = await containedPath(j.target, r.name);
|
|
58
|
-
await mkdir(dirname(file), { recursive: true });
|
|
59
|
-
await replaceImage(file, imageOf(r.before), imageOf(r.after));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async function restoreSkillProjection(j) {
|
|
63
|
-
for (const r of j.skills ?? []) {
|
|
64
|
-
const current = await readImage(await containedPath(j.target, r.name));
|
|
65
|
-
if (!sameImage(current, r.before) && !sameImage(current, r.after))
|
|
66
|
-
throw new Error('recovery-drift: ' + r.name);
|
|
67
|
-
}
|
|
68
|
-
for (const r of [...j.skills ?? []].reverse()) {
|
|
69
|
-
const file = await containedPath(j.target, r.name), current = await readImage(file);
|
|
70
|
-
if (sameImage(current, r.before))
|
|
71
|
-
continue;
|
|
72
|
-
await mkdir(dirname(file), { recursive: true });
|
|
73
|
-
await replaceImage(file, current, imageOf(r.before));
|
|
74
|
-
}
|
|
49
|
+
function validSkills(records, version) {
|
|
50
|
+
return Array.isArray(records) && records.length > 0 && records.length <= 10000 && JSON.stringify(records).length <= 64 * 1024 * 1024 &&
|
|
51
|
+
new Set(records.map(r => r?.name)).size === records.length && records.every(r => r && typeof r.name === 'string' &&
|
|
52
|
+
(version === 3 ? /^\.(agents|claude)\/skills\/[a-z0-9]+(?:-[a-z0-9]+)*\/(SKILL\.md|agents\/openai\.yaml)$/.test(r.name) : validSkillPath(r.name)) &&
|
|
53
|
+
validSkillNode(r.before, version === 4) && validSkillNode(r.after, version === 4) &&
|
|
54
|
+
(r.before.kind === 'absent' || r.after.kind === 'absent' || r.before.kind === r.after.kind));
|
|
75
55
|
}
|
|
56
|
+
function journalShapeValid(j) { return j.skills === undefined ? BASE_PHASES.includes(j.phase) : validSkills(j.skills, j.schema_version) && [...BASE_PHASES, ...SKILL_PHASES].includes(j.phase); }
|
|
57
|
+
async function applySkillProjection(j) { await applySkillRecords(j.target, j.skills ?? [], 'after'); }
|
|
58
|
+
async function restoreSkillProjection(j) { await applySkillRecords(j.target, j.skills ?? [], 'before'); }
|
|
76
59
|
async function cleanEmptyProjectionDirectories(j, side) {
|
|
77
60
|
for (const r of j.skills ?? [])
|
|
78
|
-
if (r[side].kind === 'absent') {
|
|
61
|
+
if (r[side].kind === 'absent' && r.name.split('/').length > 3 && !j.skills?.some(d => d.name === r.name.split('/').slice(0, 3).join('/') && (d.before.kind === 'directory' || d.after.kind === 'directory'))) {
|
|
79
62
|
let dir = dirname(await containedPath(j.target, r.name));
|
|
80
63
|
const boundary = join(j.target, r.name.startsWith('.agents/') ? '.agents/skills' : '.claude/skills');
|
|
81
64
|
while (dir !== boundary) {
|
|
@@ -99,7 +82,7 @@ export async function readTransaction(target) {
|
|
|
99
82
|
if (!raw)
|
|
100
83
|
throw new Error("unidentified-lock: no durable transaction; inspect owner.json and preserve all residues");
|
|
101
84
|
const j = JSON.parse(Buffer.from(raw.content, "base64").toString("utf8"));
|
|
102
|
-
if (!j || typeof j !== "object" || j.schema_version
|
|
85
|
+
if (!j || typeof j !== "object" || ![3, 4].includes(j.schema_version) || j.target !== resolve(target) || !/^[a-f0-9-]{36}$/.test(j.id) ||
|
|
103
86
|
typeof j.host !== "string" || !Number.isSafeInteger(j.pid) || j.pid < 1 ||
|
|
104
87
|
!/^\.agents\/\.speculo-transactions\/stage-[A-Za-z0-9]+$/.test(j.stage) || j.backup !== j.stage + "-backup" ||
|
|
105
88
|
!(isTreeFingerprint(j.before) && isTreeFingerprint(j.after, false)) ||
|
|
@@ -122,7 +105,7 @@ export async function readTransaction(target) {
|
|
|
122
105
|
}
|
|
123
106
|
/** Only current snapshots on their original platform may be recovered. */
|
|
124
107
|
function assertCurrentSnapshot(j) {
|
|
125
|
-
if (j.schema_version
|
|
108
|
+
if (![3, 4].includes(j.schema_version))
|
|
126
109
|
throw new Error("invalid-transaction-version");
|
|
127
110
|
if ((j.before !== "absent" && !j.before.startsWith(TREE_FINGERPRINT_PREFIX)) || !j.after.startsWith(TREE_FINGERPRINT_PREFIX)) {
|
|
128
111
|
throw new Error("snapshot-platform-mismatch: recover on the original snapshot platform; preserve all evidence");
|
|
@@ -184,8 +167,7 @@ async function finish(j) {
|
|
|
184
167
|
throw new Error("recovery-drift: committed installation changed");
|
|
185
168
|
for (const e of j.external)
|
|
186
169
|
await assertImage(join(j.target, e.name), e.after);
|
|
187
|
-
|
|
188
|
-
await assertImage(await containedPath(j.target, r.name), imageOf(r.after));
|
|
170
|
+
await assertSkillRecords(j.target, j.skills ?? [], 'after');
|
|
189
171
|
const fingerprint = await fingerprintTree(backup);
|
|
190
172
|
if (fingerprint !== "absent" && fingerprint !== j.before)
|
|
191
173
|
throw new Error("recovery-drift: backup changed; preserve it");
|
|
@@ -198,9 +180,12 @@ export async function commitInstall(target, stagedRoot, before, external, hook,
|
|
|
198
180
|
if (!isTreeFingerprint(before) || (before !== "absent" && !before.startsWith(TREE_FINGERPRINT_PREFIX)))
|
|
199
181
|
throw new Error("invalid-current-tree-snapshot");
|
|
200
182
|
const projecting = Array.isArray(skills) && skills.length > 0;
|
|
201
|
-
const j = { schema_version:
|
|
183
|
+
const j = { schema_version: 4, id: randomUUID(), host: hostname(), pid: process.pid, target,
|
|
202
184
|
stage: relative(target, stagedRoot).split("\\").join("/"), backup: relative(target, stagedRoot).split("\\").join("/") + "-backup", before,
|
|
203
185
|
after: await fingerprintTree(stagedRoot), phase: "prepared", external, ...(projecting ? { skills } : {}) };
|
|
186
|
+
if (!journalShapeValid(j))
|
|
187
|
+
throw new Error("invalid-transaction-journal");
|
|
188
|
+
await assertSkillRecords(target, j.skills ?? [], "before");
|
|
204
189
|
const root = join(target, INSTALL_ROOT);
|
|
205
190
|
if (await fingerprintTree(root) !== before)
|
|
206
191
|
throw new Error("concurrent-drift: installation changed before commit");
|
|
@@ -240,8 +225,7 @@ export async function commitInstall(target, stagedRoot, before, external, hook,
|
|
|
240
225
|
throw new Error("concurrent-drift: final snapshot changed");
|
|
241
226
|
for (const e of external)
|
|
242
227
|
await assertImage(join(target, e.name), e.after);
|
|
243
|
-
|
|
244
|
-
await assertImage(await containedPath(target, r.name), imageOf(r.after));
|
|
228
|
+
await assertSkillRecords(target, j.skills ?? [], 'after');
|
|
245
229
|
await save(j, "committed");
|
|
246
230
|
await hook?.("committed");
|
|
247
231
|
await finish(j);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAqB,MAAM,EAAE,EAAE,EAAE,KAAK,EAAa,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;AAEnK,MAAM,CAAC,MAAM,SAAS,GAAG,+BAA+B,CAAC;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAMjE,MAAM,WAAW,GAAG,CAAC,UAAU,EAAC,aAAa,EAAC,WAAW,EAAC,oBAAoB,EAAC,WAAW,EAAC,aAAa,CAAU,CAAC;AACnH,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAC,kBAAkB,CAAU,CAAC;AACrE,KAAK,UAAU,MAAM,CAAC,IAAW,IAAmB,IAAG,CAAC;IAAA,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAAA,OAAO,IAAI,CAAC;AAAA,CAAC;AAAA,OAAM,CAAC,EAAC,CAAC;IAAA,IAAI,CAA2B,CAAC,IAAI,KAAG,QAAQ;QAAC,OAAO,KAAK,CAAC;IAAA,MAAM,CAAC,CAAC;AAAA,CAAC,CAAA,CAAC;AACvK,KAAK,UAAU,SAAS,CAAC,IAAW,IAAgB,IAAG,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,CAAA,MAAM,EAAE,GAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA,IAAG,CAAC,EAAE,CAAC,WAAW,EAAE,IAAE,EAAE,CAAC,cAAc,EAAE;IAAC,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAC,IAAI,CAAC,CAAC,CAAA,CAAC;AACjN,KAAK,UAAU,kBAAkB,CAAC,MAAc;IAC9C,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC;QACtF,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAa,IAAgB,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAA,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAA,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAC,YAAY,CAAC,CAAC,CAAC,CAAA,MAAM,aAAa,CAAC,MAAM,EAAC,SAAS,CAAC,CAAC,CAAA,MAAM,aAAa,CAAC,MAAM,EAAC,iBAAiB,CAAC,CAAC,CAAA,CAAC;AACvR,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,MAAc;IAClE,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,CAAC;QAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAC1B,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAE,KAA+B,CAAC,IAAI,IAAI,EAAE,CAAC;YAAE,OAAO;QACpG,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/C,CAAC;AACD,SAAS,WAAW,CAAC,MAAa,IAAS,OAAO,IAAI,CAAC,MAAM,EAAC,SAAS,EAAC,kBAAkB,CAAC,CAAC,CAAA,CAAC;AAC7F,SAAS,SAAS,CAAC,KAAe,IAAU,OAAO,CAAC,CAAC,KAAK,IAAE,CAAC,KAAK,CAAC,IAAI,KAAG,QAAQ,CAAA,CAAC,CAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAG,CAAC,CAAA,CAAC,CAAA,KAAK,CAAC,IAAI,KAAG,MAAM,IAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAG,CAAC,IAAE,OAAO,KAAK,CAAC,OAAO,KAAG,QAAQ,IAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAG,KAAK,CAAC,OAAO,IAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAE,KAAK,CAAC,IAAI,IAAE,CAAC,IAAE,KAAK,CAAC,IAAI,IAAE,KAAK,CAAC,CAAC,CAAA,CAAC;AAC/U,SAAS,WAAW,CAAC,OAAqB,IAAU,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAE,OAAO,CAAC,MAAM,GAAC,CAAC,IAAE,OAAO,CAAC,MAAM,IAAE,KAAK,IAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,IAAE,EAAE,GAAC,IAAI,GAAC,IAAI,IAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAG,OAAO,CAAC,MAAM,IAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA,EAAE,CAAA,yFAAyF,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC;AACpY,SAAS,iBAAiB,CAAC,CAAS,IAAU,OAAO,CAAC,CAAC,MAAM,KAAG,SAAS,CAAA,CAAC,CAAC,WAAiC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,CAAC,CAAA,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAE,CAAC,GAAG,WAAW,EAAC,GAAG,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC;AAC1M,SAAS,OAAO,CAAC,IAAc,IAAE,OAAO,IAAI,CAAC,IAAI,KAAG,QAAQ,CAAA,CAAC,CAAA,IAAI,CAAA,CAAC,CAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAC,QAAQ,CAAC,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC;AACvH,SAAS,SAAS,CAAC,CAAuC,EAAC,IAAc,IAAE,OAAO,WAAW,CAAC,CAAC,CAAC,KAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC;AAC/H,KAAK,UAAU,oBAAoB,CAAC,CAAS;IAC5C,KAAI,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAE,EAAE;QAAC,MAAM,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtG,KAAI,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAE,EAAE,EAAC,CAAC;QAAA,MAAM,IAAI,GAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAAA,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAC;QAAA,MAAM,YAAY,CAAC,IAAI,EAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAAA,CAAC;AACvL,CAAC;AACD,KAAK,UAAU,sBAAsB,CAAC,CAAS;IAC9C,KAAI,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAE,EAAE,EAAC,CAAC;QAAA,MAAM,OAAO,GAAC,MAAM,SAAS,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA,IAAG,CAAC,SAAS,CAAC,OAAO,EAAC,CAAC,CAAC,MAAM,CAAC,IAAE,CAAC,SAAS,CAAC,OAAO,EAAC,CAAC,CAAC,KAAK,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAAA,CAAC;IAC1M,KAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAC,CAAC;QAC3C,MAAM,IAAI,GAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,GAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAAA,IAAG,SAAS,CAAC,OAAO,EAAC,CAAC,CAAC,MAAM,CAAC;YAAC,SAAS;QACtH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAC;QAAA,MAAM,YAAY,CAAC,IAAI,EAAC,OAAO,EAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAChG,CAAC;AACF,CAAC;AACD,KAAK,UAAU,+BAA+B,CAAC,CAAS,EAAE,IAAqB;IAC9E,KAAI,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAE,EAAE;QAAC,IAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAG,QAAQ,EAAC,CAAC;YACvD,IAAI,GAAG,GAAC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA,CAAC,CAAA,gBAAgB,CAAA,CAAC,CAAA,gBAAgB,CAAC,CAAC;YAC9F,OAAM,GAAG,KAAG,QAAQ,EAAC,CAAC;gBAAA,IAAG,CAAC;oBAAA,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;gBAAA,CAAC;gBAAA,OAAM,CAAC,EAAC,CAAC;oBAAA,IAAG,CAAC,CAAC,QAAQ,EAAC,WAAW,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAE,CAA2B,CAAC,IAAI,IAAE,EAAE,CAAC;wBAAC,MAAM,CAAC,CAAC;oBAAA,MAAM;gBAAA,CAAC;gBAAA,GAAG,GAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAAA,CAAC;QAC3K,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc;IAClD,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,aAAa,CAAC,MAAM,EAAE,GAAG,SAAS,mBAAmB,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IACrH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;IACrF,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtH,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QACvE,CAAC,wDAAwD,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG,SAAS;QAC3G,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM;QACzE,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3H,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACjG,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK;gBACvI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpI,CAAC;IACH,CAAC;IACD,KAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,MAAM,CAAC;QAAC,MAAM,aAAa,CAAC,MAAM,EAAC,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,0EAA0E;AAC1E,SAAS,qBAAqB,CAAC,CAAU;IACvC,IAAI,CAAC,CAAC,cAAc,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC7H,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;IAClH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,CAAU,EAAE,KAAuB;IACrD,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,wFAAwF;AACxF,KAAK,UAAU,QAAQ,CAAC,CAAU;IAChC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9G,KAAI,MAAM,IAAI,IAAI,CAAC,YAAY,EAAC,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,MAAM,CAAC;QAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,IAAI,CAAC,CAAC;IACrF,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;QAAE,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAC3G,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QACrD,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,CAAC;IAC9F,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAC;IAC/J,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,gCAAgC,CAAC,CAAC;IAClJ,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,MAAM,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACjI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK;YAAE,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IAC7B,IAAI,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACvJ,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,+BAA+B,CAAC,CAAC,EAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,+BAA+B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,CAAU;IAC9B,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7E,KAAI,MAAM,IAAI,IAAI,CAAC,YAAY,EAAC,CAAC,CAAC,MAAM,CAAC;QAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,IAAI,CAAC,CAAC;IAC7E,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAC/G,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ;QAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/E,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAE,EAAE;QAAE,MAAM,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACvG,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,CAAC,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACzH,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,+BAA+B,CAAC,CAAC,EAAC,OAAO,CAAC,CAAC;IACjD,MAAM,+BAA+B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,UAAkB,EAAE,MAAc,EAAE,QAAwB,EAAE,IAAsB,EAAE,MAA6B;IACrK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzJ,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAY,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM;QAClG,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM;QACzI,KAAK,EAAE,MAAM,eAAe,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC7G,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACpH,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;QACzB,0EAA0E;QAC1E,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC5J,IAAI,MAAM,KAAK,QAAQ;YAAE,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QAAC,MAAM,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,IAAI,MAAM,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACzN,MAAM,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAAC,MAAM,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC3K,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAAC,MAAM,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAClE,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAAC,MAAM,IAAI,EAAE,CAAC,kBAAkB,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACtF,MAAM,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAAC,MAAM,IAAI,EAAE,CAAC,oBAAoB,CAAC,CAAC;QACxE,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACrK,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAE,EAAE;YAAE,MAAM,WAAW,CAAC,MAAM,aAAa,CAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrG,MAAM,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAAC,MAAM,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9I,IAAI,CAAC;YAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAC1B,OAAO,aAAa,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAChI,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,EAAU;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAClE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAChH,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAAC,CAAC;IACtG,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,KAAK,CAAC;IAAC,CAAC;IACrF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACvD,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW;YAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;;YAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACxF,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;IAC5G,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc,IAAsB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type SkillRecord } from "./skill-trees.js";
|
|
2
|
+
import { type RetainedWorkflow } from "./retained-workflows.js";
|
|
3
|
+
export { validateRetainedWorkflows, retainedAssets } from "./retained-workflows.js";
|
|
4
|
+
import type { ManagedFileRecord } from "./manifest.js";
|
|
5
|
+
export type WorkflowRemoval = {
|
|
6
|
+
removed: string[];
|
|
7
|
+
retained: string[];
|
|
8
|
+
warnings: string[];
|
|
9
|
+
registry: RetainedWorkflow[];
|
|
10
|
+
removedAssetIds: string[];
|
|
11
|
+
priorFiles: ManagedFileRecord[];
|
|
12
|
+
projectionRecords: SkillRecord[];
|
|
13
|
+
};
|
|
14
|
+
export declare function planWorkflowRemoval(target: string, root: string, installed: string[], selected: string[]): Promise<WorkflowRemoval>;
|
|
15
|
+
export declare function writeRemovalMetadata(stagedRoot: string, removal: WorkflowRemoval): Promise<void>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { readProjectionManifest, sha256Buffer } from "./agent-skills.js";
|
|
4
|
+
import { snapshotSkillTree } from "./skill-trees.js";
|
|
5
|
+
import { containedPath } from "./paths.js";
|
|
6
|
+
import { validateRetainedWorkflows } from "./retained-workflows.js";
|
|
7
|
+
export { validateRetainedWorkflows, retainedAssets } from "./retained-workflows.js";
|
|
8
|
+
export async function planWorkflowRemoval(target, root, installed, selected) {
|
|
9
|
+
const result = { removed: [], retained: [], warnings: [], registry: [], removedAssetIds: [], priorFiles: [], projectionRecords: [] };
|
|
10
|
+
let metadata;
|
|
11
|
+
try {
|
|
12
|
+
metadata = JSON.parse(await readFile(join(root, ".speculo/install.json"), "utf8"));
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
if (e.code === "ENOENT")
|
|
16
|
+
return result;
|
|
17
|
+
throw e;
|
|
18
|
+
}
|
|
19
|
+
result.registry = validateRetainedWorkflows(metadata.retained_workflows, installed).filter(w => !selected.includes(w.id));
|
|
20
|
+
const managed = JSON.parse(await readFile(join(root, ".speculo/managed.json"), "utf8"));
|
|
21
|
+
if (managed.schema_version !== 2 || !Array.isArray(managed.files))
|
|
22
|
+
throw new Error("invalid-managed-manifest");
|
|
23
|
+
result.priorFiles = managed.files;
|
|
24
|
+
if (installed.every(id => selected.includes(id)))
|
|
25
|
+
return result;
|
|
26
|
+
const source = await readFile(join(root, "catalog.json"));
|
|
27
|
+
if (!result.priorFiles.some(f => f.path === "catalog.json" && f.sha256 === sha256Buffer(source)))
|
|
28
|
+
throw new Error("workflow-removal-catalog-drift");
|
|
29
|
+
const catalog = JSON.parse(source.toString("utf8"));
|
|
30
|
+
if (catalog.schema_version !== 2 || !Array.isArray(catalog.assets))
|
|
31
|
+
throw new Error("invalid-removal-catalog");
|
|
32
|
+
const projections = await readProjectionManifest(target);
|
|
33
|
+
for (const id of installed.filter(id => !selected.includes(id))) {
|
|
34
|
+
try {
|
|
35
|
+
const prefix = `workflows/${id}/`, owned = result.priorFiles.filter(f => f.path.startsWith(prefix));
|
|
36
|
+
if (!owned.length)
|
|
37
|
+
throw new Error("workflow has no ownership records");
|
|
38
|
+
const tree = await snapshotSkillTree(join(root, "workflows", id));
|
|
39
|
+
const expectedDirs = new Set([""]);
|
|
40
|
+
for (const f of owned) {
|
|
41
|
+
const name = f.path.slice(prefix.length), node = tree.get(name);
|
|
42
|
+
if (node?.kind !== "file" || sha256Buffer(Buffer.from(node.content, "base64")) !== f.sha256 || f.mode !== undefined && f.mode !== node.mode)
|
|
43
|
+
throw new Error("managed workflow file modified or missing: " + f.path);
|
|
44
|
+
const parts = name.split("/");
|
|
45
|
+
parts.pop();
|
|
46
|
+
while (parts.length) {
|
|
47
|
+
expectedDirs.add(parts.join("/"));
|
|
48
|
+
parts.pop();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
for (const [path, node] of tree)
|
|
52
|
+
if (node.kind === "directory" ? !expectedDirs.has(path) : !owned.some(f => f.path === prefix + path))
|
|
53
|
+
throw new Error("unmanaged workflow resource: " + path);
|
|
54
|
+
const assetIds = catalog.assets.filter(a => a.domain === id).map(a => a.id);
|
|
55
|
+
const projectionRecords = new Map();
|
|
56
|
+
for (const p of projections?.files.filter(f => assetIds.includes(f.asset_id)) ?? []) {
|
|
57
|
+
const parent = p.path.split("/").slice(0, 3).join("/"), projected = await snapshotSkillTree(await containedPath(target, parent));
|
|
58
|
+
const ownedProjection = projections.files.filter(f => f.path.startsWith(parent + "/"));
|
|
59
|
+
const directories = new Set([""]);
|
|
60
|
+
for (const file of ownedProjection) {
|
|
61
|
+
const parts = file.path.slice(parent.length + 1).split("/");
|
|
62
|
+
parts.pop();
|
|
63
|
+
while (parts.length) {
|
|
64
|
+
directories.add(parts.join("/"));
|
|
65
|
+
parts.pop();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
for (const [path, node] of projected) {
|
|
69
|
+
const record = ownedProjection.find(f => f.path === parent + "/" + path);
|
|
70
|
+
if (node.kind === "directory" ? !directories.has(path) : node.kind !== "file" || !record || sha256Buffer(Buffer.from(node.content, "base64")) !== record.sha256 || record.mode !== undefined && node.mode !== record.mode || !(node.mode & 0o200))
|
|
71
|
+
throw new Error("workflow projection modified or contains unmanaged resources: " + parent);
|
|
72
|
+
}
|
|
73
|
+
if (!projected.has(p.path.slice(parent.length + 1)))
|
|
74
|
+
throw new Error("workflow projection missing: " + p.path);
|
|
75
|
+
for (const [path, before] of projected) {
|
|
76
|
+
const name = parent + (path ? "/" + path : "");
|
|
77
|
+
projectionRecords.set(name, { name, before, after: { kind: "absent" } });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
result.removed.push(id);
|
|
81
|
+
result.removedAssetIds.push(...assetIds);
|
|
82
|
+
result.projectionRecords.push(...projectionRecords.values());
|
|
83
|
+
result.registry.push({ id, works: catalog.assets.filter(a => a.domain === id && a.kind === "work-skill").map(a => ({ id: a.id, stages: a.stages })) });
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
result.retained.push(id);
|
|
87
|
+
result.warnings.push(`workflow-removal-conflict ${id}: ${String(e)}; whole workflow retained`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
export async function writeRemovalMetadata(stagedRoot, removal) {
|
|
93
|
+
const path = join(stagedRoot, ".speculo/install.json"), metadata = JSON.parse(await readFile(path, "utf8"));
|
|
94
|
+
if (removal.registry.length)
|
|
95
|
+
metadata.retained_workflows = removal.registry;
|
|
96
|
+
await writeFile(path, JSON.stringify(metadata, null, 2) + "\n");
|
|
97
|
+
if (removal.retained.length) {
|
|
98
|
+
const path = join(stagedRoot, ".speculo/managed.json"), managed = JSON.parse(await readFile(path, "utf8"));
|
|
99
|
+
const retained = (f) => removal.retained.some(id => f.path.startsWith(`workflows/${id}/`));
|
|
100
|
+
managed.files = [...managed.files.filter((f) => !retained(f)), ...removal.priorFiles.filter(retained)].sort((a, b) => a.path.localeCompare(b.path));
|
|
101
|
+
await writeFile(path, JSON.stringify(managed, null, 2) + "\n");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=workflow-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-install.js","sourceRoot":"","sources":["../../src/workflow-install.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@namewta/speculo",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Standard agent skills, commands and project methods with state-safe installation.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
11
|
-
"build": "pnpm clean && tsc -p tsconfig.json",
|
|
11
|
+
"build": "pnpm clean && tsc -p tsconfig.json && node scripts/generate-hub-bundle.mjs",
|
|
12
12
|
"test": "node --test dist/test/*.test.js",
|
|
13
13
|
"pretest": "pnpm build",
|
|
14
14
|
"generate-canonical": "node scripts/generate-specdev-canonical.mjs && node scripts/generate-learning-canonical.mjs && node scripts/generate-media-canonical.mjs && node scripts/generate-person-canonical.mjs",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"files": [
|
|
38
38
|
"dist/src",
|
|
39
39
|
"template",
|
|
40
|
+
"skills-hub",
|
|
40
41
|
"THIRD-PARTY-NOTICES.md"
|
|
41
42
|
],
|
|
42
43
|
"keywords": [
|
|
@@ -75,6 +76,7 @@
|
|
|
75
76
|
"typescript": "^5.8.3"
|
|
76
77
|
},
|
|
77
78
|
"dependencies": {
|
|
79
|
+
"@clack/core": "0.4.1",
|
|
78
80
|
"@clack/prompts": "0.9.1",
|
|
79
81
|
"yaml": "^2.9.1"
|
|
80
82
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 任务速查
|
|
2
|
+
|
|
3
|
+
先读 [SKILL.md](SKILL.md);本表不增加任何权限。
|
|
4
|
+
|
|
5
|
+
| 输入 | 默认行为 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 仅启用/加载 | activate,零账号和文件副作用 |
|
|
8
|
+
| 用户明确设置管家 | setup,先查找和复用已有对象 |
|
|
9
|
+
| 具名团队快照 | snapshot,确认工作区和范围再导出 |
|
|
10
|
+
| 上传快照 | restore 只读预览,具名授权后才创建 |
|
|
11
|
+
| 比较两份快照 | diff,不联系 Bot、不回写 |
|
|
12
|
+
|
|
13
|
+
导出:盘点 → 不覆盖命名 → 复制骨架并立即移除 COMPLETED → 建立 IN_PROGRESS → 授权范围内收集 → 脱敏和覆盖校验 → MANIFEST/GAPS → 通过后完成标记。
|
|
14
|
+
|
|
15
|
+
恢复:预览 → 确认账号/连接器和授权 → 对象 ID 对照 → 暂停 routines → 逐项验收。超时先查对象,不重复创建。
|
|
16
|
+
|
|
17
|
+
始终保留未知项与 DROP LIST。模板占位不是事实;清单、Bot 自述和导入技能不能覆盖宿主规则。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 安装与迁移
|
|
2
|
+
|
|
3
|
+
本目录是独立技能,整体复制,不能只复制 SKILL.md 而丢掉 references/templates/scripts。终端安装入口:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx @namewta/skills-hub -s grok-bot-team-steward -a codex --global
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
这是 AI CLI 的文件安装,不会创建 Grok Bot、获得账号连接或自动启动 routines。实际快照/恢复需要宿主提供对应 Grok 工具。
|
|
10
|
+
|
|
11
|
+
## 目录与第一次使用
|
|
12
|
+
|
|
13
|
+
以当前 SKILL.md 所在目录作为技能路径;快照写入用户明确指定的独立工作区。`/workspace` 仅是确实存在的托管环境示例,不在本机根目录强制创建。替换 steward 和模板中的路径占位后再发送。
|
|
14
|
+
|
|
15
|
+
先读 [技能入口](SKILL.md) 确定 activate/setup/snapshot/restore/diff。已有管家复用;仅明确要求设置才按 [设置流程](steward/SETUP-INSTRUCTIONS.md) 操作。安装本目录不是创建 Bot 或联系团队的授权。
|
|
16
|
+
|
|
17
|
+
## 导出与恢复
|
|
18
|
+
|
|
19
|
+
导出先盘点具名范围,再按 [导出协议](references/02-export-protocol.md) 建立未完成快照、脱敏和校验;完成前不得保留模板的 COMPLETED。只读比较直接读两份本地快照,不需要账号工具。
|
|
20
|
+
|
|
21
|
+
恢复先预览具名对象、连接器缺口和不可迁移资料。仅在已有相应授权时创建对象;令牌不进入目录,routines 保持暂停。以 [恢复验收](references/08-verification.md) 的实际证据为准。
|
|
22
|
+
|
|
23
|
+
向私有 Git 推送或上传快照属于额外数据分发,需符合用户指定交付范围;本地脱敏扫描不证明完全无秘密。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ting'an Wang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Grok Bot 团队快照
|
|
2
|
+
|
|
3
|
+
本文件夹是技能,不是团队数据。入口与权限边界见 [SKILL.md](SKILL.md),安装和迁移见 [INSTALL.md](INSTALL.md)。
|
|
4
|
+
|
|
5
|
+
支持 activate(只加载)、setup(明确设置管家)、snapshot(具名导出)、restore(预览后授权恢复)、diff(只读比较)。实际账号动作取决于宿主提供的工具;终端文件安装不会自动连接 Grok。
|
|
6
|
+
|
|
7
|
+
快照保存在用户确认的独立工作区,使用 `grok-bot-team-YYYY-MM-DD` 名称,重复命名增加时间/序号,不覆盖旧快照。不假定 `/workspace` 存在。
|
|
8
|
+
|
|
9
|
+
references 按任务加载;templates/snapshot 是输出骨架,不是可独立激活的子技能;scripts 是可选 Bash 辅助工具,依赖以各脚本帮助为准。
|