41659b2412
The skill half of the persona/skill pair, as a clean redesign (not a faithful lift of mort's 60-method skills.Storage kitchen sink): - skill.go/skill_version.go/validate.go/inputs.go/schedule.go moved clean; the only host couplings severed: llms.IsTierName -> model.IsTierName, and the chatbot DefaultChatbotInputName const localized. - store.go: a DELIBERATELY LEAN SkillStore — skill lifecycle (CRUD + visibility) + versioning + scheduling ONLY. The KV/file/quota sub-stores that were fused into mort's interface are the tools/ store seams; email/channel grants stay host concerns. - runnable.go: Skill.ToRunnable() lowers a skill into run.RunnableAgent (flat tool list, no palette — composition is a host concern); DueAt() helper. - memory.go: NewMemory() — zero-dep in-process SkillStore (visibility filters, newest-first versions). Tests: ToRunnable mapping, visibility (public/shared/private) listing, version ordering + lookup. No mort dependency (go.mod tidy clean); core imports ZERO from skill. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
1.4 KiB
Go
29 lines
1.4 KiB
Go
package skill
|
|
|
|
import "time"
|
|
|
|
// SkillVersion is one immutable snapshot of a Skill at the moment it
|
|
// was saved. The skill_versions table is append-only; pruning is by
|
|
// retention policy in PruneOldVersions.
|
|
//
|
|
// Why: edit history with rollback (v3) and the admin pin gate (v3 Phase 4)
|
|
// both need a stable snapshot of the skill at a known version. The Snapshot
|
|
// field carries the FULL Skill struct so a later restore or pin produces
|
|
// the exact agent definition that was saved — system_prompt, tools,
|
|
// schedule, every field — not a synthesized partial snapshot.
|
|
//
|
|
// What: identity (UUID per snapshot) + skill ref + version-string copy +
|
|
// the full Skill payload + audit fields (saved_by, saved_at, edit_summary).
|
|
//
|
|
// Test: see skill_version_test.go for round-trip, list ordering, prune
|
|
// retention, and version-by-number disambiguation coverage.
|
|
type SkillVersion struct {
|
|
ID string // UUID per snapshot (NOT the skill's ID)
|
|
SkillID string // FK to skills.id (conceptually; not enforced by GORM)
|
|
Version string // Skill.Version at save time (semver)
|
|
Snapshot Skill // full Skill struct embedded; serialised as JSON
|
|
SavedBy string // caller member ID (or "" for builtin loader / pre-v3)
|
|
SavedAt time.Time // wall-clock save time
|
|
EditSummary string // optional human-readable note ("changed model tier", "...")
|
|
}
|