@cr8rcho/alkahest 0.1.30 → 0.1.31
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 +6 -4
- package/dist/core/publish.js +62 -40
- package/dist/core/publish.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -112,10 +112,12 @@ alkahest update # update to the latest GitHub release (--check to only ch
|
|
|
112
112
|
> `alkahest.app/p/<project>/<map>`.
|
|
113
113
|
|
|
114
114
|
> **Lost a project's link?** A checkout remembers its project slug in `.alkahest/project.json`, but a
|
|
115
|
-
> fresh clone or a project moved
|
|
116
|
-
> workspace & project on your account so you can re-publish with `--slug <slug
|
|
117
|
-
> `publish`
|
|
118
|
-
>
|
|
115
|
+
> fresh clone (or a project moved between workspaces) can lose it. `alkahest projects` lists every
|
|
116
|
+
> workspace & project on your account so you can re-publish with `--slug <slug>` (which also re-links
|
|
117
|
+
> the checkout). And `publish` won't blindly create a duplicate: when the checkout has **no link** —
|
|
118
|
+
> or its remembered project **was deleted on the web** (the old slug 404s) — it finds the project that
|
|
119
|
+
> matches this one and asks before overwriting. CI / non-interactive runs stop with the candidates and
|
|
120
|
+
> point you at `--slug` rather than guessing.
|
|
119
121
|
|
|
120
122
|
### Dashboard interactions
|
|
121
123
|
|
package/dist/core/publish.js
CHANGED
|
@@ -58,51 +58,73 @@ export async function publishMap(path, params = {}) {
|
|
|
58
58
|
message: "Not authenticated. Set ALKAHEST_TOKEN (or run 'alkahest login --token alk_…').",
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
61
|
+
// Candidate resolution shared by the slug-less case and the stale-slug recovery below. Looks for
|
|
62
|
+
// an OWNED project that already looks like this one and returns a decision: overwrite the match,
|
|
63
|
+
// create new, or — when there's no `confirm` (MCP/non-interactive) — bail with the candidates so
|
|
64
|
+
// the caller passes an explicit slug. Never silently duplicate (ADR-022 B). List failures
|
|
65
|
+
// (network/auth) are non-fatal → treated as "create".
|
|
66
|
+
const localName = params.name || basename(projectRoot);
|
|
67
|
+
const decideTarget = async () => {
|
|
68
|
+
const list = await listProjects({ api: params.api, token: params.token });
|
|
69
|
+
if (!list.ok || !list.projects?.length)
|
|
70
|
+
return { mode: "create" };
|
|
71
|
+
const candidates = rankPublishCandidates(localName, localMapCounts(map), list.projects);
|
|
72
|
+
if (!candidates.length)
|
|
73
|
+
return { mode: "create" };
|
|
74
|
+
if (params.confirm) {
|
|
75
|
+
const chosen = await params.confirm(candidates);
|
|
76
|
+
return chosen ? { mode: "use", slug: chosen.slug, mapSlug: chosen.mapSlug } : { mode: "create" };
|
|
77
|
+
}
|
|
78
|
+
return { mode: "ambiguous", candidates };
|
|
79
|
+
};
|
|
80
|
+
const ambiguous = (candidates, stale) => ({
|
|
81
|
+
ok: false,
|
|
82
|
+
code: "ambiguous_project",
|
|
83
|
+
message: stale
|
|
84
|
+
? "This checkout's project no longer exists on the server (deleted, or you lost access). " +
|
|
85
|
+
"Re-publish with --slug <slug> to point at one below, or --name <name> to create a new project."
|
|
86
|
+
: "This looks like an already-published project. Re-publish with --slug <slug> to update it, " +
|
|
87
|
+
"or --name <name> to force a new project.",
|
|
88
|
+
candidates,
|
|
89
|
+
});
|
|
90
|
+
const buildBody = (slug, codeMap) => {
|
|
91
|
+
const b = { map, client: { source: params.source ?? "cli", version: pkg.version } };
|
|
92
|
+
if (slug)
|
|
93
|
+
b.slug = slug;
|
|
94
|
+
else
|
|
95
|
+
b.name = localName;
|
|
96
|
+
if (codeMap)
|
|
97
|
+
b.mapSlug = codeMap;
|
|
98
|
+
return b;
|
|
99
|
+
};
|
|
100
|
+
// Known slug → update it. Slug-less → resolve a candidate (don't blindly create a duplicate).
|
|
65
101
|
let targetSlug = knownSlug;
|
|
66
102
|
let targetMap = mapSlug;
|
|
67
103
|
if (!targetSlug) {
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (params.confirm) {
|
|
74
|
-
const chosen = await params.confirm(candidates);
|
|
75
|
-
if (chosen) {
|
|
76
|
-
targetSlug = chosen.slug;
|
|
77
|
-
if (chosen.mapSlug)
|
|
78
|
-
targetMap = chosen.mapSlug;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
return {
|
|
83
|
-
ok: false,
|
|
84
|
-
code: "ambiguous_project",
|
|
85
|
-
message: "This looks like an already-published project. Re-publish with --slug <slug> to update it, " +
|
|
86
|
-
"or --name <name> to force a new project.",
|
|
87
|
-
candidates,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
104
|
+
const d = await decideTarget();
|
|
105
|
+
if (d.mode === "use") {
|
|
106
|
+
targetSlug = d.slug;
|
|
107
|
+
if (d.mapSlug)
|
|
108
|
+
targetMap = d.mapSlug;
|
|
91
109
|
}
|
|
92
|
-
|
|
110
|
+
else if (d.mode === "ambiguous")
|
|
111
|
+
return ambiguous(d.candidates, false);
|
|
112
|
+
// create → leave targetSlug undefined
|
|
113
|
+
}
|
|
114
|
+
let pub = await postJson(`${apiUrl}/publish`, buildBody(targetSlug, targetMap), token);
|
|
115
|
+
// Stale local slug: the project this checkout remembers was deleted (or moved out of reach) on the
|
|
116
|
+
// server, so the slug 404s. Don't dead-end — recover via candidate resolution (re-link to the live
|
|
117
|
+
// project, or create). Only for a slug that came from local state, not an explicit --slug the user
|
|
118
|
+
// typed (an explicit miss is a real error). On success the slug is re-persisted below, self-healing.
|
|
119
|
+
if (!pub.ok && pub.body?.error === "not_found" && targetSlug && !params.slug) {
|
|
120
|
+
const d = await decideTarget();
|
|
121
|
+
if (d.mode === "ambiguous")
|
|
122
|
+
return ambiguous(d.candidates, true);
|
|
123
|
+
targetSlug = d.mode === "use" ? d.slug : undefined;
|
|
124
|
+
if (d.mode === "use" && d.mapSlug)
|
|
125
|
+
targetMap = d.mapSlug;
|
|
126
|
+
pub = await postJson(`${apiUrl}/publish`, buildBody(targetSlug, targetMap), token);
|
|
93
127
|
}
|
|
94
|
-
// Target slug → update that project. None → omit slug (server creates a new one).
|
|
95
|
-
const reqBody = {
|
|
96
|
-
map,
|
|
97
|
-
client: { source: params.source ?? "cli", version: pkg.version },
|
|
98
|
-
};
|
|
99
|
-
if (targetSlug)
|
|
100
|
-
reqBody.slug = targetSlug;
|
|
101
|
-
else
|
|
102
|
-
reqBody.name = params.name || basename(projectRoot);
|
|
103
|
-
if (targetMap)
|
|
104
|
-
reqBody.mapSlug = targetMap;
|
|
105
|
-
const pub = await postJson(`${apiUrl}/publish`, reqBody, token);
|
|
106
128
|
if (!pub.ok) {
|
|
107
129
|
return {
|
|
108
130
|
ok: false,
|
package/dist/core/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/core/publish.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/core/publish.ts"],"names":[],"mappings":"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"}
|