@senpi/runtime 1.0.95-dev.runtime-phase-2.20260508073606 → 1.1.0-dev.main.20260527104621
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/dist/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +4 -1
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts +30 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js +87 -15
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +19 -2
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/open-position/resolve-margin.d.ts +9 -1
- package/dist/actions/open-position/resolve-margin.d.ts.map +1 -1
- package/dist/actions/open-position/resolve-margin.js +12 -1
- package/dist/actions/open-position/resolve-margin.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +8 -4
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-cli-config.d.ts +15 -1
- package/dist/cli/senpi-cli-config.d.ts.map +1 -1
- package/dist/cli/senpi-cli-config.js +20 -4
- package/dist/cli/senpi-cli-config.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +163 -0
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/dsl/engine-client/config-mapping.d.ts +5 -0
- package/dist/dsl/engine-client/config-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/config-mapping.js +14 -2
- package/dist/dsl/engine-client/config-mapping.js.map +1 -1
- package/dist/dsl/engine-client/event-mapping.d.ts +5 -1
- package/dist/dsl/engine-client/event-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/event-mapping.js +6 -0
- package/dist/dsl/engine-client/event-mapping.js.map +1 -1
- package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
- package/dist/dsl/events/build-closed-event.js +2 -0
- package/dist/dsl/events/build-closed-event.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +9 -5
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/events/initial-state.d.ts +2 -2
- package/dist/dsl/events/initial-state.d.ts.map +1 -1
- package/dist/dsl/events/initial-state.js +4 -1
- package/dist/dsl/events/initial-state.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +38 -1
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/notifications/formatter.js +1 -1
- package/dist/dsl/notifications/formatter.js.map +1 -1
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +248 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/auto-update/coordinator.d.ts +13 -0
- package/dist/runtime/auto-update/coordinator.d.ts.map +1 -1
- package/dist/runtime/auto-update/coordinator.js +22 -8
- package/dist/runtime/auto-update/coordinator.js.map +1 -1
- package/dist/runtime/decision-errors.d.ts +166 -0
- package/dist/runtime/decision-errors.d.ts.map +1 -0
- package/dist/runtime/decision-errors.js +328 -0
- package/dist/runtime/decision-errors.js.map +1 -0
- package/dist/runtime/notifications.d.ts +15 -1
- package/dist/runtime/notifications.d.ts.map +1 -1
- package/dist/runtime/notifications.js +16 -11
- package/dist/runtime/notifications.js.map +1 -1
- package/dist/runtime/run.d.ts +36 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +9 -0
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +1019 -1
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +34 -0
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +7 -4
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/senpi/types.d.ts +2 -1
- package/dist/senpi/types.d.ts.map +1 -1
- package/dist/skills-manager/bootstrap.d.ts +26 -0
- package/dist/skills-manager/bootstrap.d.ts.map +1 -0
- package/dist/skills-manager/bootstrap.js +86 -0
- package/dist/skills-manager/bootstrap.js.map +1 -0
- package/dist/skills-manager/constants.d.ts +65 -0
- package/dist/skills-manager/constants.d.ts.map +1 -0
- package/dist/skills-manager/constants.js +91 -0
- package/dist/skills-manager/constants.js.map +1 -0
- package/dist/skills-manager/coordinator.d.ts +346 -0
- package/dist/skills-manager/coordinator.d.ts.map +1 -0
- package/dist/skills-manager/coordinator.js +1037 -0
- package/dist/skills-manager/coordinator.js.map +1 -0
- package/dist/skills-manager/fetcher.d.ts +28 -0
- package/dist/skills-manager/fetcher.d.ts.map +1 -0
- package/dist/skills-manager/fetcher.js +92 -0
- package/dist/skills-manager/fetcher.js.map +1 -0
- package/dist/skills-manager/index.d.ts +5 -0
- package/dist/skills-manager/index.d.ts.map +1 -0
- package/dist/skills-manager/index.js +4 -0
- package/dist/skills-manager/index.js.map +1 -0
- package/dist/skills-manager/state-store.d.ts +57 -0
- package/dist/skills-manager/state-store.d.ts.map +1 -0
- package/dist/skills-manager/state-store.js +129 -0
- package/dist/skills-manager/state-store.js.map +1 -0
- package/dist/skills-manager/types.d.ts +177 -0
- package/dist/skills-manager/types.d.ts.map +1 -0
- package/dist/skills-manager/types.js +2 -0
- package/dist/skills-manager/types.js.map +1 -0
- package/dist/skills-manager/utils.d.ts +81 -0
- package/dist/skills-manager/utils.d.ts.map +1 -0
- package/dist/skills-manager/utils.js +143 -0
- package/dist/skills-manager/utils.js.map +1 -0
- package/dist/skills-manager/version-manager.d.ts +146 -0
- package/dist/skills-manager/version-manager.d.ts.map +1 -0
- package/dist/skills-manager/version-manager.js +299 -0
- package/dist/skills-manager/version-manager.js.map +1 -0
- package/dist/skills-manager/writer.d.ts +28 -0
- package/dist/skills-manager/writer.d.ts.map +1 -0
- package/dist/skills-manager/writer.js +101 -0
- package/dist/skills-manager/writer.js.map +1 -0
- package/dist/state/state-manager.d.ts +3 -0
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +9 -0
- package/dist/state/state-manager.js.map +1 -1
- package/dist/types/dsl/index.d.ts +22 -3
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/utils/retry.d.ts +7 -0
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +5 -1
- package/dist/utils/retry.js.map +1 -1
- package/openclaw.plugin.json +28 -1
- package/package.json +3 -1
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version detection for Senpi skills.
|
|
3
|
+
*
|
|
4
|
+
* Reads the installed SKILL.md version from disk and the remote version from
|
|
5
|
+
* raw.githubusercontent.com, then uses the existing semver helpers from
|
|
6
|
+
* src/runtime/auto-update/policy.ts to classify the delta.
|
|
7
|
+
*/
|
|
8
|
+
import { readFile } from "node:fs/promises";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { classifyUpdate, parseSemver } from "../runtime/auto-update/policy.js";
|
|
11
|
+
import { SKILLS_RAW_BASE_URL } from "./constants.js";
|
|
12
|
+
import { formatErr } from "./utils.js";
|
|
13
|
+
/**
|
|
14
|
+
* Normalise a version string before passing it to parseSemver / classifyUpdate.
|
|
15
|
+
*
|
|
16
|
+
* Accepts two-part versions used in production skills (e.g. "1.0", "v2.3")
|
|
17
|
+
* and expands them to the full three-part form ("1.0.0", "v2.3.0") that
|
|
18
|
+
* parseSemver requires. All other strings are returned unchanged.
|
|
19
|
+
*/
|
|
20
|
+
export function normalizeVersion(v) {
|
|
21
|
+
return /^v?\d+\.\d+$/.test(v.trim()) ? `${v.trim()}.0` : v;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extract the `version` value from a SKILL.md YAML frontmatter block.
|
|
25
|
+
*
|
|
26
|
+
* Handles both nested form:
|
|
27
|
+
* metadata:
|
|
28
|
+
* version: 1.2.3
|
|
29
|
+
* and flat form:
|
|
30
|
+
* version: "1.2.3"
|
|
31
|
+
*
|
|
32
|
+
* Returns null when the frontmatter block is absent or the field is missing.
|
|
33
|
+
*/
|
|
34
|
+
export function parseSkillMdVersion(content) {
|
|
35
|
+
const match = /^---\r?\n([\s\S]*?)\r?\n---/.exec(content.trim());
|
|
36
|
+
if (!match)
|
|
37
|
+
return null;
|
|
38
|
+
const frontmatter = match[1];
|
|
39
|
+
const versionMatch = /(?:^|\n)[ \t]*version:[ \t]*["']?([^\s"'\r\n]+)["']?/i.exec(frontmatter);
|
|
40
|
+
return versionMatch ? versionMatch[1].trim() : null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract the `description` value from a SKILL.md YAML frontmatter block.
|
|
44
|
+
*
|
|
45
|
+
* Skill descriptions can be authored a few different ways. This helper
|
|
46
|
+
* handles the real-world shapes that appear in the senpi-skills repo today:
|
|
47
|
+
*
|
|
48
|
+
* 1. Single-line, double-quoted:
|
|
49
|
+
* description: "Configure, deploy, ..."
|
|
50
|
+
* 2. Single-line, single-quoted or unquoted:
|
|
51
|
+
* description: Manage runtimes ...
|
|
52
|
+
* 3. YAML block scalar (folded or literal, optional chomping indicator):
|
|
53
|
+
* description: >
|
|
54
|
+
* A short summary
|
|
55
|
+
* continues on this line.
|
|
56
|
+
* description: >- # strip trailing newlines (this PR's senpi-skills repo)
|
|
57
|
+
* A short summary
|
|
58
|
+
* description: | # literal — preserves newlines (collapsed to spaces here)
|
|
59
|
+
* A short summary
|
|
60
|
+
* description: |+ # keep trailing newlines (same handling)
|
|
61
|
+
*
|
|
62
|
+
* The block scalar header is `[>|][-+]?` per the YAML 1.2 spec:
|
|
63
|
+
* `>` = folded, `|` = literal; `-` strips trailing newlines,
|
|
64
|
+
* `+` keeps them, no indicator clips. For notification rendering we
|
|
65
|
+
* always collapse to a single line joined by spaces, so the chomping
|
|
66
|
+
* indicator only affects whether we match the block-scalar branch.
|
|
67
|
+
*
|
|
68
|
+
* Returns null when the field is absent or the frontmatter block is missing.
|
|
69
|
+
*
|
|
70
|
+
* Note: kept as a regex extractor rather than introducing a full YAML
|
|
71
|
+
* parse here — `parseSkillMdVersion` uses the same approach, and skill
|
|
72
|
+
* frontmatters are constrained enough that the regex covers the shapes we
|
|
73
|
+
* actually encounter. If we ever adopt a full YAML parser for this file,
|
|
74
|
+
* both helpers should switch together.
|
|
75
|
+
*/
|
|
76
|
+
export function parseSkillMdDescription(content) {
|
|
77
|
+
const match = /^---\r?\n([\s\S]*?)\r?\n---/.exec(content.trim());
|
|
78
|
+
if (!match)
|
|
79
|
+
return null;
|
|
80
|
+
const frontmatter = match[1];
|
|
81
|
+
// Shape 3: block scalar — `description:` followed by a `>` or `|` header
|
|
82
|
+
// (optionally with a `-` / `+` chomping indicator) on its own line, then
|
|
83
|
+
// indented continuation lines. Stop at the first un-indented line or the
|
|
84
|
+
// end of frontmatter. We collapse the indent and join lines into a single
|
|
85
|
+
// string so the notification renderer doesn't emit raw YAML continuations.
|
|
86
|
+
//
|
|
87
|
+
// Pre-fix this regex was `[>|]` (no indicator). A SKILL.md authored with
|
|
88
|
+
// `description: >-` (the YAML strip-trailing-newlines variant — what the
|
|
89
|
+
// senpi-skills repo actually uses) didn't match, fell through to the
|
|
90
|
+
// inline branch, and ended up capturing the literal "`>-`" as the value.
|
|
91
|
+
// That's the bug report this fixes: the Telegram notification showed
|
|
92
|
+
// `>-` instead of the real description.
|
|
93
|
+
const foldedMatch = /(?:^|\n)description:[ \t]*[>|][-+]?[ \t]*\r?\n([\s\S]*?)(?=\n[^\s]|\n?$)/i.exec(frontmatter);
|
|
94
|
+
if (foldedMatch) {
|
|
95
|
+
const lines = foldedMatch[1]
|
|
96
|
+
.split(/\r?\n/)
|
|
97
|
+
.map((l) => l.replace(/^[ \t]+/, "").trim())
|
|
98
|
+
.filter((l) => l.length > 0);
|
|
99
|
+
if (lines.length > 0)
|
|
100
|
+
return lines.join(" ");
|
|
101
|
+
}
|
|
102
|
+
// Shapes 1 + 2: single-line value. Allow optional surrounding quotes.
|
|
103
|
+
// The value runs to the end of the line; trailing whitespace + matching
|
|
104
|
+
// closing quote stripped.
|
|
105
|
+
const inlineMatch = /(?:^|\n)description:[ \t]*(?:"((?:[^"\\]|\\.)*)"|'((?:[^'\\]|\\.)*)'|([^\r\n]+?))[ \t]*(?:\r?\n|$)/i
|
|
106
|
+
.exec(frontmatter);
|
|
107
|
+
if (inlineMatch) {
|
|
108
|
+
// Unescape `\"` and `\\` for double-quoted form; single-quoted is taken
|
|
109
|
+
// literally per YAML (no escapes). Unquoted form passes through.
|
|
110
|
+
const raw = inlineMatch[1] ?? inlineMatch[2] ?? inlineMatch[3] ?? "";
|
|
111
|
+
const value = inlineMatch[1]
|
|
112
|
+
? raw.replace(/\\(["\\])/g, "$1")
|
|
113
|
+
: raw;
|
|
114
|
+
const trimmed = value.trim();
|
|
115
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
// `summarizeDescription` (sentence-cut + char-cap truncator) was removed
|
|
120
|
+
// alongside the notification reformat in PR #78. The new nested-bullet
|
|
121
|
+
// notification format renders the full description verbatim so users get
|
|
122
|
+
// the complete context for the skill they're being notified about.
|
|
123
|
+
// Telegram's own 4096-char message limit is the only remaining ceiling,
|
|
124
|
+
// and skill descriptions in the senpi-skills repo are nowhere near that.
|
|
125
|
+
/**
|
|
126
|
+
* Read both the installed version and description for a skill from its local
|
|
127
|
+
* SKILL.md. Shared core for `readLocalVersion` and `readLocalDescription` so a
|
|
128
|
+
* tick that needs both pays a single file read per dir rather than two.
|
|
129
|
+
*
|
|
130
|
+
* Multi-dir search path: tries each entry in order and returns the first
|
|
131
|
+
* readable SKILL.md's parsed fields. Either field may be null if absent in
|
|
132
|
+
* the frontmatter — that's distinct from "no SKILL.md found at all" (which
|
|
133
|
+
* returns nulls only after every dir has been tried).
|
|
134
|
+
*/
|
|
135
|
+
export async function readLocalSkillMetadata(skillsDir, skillName, logger) {
|
|
136
|
+
const dirs = typeof skillsDir === "string" ? [skillsDir] : skillsDir;
|
|
137
|
+
for (const dir of dirs) {
|
|
138
|
+
const filePath = join(dir, skillName, "SKILL.md");
|
|
139
|
+
try {
|
|
140
|
+
const content = await readFile(filePath, "utf8");
|
|
141
|
+
// First readable SKILL.md wins, even if its fields are missing —
|
|
142
|
+
// a present-but-versionless file is meaningful state (skill predates
|
|
143
|
+
// versioning), not a "not found" signal that should let the next dir
|
|
144
|
+
// override it.
|
|
145
|
+
return {
|
|
146
|
+
version: parseSkillMdVersion(content),
|
|
147
|
+
description: parseSkillMdDescription(content),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
if (err.code === "ENOENT") {
|
|
152
|
+
continue; // try next dir
|
|
153
|
+
}
|
|
154
|
+
logger?.warn(`[senpi-skills-manager] failed to read SKILL.md for "${skillName}" | path=${filePath} err=${formatErr(err)}`);
|
|
155
|
+
// Non-ENOENT (permissions, I/O error) — log and keep trying the
|
|
156
|
+
// remaining dirs rather than short-circuit; if one mirror is broken,
|
|
157
|
+
// a healthy mirror further down the path should still serve metadata.
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return { version: null, description: null };
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Read the installed version for a skill from its local SKILL.md.
|
|
164
|
+
*
|
|
165
|
+
* Accepts either a single dir (legacy callers) or an array of dirs (new
|
|
166
|
+
* multi-dir search path). When given an array, tries each entry in order and
|
|
167
|
+
* returns the first non-null match — this mirrors the documented behaviour
|
|
168
|
+
* that `skillsDir[0]` is the *primary* (writes go here) and the remaining
|
|
169
|
+
* entries are read-only fallbacks scanned during version checks.
|
|
170
|
+
*
|
|
171
|
+
* Returns null when no readable SKILL.md is found across any of the
|
|
172
|
+
* candidate dirs, or when the version field is absent. Logs a warning per
|
|
173
|
+
* dir for unexpected errors (anything other than ENOENT).
|
|
174
|
+
*/
|
|
175
|
+
export async function readLocalVersion(skillsDir, skillName, logger) {
|
|
176
|
+
return (await readLocalSkillMetadata(skillsDir, skillName, logger)).version;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Read the installed description for a skill from its local SKILL.md.
|
|
180
|
+
* Multi-dir search path semantics identical to `readLocalVersion`.
|
|
181
|
+
*
|
|
182
|
+
* Returns null when no readable SKILL.md is found across any of the
|
|
183
|
+
* candidate dirs, or when the description field is absent.
|
|
184
|
+
*/
|
|
185
|
+
export async function readLocalDescription(skillsDir, skillName, logger) {
|
|
186
|
+
return (await readLocalSkillMetadata(skillsDir, skillName, logger)).description;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Fetch the remote SKILL.md for a skill and return both the version and the
|
|
190
|
+
* description in one network round-trip.
|
|
191
|
+
*
|
|
192
|
+
* Notification text uses the description from the **remote** SKILL.md (not
|
|
193
|
+
* the local one) so the "About:" line reflects the version the user is being
|
|
194
|
+
* asked about — a description on disk for v1.x may be stale relative to the
|
|
195
|
+
* v2.0.0 the major-update notification is announcing.
|
|
196
|
+
*
|
|
197
|
+
* Returns null fields when the skill does not exist in the remote repo
|
|
198
|
+
* (HTTP 404) — that's a legitimate state ("skill removed or not yet
|
|
199
|
+
* published"), not an error, so it should not pollute failure counters.
|
|
200
|
+
* Both fields may also be null when the remote SKILL.md is present but
|
|
201
|
+
* its frontmatter omits the corresponding field.
|
|
202
|
+
*
|
|
203
|
+
* Throws on transient/operational failures (network errors, timeouts, 5xx
|
|
204
|
+
* responses, body-parse failures) so the caller's failure-recording path can
|
|
205
|
+
* fire.
|
|
206
|
+
*
|
|
207
|
+
* @param fetchImpl Injectable for unit testing — defaults to global `fetch`.
|
|
208
|
+
*/
|
|
209
|
+
export async function fetchRemoteSkillMetadata(skillName, rawBaseUrl = SKILLS_RAW_BASE_URL, fetchImpl = fetch) {
|
|
210
|
+
const url = `${rawBaseUrl}/${encodeURIComponent(skillName)}/SKILL.md`;
|
|
211
|
+
let res;
|
|
212
|
+
try {
|
|
213
|
+
res = await fetchImpl(url, { signal: AbortSignal.timeout(15_000) });
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
throw new Error(`Network error fetching remote SKILL.md for "${skillName}": ${formatErr(err)}`);
|
|
217
|
+
}
|
|
218
|
+
// 404 = skill is not in the remote repo. Treated as "no remote metadata"
|
|
219
|
+
// rather than a failure so the caller can skip cleanly without escalating.
|
|
220
|
+
if (res.status === 404) {
|
|
221
|
+
return { version: null, description: null };
|
|
222
|
+
}
|
|
223
|
+
if (!res.ok) {
|
|
224
|
+
throw new Error(`Failed to fetch remote SKILL.md for "${skillName}": HTTP ${res.status} ${res.statusText}`);
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
const text = await res.text();
|
|
228
|
+
return {
|
|
229
|
+
version: parseSkillMdVersion(text),
|
|
230
|
+
description: parseSkillMdDescription(text),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
throw new Error(`Failed to read response body for "${skillName}": ${formatErr(err)}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Fetch the remote SKILL.md for a skill and return its version.
|
|
239
|
+
*
|
|
240
|
+
* Thin wrapper over {@link fetchRemoteSkillMetadata} kept for backward
|
|
241
|
+
* compatibility with callers (and tests) that only need the version field.
|
|
242
|
+
* New code that wants both version + description in a single round-trip
|
|
243
|
+
* should call `fetchRemoteSkillMetadata` directly.
|
|
244
|
+
*/
|
|
245
|
+
export async function fetchRemoteVersion(skillName, rawBaseUrl = SKILLS_RAW_BASE_URL, fetchImpl = fetch) {
|
|
246
|
+
return (await fetchRemoteSkillMetadata(skillName, rawBaseUrl, fetchImpl)).version;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Compare the local and remote versions for a skill and return a classified diff.
|
|
250
|
+
*
|
|
251
|
+
* Special cases:
|
|
252
|
+
* - Local version is null (skill predates versioning) + valid remote → "minor"
|
|
253
|
+
* so the update is auto-applied without manual major-version approval.
|
|
254
|
+
* - Local version exists but is not valid semver (e.g. "latest") → "unknown",
|
|
255
|
+
* skip safely.
|
|
256
|
+
* - Remote version is absent or unparseable → "unknown", caller should log and
|
|
257
|
+
* skip.
|
|
258
|
+
*/
|
|
259
|
+
export async function checkSkillVersion(skillsDir, skillName, rawBaseUrl = SKILLS_RAW_BASE_URL, fetchImpl = fetch, logger) {
|
|
260
|
+
// Fetch the remote SKILL.md once and extract both version + description.
|
|
261
|
+
// Description is reported back to the coordinator so notifications can
|
|
262
|
+
// surface the *remote* (i.e. upcoming-version) description rather than the
|
|
263
|
+
// local one, which may be stale relative to the version the notification
|
|
264
|
+
// is announcing.
|
|
265
|
+
//
|
|
266
|
+
// Log the specific fetch failure for traceability, then re-throw so the
|
|
267
|
+
// coordinator records it as a check failure (consecutiveFailures,
|
|
268
|
+
// lastFailureReason). 404 is intentionally returned as null inside
|
|
269
|
+
// fetchRemoteSkillMetadata and never reaches this catch.
|
|
270
|
+
const remoteMetadataPromise = fetchRemoteSkillMetadata(skillName, rawBaseUrl, fetchImpl).catch((err) => {
|
|
271
|
+
logger?.warn(`[senpi-skills-manager] failed to fetch remote SKILL.md for "${skillName}" | err=${formatErr(err)}`);
|
|
272
|
+
throw err;
|
|
273
|
+
});
|
|
274
|
+
const [localVersion, remoteMetadata] = await Promise.all([
|
|
275
|
+
readLocalVersion(skillsDir, skillName, logger),
|
|
276
|
+
remoteMetadataPromise,
|
|
277
|
+
]);
|
|
278
|
+
const { version: remoteVersion, description: remoteDescription } = remoteMetadata;
|
|
279
|
+
const normalizedRemote = normalizeVersion(remoteVersion ?? "");
|
|
280
|
+
if (!remoteVersion || !parseSemver(normalizedRemote)) {
|
|
281
|
+
return { localVersion, remoteVersion, updateKind: "unknown", remoteDescription };
|
|
282
|
+
}
|
|
283
|
+
// Skill has never had a version in SKILL.md (null) — predates the versioning
|
|
284
|
+
// system or was installed before the field was added. Treat as a minor update
|
|
285
|
+
// so it is auto-applied without requiring a manual major-version approval.
|
|
286
|
+
if (localVersion === null) {
|
|
287
|
+
return { localVersion, remoteVersion, updateKind: "minor", remoteDescription };
|
|
288
|
+
}
|
|
289
|
+
const normalizedLocal = normalizeVersion(localVersion);
|
|
290
|
+
// Local version string exists but is not valid semver even after normalisation
|
|
291
|
+
// (e.g. "latest", "nightly"). We cannot safely compare, so skip.
|
|
292
|
+
if (!parseSemver(normalizedLocal)) {
|
|
293
|
+
return { localVersion, remoteVersion, updateKind: "unknown", remoteDescription };
|
|
294
|
+
}
|
|
295
|
+
// classifyUpdate returns AutoUpdateKind which is a strict subset of SkillUpdateKind
|
|
296
|
+
const updateKind = classifyUpdate(normalizedLocal, normalizedRemote);
|
|
297
|
+
return { localVersion, remoteVersion, updateKind, remoteDescription };
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=version-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-manager.js","sourceRoot":"","sources":["../../src/skills-manager/version-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installs a skill from a cloned repo directory into the target skills
|
|
3
|
+
* directory using a crash-safe swap flow.
|
|
4
|
+
*/
|
|
5
|
+
import type { LoggerLike } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Copy a skill's subdirectory from `cloneDir` into `skillsDir/<skillName>/`,
|
|
8
|
+
* replacing the existing copy via a crash-safe swap.
|
|
9
|
+
*
|
|
10
|
+
* Strategy:
|
|
11
|
+
* 1. Validate source directory exists in the clone.
|
|
12
|
+
* 2. Write to a `.tmp-<skillName>` staging path inside `skillsDir`.
|
|
13
|
+
* 3. Move existing target to a hidden backup path (if present).
|
|
14
|
+
* 4. Move staging → target (atomic on same fs).
|
|
15
|
+
* 5. Delete the backup only after the new target is in place.
|
|
16
|
+
*
|
|
17
|
+
* This avoids destroying the previous skill copy before the new one is ready.
|
|
18
|
+
* There is still a brief window where `targetPath` may be absent, but the old
|
|
19
|
+
* content remains recoverable from the backup path until install succeeds.
|
|
20
|
+
*
|
|
21
|
+
* The `.tmp-` prefix hides the staging directory from skill discovery, which
|
|
22
|
+
* only reads immediate subdirectories of `skillsDir`.
|
|
23
|
+
*
|
|
24
|
+
* @throws When the skill subdirectory is absent in the clone.
|
|
25
|
+
* @throws When the staging copy fails.
|
|
26
|
+
*/
|
|
27
|
+
export declare function installSkill(cloneDir: string, skillName: string, skillsDir: string, logger?: LoggerLike): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/skills-manager/writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA6Ff"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Installs a skill from a cloned repo directory into the target skills
|
|
3
|
+
* directory using a crash-safe swap flow.
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from "node:fs/promises";
|
|
6
|
+
import { randomUUID } from "node:crypto";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { ALLOWED_SKILLS } from "./constants.js";
|
|
9
|
+
import { formatErr } from "./utils.js";
|
|
10
|
+
/**
|
|
11
|
+
* Copy a skill's subdirectory from `cloneDir` into `skillsDir/<skillName>/`,
|
|
12
|
+
* replacing the existing copy via a crash-safe swap.
|
|
13
|
+
*
|
|
14
|
+
* Strategy:
|
|
15
|
+
* 1. Validate source directory exists in the clone.
|
|
16
|
+
* 2. Write to a `.tmp-<skillName>` staging path inside `skillsDir`.
|
|
17
|
+
* 3. Move existing target to a hidden backup path (if present).
|
|
18
|
+
* 4. Move staging → target (atomic on same fs).
|
|
19
|
+
* 5. Delete the backup only after the new target is in place.
|
|
20
|
+
*
|
|
21
|
+
* This avoids destroying the previous skill copy before the new one is ready.
|
|
22
|
+
* There is still a brief window where `targetPath` may be absent, but the old
|
|
23
|
+
* content remains recoverable from the backup path until install succeeds.
|
|
24
|
+
*
|
|
25
|
+
* The `.tmp-` prefix hides the staging directory from skill discovery, which
|
|
26
|
+
* only reads immediate subdirectories of `skillsDir`.
|
|
27
|
+
*
|
|
28
|
+
* @throws When the skill subdirectory is absent in the clone.
|
|
29
|
+
* @throws When the staging copy fails.
|
|
30
|
+
*/
|
|
31
|
+
export async function installSkill(cloneDir, skillName, skillsDir, logger) {
|
|
32
|
+
if (!ALLOWED_SKILLS.includes(skillName)) {
|
|
33
|
+
throw new Error(`Skill "${skillName}" is not in the allowed skills list: ${ALLOWED_SKILLS.join(", ")}`);
|
|
34
|
+
}
|
|
35
|
+
const sourcePath = join(cloneDir, skillName);
|
|
36
|
+
const targetPath = join(skillsDir, skillName);
|
|
37
|
+
const stagingPath = join(skillsDir, `.tmp-${skillName}`);
|
|
38
|
+
const backupPath = join(skillsDir, `.bak-${skillName}-${randomUUID()}`);
|
|
39
|
+
logger?.info(`[senpi-skills-manager] installing skill | skill=${skillName} from=${sourcePath} to=${targetPath}`);
|
|
40
|
+
// Validate source exists and is a directory
|
|
41
|
+
try {
|
|
42
|
+
const info = await fs.stat(sourcePath);
|
|
43
|
+
if (!info.isDirectory()) {
|
|
44
|
+
throw new Error(`Expected a directory at "${sourcePath}" for skill "${skillName}" but found a file`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err.code === "ENOENT") {
|
|
49
|
+
throw new Error(`Skill "${skillName}" not found in cloned repo at "${sourcePath}"`);
|
|
50
|
+
}
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
// Ensure skillsDir exists
|
|
54
|
+
await fs.mkdir(skillsDir, { recursive: true });
|
|
55
|
+
// Remove any leftover staging dir from a previous failed install
|
|
56
|
+
await fs.rm(stagingPath, { recursive: true, force: true });
|
|
57
|
+
logger?.info(`[senpi-skills-manager] cleared leftover staging dir | path=${stagingPath}`);
|
|
58
|
+
// Copy source → staging
|
|
59
|
+
logger?.info(`[senpi-skills-manager] copying skill to staging | from=${sourcePath} to=${stagingPath}`);
|
|
60
|
+
await fs.cp(sourcePath, stagingPath, { recursive: true });
|
|
61
|
+
// Move current target out of the way first so old data is recoverable on failure.
|
|
62
|
+
let movedTargetToBackup = false;
|
|
63
|
+
try {
|
|
64
|
+
await fs.rename(targetPath, backupPath);
|
|
65
|
+
movedTargetToBackup = true;
|
|
66
|
+
logger?.info(`[senpi-skills-manager] backed up existing install | from=${targetPath} to=${backupPath}`);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
if (err.code !== "ENOENT") {
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
logger?.info(`[senpi-skills-manager] no existing install to back up | skill=${skillName}`);
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
logger?.info(`[senpi-skills-manager] swapping staging to target | from=${stagingPath} to=${targetPath}`);
|
|
76
|
+
await fs.rename(stagingPath, targetPath);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
logger?.warn(`[senpi-skills-manager] swap failed, rolling back | skill=${skillName} err=${formatErr(err)}`);
|
|
80
|
+
// Remove any partial target before restoring old contents.
|
|
81
|
+
await fs.rm(targetPath, { recursive: true, force: true });
|
|
82
|
+
if (movedTargetToBackup) {
|
|
83
|
+
await fs.rename(backupPath, targetPath).catch((restoreErr) => {
|
|
84
|
+
logger?.warn(`[senpi-skills-manager] failed to restore backup after swap failure | skill=${skillName} backup=${backupPath} err=${formatErr(restoreErr)}`);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
// On successful rename this path no longer exists; rm is still safe with force=true.
|
|
91
|
+
await fs.rm(stagingPath, { recursive: true, force: true });
|
|
92
|
+
}
|
|
93
|
+
// Backup cleanup is best-effort once the new target is in place.
|
|
94
|
+
if (movedTargetToBackup) {
|
|
95
|
+
await fs.rm(backupPath, { recursive: true, force: true }).catch((err) => {
|
|
96
|
+
logger?.warn(`[senpi-skills-manager] failed to remove backup dir | path=${backupPath} err=${formatErr(err)}`);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
logger?.info(`[senpi-skills-manager] skill installed successfully | skill=${skillName} path=${targetPath}`);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/skills-manager/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,9 @@ export declare class StateManager {
|
|
|
19
19
|
getOrLoad<T>(key: string): Promise<T | undefined>;
|
|
20
20
|
/**
|
|
21
21
|
* Same rules as {@link hydrate} for dsl-* JSON: inactive, wrong version, or invalid shape → do not cache.
|
|
22
|
+
* Lazy-fills `correlationId` (UUID v4) and `triggerReason` (`"position_opened"`) for state files
|
|
23
|
+
* written before those fields existed; the in-memory copy carries the backfilled values until the
|
|
24
|
+
* next `set()` persists them to disk.
|
|
22
25
|
*/
|
|
23
26
|
private parseDslStateForCache;
|
|
24
27
|
set(key: string, value: unknown): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../src/state/state-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA0BtD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBAEzC,OAAO,EAAE,MAAM;IAI3B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI5B,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAmBvD
|
|
1
|
+
{"version":3,"file":"state-manager.d.ts","sourceRoot":"","sources":["../../src/state/state-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,9 @@ export class StateManager {
|
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
56
|
* Same rules as {@link hydrate} for dsl-* JSON: inactive, wrong version, or invalid shape → do not cache.
|
|
57
|
+
* Lazy-fills `correlationId` (UUID v4) and `triggerReason` (`"position_opened"`) for state files
|
|
58
|
+
* written before those fields existed; the in-memory copy carries the backfilled values until the
|
|
59
|
+
* next `set()` persists them to disk.
|
|
57
60
|
*/
|
|
58
61
|
parseDslStateForCache(parsed) {
|
|
59
62
|
const active = parsed.active;
|
|
@@ -66,6 +69,12 @@ export class StateManager {
|
|
|
66
69
|
typeof active === "boolean" &&
|
|
67
70
|
(typeof parsed.address === "string" || typeof parsed.strategyId === "string") &&
|
|
68
71
|
typeof parsed.asset === "string") {
|
|
72
|
+
if (typeof parsed.correlationId !== "string" || parsed.correlationId.length === 0) {
|
|
73
|
+
parsed.correlationId = randomUUID();
|
|
74
|
+
}
|
|
75
|
+
if (typeof parsed.triggerReason !== "string") {
|
|
76
|
+
parsed.triggerReason = "position_opened";
|
|
77
|
+
}
|
|
69
78
|
return parsed;
|
|
70
79
|
}
|
|
71
80
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/state/state-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../../src/state/state-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,13 @@ export interface DslPluginConfig {
|
|
|
54
54
|
}
|
|
55
55
|
export interface DslState {
|
|
56
56
|
version: number;
|
|
57
|
+
/**
|
|
58
|
+
* UUID v4 generated at creation; persisted across the DSL lifecycle so every
|
|
59
|
+
* `dsl.*` telemetry event for this position carries the same `__correlationId`.
|
|
60
|
+
*/
|
|
61
|
+
correlationId: string;
|
|
62
|
+
/** Lifecycle event that produced this DSL row. Persisted so closed/tier/sl events can include it. */
|
|
63
|
+
triggerReason: DslCreatedTriggerReason;
|
|
57
64
|
asset: string;
|
|
58
65
|
address: string;
|
|
59
66
|
direction: "LONG" | "SHORT";
|
|
@@ -199,7 +206,7 @@ export interface PositionDecreasedEvent {
|
|
|
199
206
|
leverage: number;
|
|
200
207
|
preset?: string;
|
|
201
208
|
}
|
|
202
|
-
export type DslCreatedTriggerReason = "position_increased" | "position_decreased" | "flipped";
|
|
209
|
+
export type DslCreatedTriggerReason = "position_opened" | "position_increased" | "position_decreased" | "flipped";
|
|
203
210
|
export interface DslCreatedEvent {
|
|
204
211
|
address: string;
|
|
205
212
|
asset: string;
|
|
@@ -216,8 +223,10 @@ export interface DslCreatedEvent {
|
|
|
216
223
|
size: number;
|
|
217
224
|
/** Collateral = (size * entryPrice) / leverage. */
|
|
218
225
|
margin: number;
|
|
219
|
-
/**
|
|
220
|
-
triggerReason
|
|
226
|
+
/** Lifecycle event that produced this DSL row (`"position_opened"` for fresh opens). */
|
|
227
|
+
triggerReason: DslCreatedTriggerReason;
|
|
228
|
+
/** UUID v4 from {@link DslState.correlationId}; tracking handler reads this. */
|
|
229
|
+
__correlationId: string;
|
|
221
230
|
timestamp: string;
|
|
222
231
|
}
|
|
223
232
|
export interface DslPhaseChangedEvent {
|
|
@@ -225,6 +234,8 @@ export interface DslPhaseChangedEvent {
|
|
|
225
234
|
asset: string;
|
|
226
235
|
phase: 1 | 2;
|
|
227
236
|
tierIndex: number;
|
|
237
|
+
triggerReason: DslCreatedTriggerReason;
|
|
238
|
+
__correlationId: string;
|
|
228
239
|
timestamp: string;
|
|
229
240
|
}
|
|
230
241
|
export interface DslTierAdvancedEvent {
|
|
@@ -236,6 +247,8 @@ export interface DslTierAdvancedEvent {
|
|
|
236
247
|
lockHwPct: number;
|
|
237
248
|
triggerPct: number;
|
|
238
249
|
newFloorPrice: number;
|
|
250
|
+
triggerReason: DslCreatedTriggerReason;
|
|
251
|
+
__correlationId: string;
|
|
239
252
|
timestamp: string;
|
|
240
253
|
direction?: "LONG" | "SHORT";
|
|
241
254
|
entryPrice?: number;
|
|
@@ -252,6 +265,8 @@ export interface DslSlUpdatedEvent {
|
|
|
252
265
|
asset: string;
|
|
253
266
|
newSLPrice: number;
|
|
254
267
|
slOrderId: number;
|
|
268
|
+
triggerReason: DslCreatedTriggerReason;
|
|
269
|
+
__correlationId: string;
|
|
255
270
|
timestamp: string;
|
|
256
271
|
}
|
|
257
272
|
export interface DslClosedEvent {
|
|
@@ -260,6 +275,8 @@ export interface DslClosedEvent {
|
|
|
260
275
|
dex: string;
|
|
261
276
|
reason: string;
|
|
262
277
|
closeReason: string;
|
|
278
|
+
triggerReason: DslCreatedTriggerReason;
|
|
279
|
+
__correlationId: string;
|
|
263
280
|
/** Close time (ISO); used for trade-history matching. */
|
|
264
281
|
timestamp: string;
|
|
265
282
|
direction?: "LONG" | "SHORT";
|
|
@@ -290,6 +307,8 @@ export interface DslHeartbeatEvent {
|
|
|
290
307
|
lockedProfitPct: number;
|
|
291
308
|
currentTierIndex: number | null;
|
|
292
309
|
elapsedMinutes: number;
|
|
310
|
+
triggerReason: DslCreatedTriggerReason;
|
|
311
|
+
__correlationId: string;
|
|
293
312
|
/** Collateral = (size * entryPrice) / leverage; used for PnL computation in heartbeat notification. */
|
|
294
313
|
margin?: number;
|
|
295
314
|
timestamp: string;
|