youmd 0.6.21 → 0.6.27
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/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +0 -1
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +283 -184
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/export.d.ts +1 -0
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +5 -0
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +3 -3
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/link.d.ts.map +1 -1
- package/dist/commands/link.js +3 -3
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/login.d.ts +29 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +256 -127
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logs.js +0 -1
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/mcp.d.ts +14 -0
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +284 -28
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/okf.d.ts +12 -0
- package/dist/commands/okf.d.ts.map +1 -0
- package/dist/commands/okf.js +411 -0
- package/dist/commands/okf.js.map +1 -0
- package/dist/commands/private.d.ts.map +1 -1
- package/dist/commands/private.js +6 -5
- package/dist/commands/private.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +9 -5
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +0 -1
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/pull.d.ts +24 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +114 -14
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts +1 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +33 -13
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/register.d.ts +6 -0
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +179 -79
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +121 -50
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/stack.d.ts +16 -0
- package/dist/commands/stack.d.ts.map +1 -0
- package/dist/commands/stack.js +863 -0
- package/dist/commands/stack.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +25 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +23 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +193 -12
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +21 -16
- package/dist/commands/whoami.js.map +1 -1
- package/dist/create.js +0 -0
- package/dist/index.js +64 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +127 -5
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +142 -5
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/ascii.d.ts +1 -0
- package/dist/lib/ascii.d.ts.map +1 -1
- package/dist/lib/ascii.js +9 -26
- package/dist/lib/ascii.js.map +1 -1
- package/dist/lib/canonical-json.d.ts +8 -0
- package/dist/lib/canonical-json.d.ts.map +1 -0
- package/dist/lib/canonical-json.js +29 -0
- package/dist/lib/canonical-json.js.map +1 -0
- package/dist/lib/capability-router.d.ts +58 -0
- package/dist/lib/capability-router.d.ts.map +1 -0
- package/dist/lib/capability-router.js +54 -0
- package/dist/lib/capability-router.js.map +1 -0
- package/dist/lib/compiler.d.ts +32 -0
- package/dist/lib/compiler.d.ts.map +1 -1
- package/dist/lib/compiler.js +150 -0
- package/dist/lib/compiler.js.map +1 -1
- package/dist/lib/config.d.ts +71 -35
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +334 -124
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/decompile.d.ts +6 -1
- package/dist/lib/decompile.d.ts.map +1 -1
- package/dist/lib/decompile.js +120 -11
- package/dist/lib/decompile.js.map +1 -1
- package/dist/lib/hash.d.ts.map +1 -1
- package/dist/lib/hash.js +2 -19
- package/dist/lib/hash.js.map +1 -1
- package/dist/lib/heartbeat.d.ts +38 -0
- package/dist/lib/heartbeat.d.ts.map +1 -0
- package/dist/lib/heartbeat.js +70 -0
- package/dist/lib/heartbeat.js.map +1 -0
- package/dist/lib/host-link.d.ts +123 -0
- package/dist/lib/host-link.d.ts.map +1 -0
- package/dist/lib/host-link.js +350 -0
- package/dist/lib/host-link.js.map +1 -0
- package/dist/lib/merge.d.ts +50 -0
- package/dist/lib/merge.d.ts.map +1 -0
- package/dist/lib/merge.js +167 -0
- package/dist/lib/merge.js.map +1 -0
- package/dist/lib/okf-bundle.d.ts +104 -0
- package/dist/lib/okf-bundle.d.ts.map +1 -0
- package/dist/lib/okf-bundle.js +473 -0
- package/dist/lib/okf-bundle.js.map +1 -0
- package/dist/lib/okf-health.d.ts +40 -0
- package/dist/lib/okf-health.d.ts.map +1 -0
- package/dist/lib/okf-health.js +152 -0
- package/dist/lib/okf-health.js.map +1 -0
- package/dist/lib/okf-stack.d.ts +47 -0
- package/dist/lib/okf-stack.d.ts.map +1 -0
- package/dist/lib/okf-stack.js +331 -0
- package/dist/lib/okf-stack.js.map +1 -0
- package/dist/lib/okf-view.d.ts +49 -0
- package/dist/lib/okf-view.d.ts.map +1 -0
- package/dist/lib/okf-view.js +197 -0
- package/dist/lib/okf-view.js.map +1 -0
- package/dist/lib/okf.d.ts +130 -0
- package/dist/lib/okf.d.ts.map +1 -0
- package/dist/lib/okf.js +263 -0
- package/dist/lib/okf.js.map +1 -0
- package/dist/lib/onboarding.d.ts +17 -0
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +224 -207
- package/dist/lib/onboarding.js.map +1 -1
- package/dist/lib/project.d.ts +5 -0
- package/dist/lib/project.d.ts.map +1 -1
- package/dist/lib/project.js +8 -0
- package/dist/lib/project.js.map +1 -1
- package/dist/lib/projectContext.d.ts +201 -0
- package/dist/lib/projectContext.d.ts.map +1 -0
- package/dist/lib/projectContext.js +597 -0
- package/dist/lib/projectContext.js.map +1 -0
- package/dist/lib/render.d.ts +38 -1
- package/dist/lib/render.d.ts.map +1 -1
- package/dist/lib/render.js +83 -18
- package/dist/lib/render.js.map +1 -1
- package/dist/lib/skill-catalog.d.ts.map +1 -1
- package/dist/lib/skill-catalog.js +22 -2
- package/dist/lib/skill-catalog.js.map +1 -1
- package/dist/lib/skills.d.ts +20 -5
- package/dist/lib/skills.d.ts.map +1 -1
- package/dist/lib/skills.js +116 -58
- package/dist/lib/skills.js.map +1 -1
- package/dist/lib/stackEval.d.ts +87 -0
- package/dist/lib/stackEval.d.ts.map +1 -0
- package/dist/lib/stackEval.js +233 -0
- package/dist/lib/stackEval.js.map +1 -0
- package/dist/lib/stackImprove.d.ts +49 -0
- package/dist/lib/stackImprove.d.ts.map +1 -0
- package/dist/lib/stackImprove.js +313 -0
- package/dist/lib/stackImprove.js.map +1 -0
- package/dist/lib/stackInstall.d.ts +59 -0
- package/dist/lib/stackInstall.d.ts.map +1 -0
- package/dist/lib/stackInstall.js +162 -0
- package/dist/lib/stackInstall.js.map +1 -0
- package/dist/lib/stackSafety.d.ts +126 -0
- package/dist/lib/stackSafety.d.ts.map +1 -0
- package/dist/lib/stackSafety.js +486 -0
- package/dist/lib/stackSafety.js.map +1 -0
- package/dist/lib/stackUpdate.d.ts +44 -0
- package/dist/lib/stackUpdate.d.ts.map +1 -0
- package/dist/lib/stackUpdate.js +256 -0
- package/dist/lib/stackUpdate.js.map +1 -0
- package/dist/lib/stream.d.ts +116 -0
- package/dist/lib/stream.d.ts.map +1 -0
- package/dist/lib/stream.js +368 -0
- package/dist/lib/stream.js.map +1 -0
- package/dist/lib/youstack.d.ts +219 -0
- package/dist/lib/youstack.d.ts.map +1 -0
- package/dist/lib/youstack.js +1049 -0
- package/dist/lib/youstack.js.map +1 -0
- package/dist/mcp/registry.d.ts +133 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +833 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/server.d.ts +106 -5
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +851 -498
- package/dist/mcp/server.js.map +1 -1
- package/dist/postinstall.js +11 -2
- package/dist/postinstall.js.map +1 -1
- package/dist/you.d.ts +1 -0
- package/dist/you.js +40 -4
- package/dist/you.js.map +1 -1
- package/examples/youstack-bamfstack-public/docs/quickstart.md +34 -0
- package/examples/youstack-bamfstack-public/prompts/creator-draft-starter.md +15 -0
- package/examples/youstack-bamfstack-public/skills/bamfstack-start/SKILL.md +36 -0
- package/examples/youstack-bamfstack-public/tests/smoke.md +19 -0
- package/examples/youstack-bamfstack-public/workflows/creator-growth-workflow.md +22 -0
- package/examples/youstack-bamfstack-public/youstack.json +172 -0
- package/examples/youstack-personal/docs/quickstart.md +10 -0
- package/examples/youstack-personal/skills/youstack-start/SKILL.md +9 -0
- package/examples/youstack-personal/tests/smoke.md +9 -0
- package/examples/youstack-personal/workflows/startup.md +7 -0
- package/examples/youstack-personal/youstack.json +123 -0
- package/package.json +3 -3
- package/skills/claude-md-generator.md +1 -1
- package/skills/meta-improve.md +8 -3
- package/skills/proactive-context-fill.md +1 -1
- package/skills/youstack-maintainer.md +128 -0
- package/skills/youstack-start.md +78 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* L17 — stack update channel.
|
|
4
|
+
*
|
|
5
|
+
* Checks the upstream registry for a newer version of a YouStack manifest.
|
|
6
|
+
* Falls back to the manifest's `update.source` field if no registry endpoint
|
|
7
|
+
* exists, querying the `repo` field in `owner` with `git ls-remote`.
|
|
8
|
+
*
|
|
9
|
+
* Contract:
|
|
10
|
+
* - checkStackUpdate(loaded) → StackUpdateInfo
|
|
11
|
+
* - applyStackUpdate(loaded, info) → void (writes new files, does NOT commit)
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.checkStackUpdate = checkStackUpdate;
|
|
48
|
+
exports.applyStackUpdate = applyStackUpdate;
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
const child_process_1 = require("child_process");
|
|
52
|
+
// ── Internal helpers ──────────────────────────────────────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Compare semver-ish version strings (e.g. "1.2.3"). Returns true when
|
|
55
|
+
* `upstream` is strictly newer than `local`. Non-semver strings fall back to
|
|
56
|
+
* a raw string comparison (!=).
|
|
57
|
+
*/
|
|
58
|
+
function isNewer(local, upstream) {
|
|
59
|
+
if (local === upstream)
|
|
60
|
+
return false;
|
|
61
|
+
const parse = (v) => v.replace(/^v/, "").split(".").map((n) => parseInt(n, 10) || 0);
|
|
62
|
+
const a = parse(local);
|
|
63
|
+
const b = parse(upstream);
|
|
64
|
+
for (let i = 0; i < Math.max(a.length, b.length); i++) {
|
|
65
|
+
const av = a[i] ?? 0;
|
|
66
|
+
const bv = b[i] ?? 0;
|
|
67
|
+
if (bv > av)
|
|
68
|
+
return true;
|
|
69
|
+
if (bv < av)
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Fetch the version from a remote youstack.json URL.
|
|
76
|
+
* Returns null on any fetch/parse error.
|
|
77
|
+
*/
|
|
78
|
+
async function fetchRemoteManifestVersion(url) {
|
|
79
|
+
try {
|
|
80
|
+
const resp = await fetch(url, {
|
|
81
|
+
headers: { Accept: "application/json" },
|
|
82
|
+
signal: AbortSignal.timeout(5000),
|
|
83
|
+
});
|
|
84
|
+
if (!resp.ok)
|
|
85
|
+
return null;
|
|
86
|
+
const data = (await resp.json());
|
|
87
|
+
return typeof data.version === "string" ? data.version : null;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Fetch the first non-blank, non-heading line from a remote CHANGELOG.md URL.
|
|
95
|
+
* Returns null on any error.
|
|
96
|
+
*/
|
|
97
|
+
async function fetchChangelogHint(changelogUrl) {
|
|
98
|
+
try {
|
|
99
|
+
const resp = await fetch(changelogUrl, {
|
|
100
|
+
signal: AbortSignal.timeout(5000),
|
|
101
|
+
});
|
|
102
|
+
if (!resp.ok)
|
|
103
|
+
return null;
|
|
104
|
+
const text = await resp.text();
|
|
105
|
+
for (const line of text.split("\n")) {
|
|
106
|
+
const trimmed = line.trim();
|
|
107
|
+
if (trimmed && !trimmed.startsWith("#"))
|
|
108
|
+
return trimmed.slice(0, 120);
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Resolve the latest semver tag from a git remote URL using `git ls-remote`.
|
|
118
|
+
* Returns null when git is unavailable or the repo has no semver tags.
|
|
119
|
+
*/
|
|
120
|
+
function resolveLatestGitTag(repoUrl) {
|
|
121
|
+
try {
|
|
122
|
+
const output = (0, child_process_1.execFileSync)("git", ["ls-remote", "--tags", "--sort=-version:refname", repoUrl], { encoding: "utf8", timeout: 8000, stdio: ["ignore", "pipe", "ignore"] });
|
|
123
|
+
for (const line of output.split("\n")) {
|
|
124
|
+
const ref = line.split("\t")[1]?.trim();
|
|
125
|
+
if (!ref)
|
|
126
|
+
continue;
|
|
127
|
+
// Only plain tags, not peeled (^{}) refs. Strip refs/tags/ prefix.
|
|
128
|
+
if (ref.includes("^{}"))
|
|
129
|
+
continue;
|
|
130
|
+
const tag = ref.replace("refs/tags/", "");
|
|
131
|
+
if (/^\d/.test(tag) || /^v\d/.test(tag))
|
|
132
|
+
return tag.replace(/^v/, "");
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// ── Main public function ──────────────────────────────────────────────────────
|
|
141
|
+
/**
|
|
142
|
+
* Check whether the upstream source (registry endpoint → manifest source URL
|
|
143
|
+
* → git ls-remote on owner.repo) has a version newer than the local manifest.
|
|
144
|
+
*/
|
|
145
|
+
async function checkStackUpdate(loaded) {
|
|
146
|
+
const { manifest, rootDir } = loaded;
|
|
147
|
+
const currentVersion = manifest.version || "0.0.0";
|
|
148
|
+
// ── 1. registry endpoint (future: registry.you.md/stacks/<slug>) ──────────
|
|
149
|
+
// If the manifest has update.source pointing to a remote JSON URL, fetch it.
|
|
150
|
+
const sourceUrl = manifest.update?.source;
|
|
151
|
+
if (sourceUrl && sourceUrl.startsWith("http")) {
|
|
152
|
+
const latestVersion = await fetchRemoteManifestVersion(sourceUrl);
|
|
153
|
+
if (latestVersion) {
|
|
154
|
+
const updateAvailable = isNewer(currentVersion, latestVersion);
|
|
155
|
+
// Try a CHANGELOG.md beside the source manifest.
|
|
156
|
+
const changelogUrl = sourceUrl.replace(/youstack\.json$/, "CHANGELOG.md");
|
|
157
|
+
const changelogHint = await fetchChangelogHint(changelogUrl);
|
|
158
|
+
return {
|
|
159
|
+
currentVersion,
|
|
160
|
+
latestVersion,
|
|
161
|
+
updateAvailable,
|
|
162
|
+
source: "source-url",
|
|
163
|
+
changelogHint,
|
|
164
|
+
message: updateAvailable
|
|
165
|
+
? `update available: ${currentVersion} → ${latestVersion}`
|
|
166
|
+
: `up to date (${currentVersion})`,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// ── 2. git ls-remote on owner.repo ───────────────────────────────────────
|
|
171
|
+
const ownerRecord = manifest.owner;
|
|
172
|
+
const repoField = typeof ownerRecord?.repo === "string" ? ownerRecord.repo : undefined;
|
|
173
|
+
if (repoField) {
|
|
174
|
+
// Resolve a full git remote URL. Bare "owner/name" → github https.
|
|
175
|
+
const gitUrl = repoField.startsWith("http")
|
|
176
|
+
? repoField
|
|
177
|
+
: `https://github.com/${repoField}.git`;
|
|
178
|
+
const latestVersion = resolveLatestGitTag(gitUrl);
|
|
179
|
+
if (latestVersion) {
|
|
180
|
+
const updateAvailable = isNewer(currentVersion, latestVersion);
|
|
181
|
+
// Check for a local CHANGELOG.md beside the manifest as a hint.
|
|
182
|
+
let changelogHint = null;
|
|
183
|
+
const localChangelog = path.join(rootDir, "CHANGELOG.md");
|
|
184
|
+
if (fs.existsSync(localChangelog)) {
|
|
185
|
+
const content = fs.readFileSync(localChangelog, "utf8");
|
|
186
|
+
for (const line of content.split("\n")) {
|
|
187
|
+
const t = line.trim();
|
|
188
|
+
if (t && !t.startsWith("#")) {
|
|
189
|
+
changelogHint = t.slice(0, 120);
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
currentVersion,
|
|
196
|
+
latestVersion,
|
|
197
|
+
updateAvailable,
|
|
198
|
+
source: "git-ls-remote",
|
|
199
|
+
changelogHint,
|
|
200
|
+
message: updateAvailable
|
|
201
|
+
? `update available: ${currentVersion} → ${latestVersion}`
|
|
202
|
+
: `up to date (${currentVersion})`,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// ── 3. nothing found ─────────────────────────────────────────────────────
|
|
207
|
+
return {
|
|
208
|
+
currentVersion,
|
|
209
|
+
latestVersion: null,
|
|
210
|
+
updateAvailable: false,
|
|
211
|
+
source: "none",
|
|
212
|
+
changelogHint: null,
|
|
213
|
+
message: "no upstream version source configured (set update.source or owner.repo)",
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Apply an update by fetching the manifest from update.source and writing it
|
|
218
|
+
* into place. Only available when source is "source-url".
|
|
219
|
+
*
|
|
220
|
+
* Does NOT commit or push. Writes the new youstack.json at manifestPath.
|
|
221
|
+
*/
|
|
222
|
+
async function applyStackUpdate(loaded) {
|
|
223
|
+
const { manifest, manifestPath } = loaded;
|
|
224
|
+
const sourceUrl = manifest.update?.source;
|
|
225
|
+
if (!sourceUrl || !sourceUrl.startsWith("http")) {
|
|
226
|
+
return {
|
|
227
|
+
wrote: [],
|
|
228
|
+
skipped: [],
|
|
229
|
+
error: "apply requires update.source to be an http(s) URL in the manifest",
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const resp = await fetch(sourceUrl, {
|
|
234
|
+
headers: { Accept: "application/json" },
|
|
235
|
+
signal: AbortSignal.timeout(10000),
|
|
236
|
+
});
|
|
237
|
+
if (!resp.ok) {
|
|
238
|
+
return {
|
|
239
|
+
wrote: [],
|
|
240
|
+
skipped: [],
|
|
241
|
+
error: `fetch failed: ${resp.status} ${resp.statusText}`,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
const newManifest = await resp.text();
|
|
245
|
+
fs.writeFileSync(manifestPath, newManifest, "utf8");
|
|
246
|
+
return { wrote: [manifestPath], skipped: [], error: null };
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
return {
|
|
250
|
+
wrote: [],
|
|
251
|
+
skipped: [],
|
|
252
|
+
error: err instanceof Error ? err.message : String(err),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=stackUpdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackUpdate.js","sourceRoot":"","sources":["../../src/lib/stackUpdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming display utilities (U6 + U16).
|
|
3
|
+
*
|
|
4
|
+
* The You Agent embeds machine-directives in its responses as ```json fenced
|
|
5
|
+
* blocks (profile updates, memory saves, private updates, project updates).
|
|
6
|
+
* The full-text parsers in chat.ts / onboarding.ts consume those blocks AFTER
|
|
7
|
+
* the stream completes — but during live streaming the raw blocks used to be
|
|
8
|
+
* written straight to the terminal.
|
|
9
|
+
*
|
|
10
|
+
* This module provides:
|
|
11
|
+
* 1. JsonDirectiveStreamFilter — a pure, incremental transformer that
|
|
12
|
+
* suppresses ```json directive blocks from DISPLAYED output while the
|
|
13
|
+
* caller keeps accumulating the raw text for the post-stream parsers.
|
|
14
|
+
* 2. createFilteredStdoutWriter — terminal writer that applies the filter
|
|
15
|
+
* and shows a dim placeholder when a directive block is being swallowed
|
|
16
|
+
* and nothing visible has been written yet.
|
|
17
|
+
* 3. streamSSEText — shared SSE reader for /api/v1/chat/stream.
|
|
18
|
+
* 4. streamAssistantTurn — the shared spinner + stream + filter + fallback
|
|
19
|
+
* helper used by both `youmd chat` and onboarding turns 2+.
|
|
20
|
+
*
|
|
21
|
+
* NOTE: the transformer is mirrored (separate npm package boundaries) in
|
|
22
|
+
* src/hooks/stream-filter.ts for the web You Agent. A parity test in
|
|
23
|
+
* cli/src/__tests__/stream-filter.test.ts asserts the two never drift.
|
|
24
|
+
*/
|
|
25
|
+
export declare const DIRECTIVE_SWALLOW_PLACEHOLDER = "(updating your profile\u2026)";
|
|
26
|
+
/**
|
|
27
|
+
* Incremental transformer: feed(chunk) → displayable text.
|
|
28
|
+
*
|
|
29
|
+
* - Holds back a partial backtick run / undetermined fence opener at the end
|
|
30
|
+
* of the buffer until disambiguated (fences split across chunk boundaries).
|
|
31
|
+
* - Once inside a ```json fence, swallows everything until the closing fence,
|
|
32
|
+
* plus the whitespace run immediately after it (so no blank gap remains).
|
|
33
|
+
* - Non-json fences (``` alone or any other language) pass through unchanged.
|
|
34
|
+
* - flush() releases any held-back non-directive text at end of stream.
|
|
35
|
+
*/
|
|
36
|
+
export declare class JsonDirectiveStreamFilter {
|
|
37
|
+
private state;
|
|
38
|
+
/** Pending backtick run at the end of the buffer (text state). */
|
|
39
|
+
private tickRun;
|
|
40
|
+
/** Held "```<info>" while determining the fence language. */
|
|
41
|
+
private fenceBuf;
|
|
42
|
+
/** Match progress for the "\n```" closing fence (json/code states). */
|
|
43
|
+
private closeProgress;
|
|
44
|
+
private blocks;
|
|
45
|
+
private visible;
|
|
46
|
+
private swallowedEver;
|
|
47
|
+
/** Feed a raw chunk; returns the displayable portion (may be empty). */
|
|
48
|
+
feed(chunk: string): string;
|
|
49
|
+
/** End of stream: release held-back non-directive text. */
|
|
50
|
+
flush(): string;
|
|
51
|
+
/** Currently inside a ```json directive block (actively swallowing). */
|
|
52
|
+
get isSwallowing(): boolean;
|
|
53
|
+
/** At least one ```json directive block was encountered. */
|
|
54
|
+
get hasSwallowedDirective(): boolean;
|
|
55
|
+
/** Some non-whitespace text has been emitted for display. */
|
|
56
|
+
get hasVisibleOutput(): boolean;
|
|
57
|
+
/** Number of ```json directive blocks encountered so far. */
|
|
58
|
+
get directiveBlockCount(): number;
|
|
59
|
+
}
|
|
60
|
+
export interface FilteredStreamWriter {
|
|
61
|
+
/** Feed a raw streamed token; writes only the displayable portion. */
|
|
62
|
+
write(token: string): void;
|
|
63
|
+
/** Flush held text and terminate the streamed line(s). */
|
|
64
|
+
finish(): void;
|
|
65
|
+
/** Whether any displayable text was written to the terminal. */
|
|
66
|
+
readonly wroteVisible: boolean;
|
|
67
|
+
}
|
|
68
|
+
interface MinimalWritable {
|
|
69
|
+
write(text: string): unknown;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Wrap stdout with the directive filter. Shows a subtle dim placeholder when
|
|
73
|
+
* a ```json block is being swallowed and the response would otherwise look
|
|
74
|
+
* empty mid-stream; clears it the moment real text arrives.
|
|
75
|
+
*/
|
|
76
|
+
export declare function createFilteredStdoutWriter(opts?: {
|
|
77
|
+
out?: MinimalWritable;
|
|
78
|
+
indent?: string;
|
|
79
|
+
placeholder?: string;
|
|
80
|
+
}): FilteredStreamWriter;
|
|
81
|
+
export interface ChatTurnMessage {
|
|
82
|
+
role: "system" | "user" | "assistant";
|
|
83
|
+
content: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Stream a chat response token-by-token from a you.md SSE endpoint.
|
|
87
|
+
* Calls onToken with each RAW text delta (unfiltered — display filtering is
|
|
88
|
+
* the caller's concern) and returns the full assembled raw response.
|
|
89
|
+
*/
|
|
90
|
+
export declare function streamSSEText(streamUrl: string, messages: ChatTurnMessage[], onToken: (text: string) => void, timeoutMs?: number): Promise<string>;
|
|
91
|
+
export interface StreamAssistantTurnOptions {
|
|
92
|
+
streamUrl: string;
|
|
93
|
+
messages: ChatTurnMessage[];
|
|
94
|
+
/** BrailleSpinner label shown while waiting for the first token. */
|
|
95
|
+
spinnerLabel: string;
|
|
96
|
+
timeoutMs?: number;
|
|
97
|
+
/** Blocking fallback (e.g. callLLM) used when streaming fails or is empty. */
|
|
98
|
+
fallback?: () => Promise<string>;
|
|
99
|
+
placeholder?: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Run one assistant turn: spinner while waiting for the first token, then
|
|
103
|
+
* live-stream the response with ```json directive blocks filtered out of the
|
|
104
|
+
* display. Returns the FULL RAW response text (directives intact) so the
|
|
105
|
+
* existing post-stream parsers keep working, plus whether it streamed.
|
|
106
|
+
*
|
|
107
|
+
* On stream failure (or an empty stream) falls back to the provided blocking
|
|
108
|
+
* call; in that case `streamed` is false and the caller is expected to render
|
|
109
|
+
* the parsed display text itself.
|
|
110
|
+
*/
|
|
111
|
+
export declare function streamAssistantTurn(opts: StreamAssistantTurnOptions): Promise<{
|
|
112
|
+
text: string;
|
|
113
|
+
streamed: boolean;
|
|
114
|
+
}>;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/lib/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAcH,eAAO,MAAM,6BAA6B,kCAA6B,CAAC;AAExE;;;;;;;;;GASG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,KAAK,CAAuB;IACpC,kEAAkE;IAClE,OAAO,CAAC,OAAO,CAAK;IACpB,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAM;IACtB,uEAAuE;IACvE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAS;IAE9B,wEAAwE;IACxE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA2G3B,2DAA2D;IAC3D,KAAK,IAAI,MAAM;IAkBf,wEAAwE;IACxE,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,4DAA4D;IAC5D,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,6DAA6D;IAC7D,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,6DAA6D;IAC7D,IAAI,mBAAmB,IAAI,MAAM,CAEhC;CACF;AAID,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,IAAI,IAAI,CAAC;IACf,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1E,oBAAoB,CAyCtB;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC/B,SAAS,SAAU,GAClB,OAAO,CAAC,MAAM,CAAC,CAiDjB;AAID,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAwD9C"}
|