@cr8rcho/alkahest 0.1.83 → 0.1.85

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.
@@ -26,6 +26,47 @@ export interface PresetsListResult {
26
26
  }
27
27
  /** Read the registry (presets/index.json) — the single source of truth every surface lists from. */
28
28
  export declare function listPresets(): PresetsListResult;
29
+ /**
30
+ * One preset's CONTENTS, read out of the package — every byte `docs init` would place,
31
+ * with nothing installed. This is the agent-facing half of ADR-083's "init is sugar":
32
+ * an agent that can call add_skill / create_map and write files reaches the same state
33
+ * from this payload, including on surfaces that have no shell (the remote connector).
34
+ */
35
+ export interface PresetBundle {
36
+ id: string;
37
+ name: string;
38
+ description: string;
39
+ /** Account half — install by name (skip names the user already has). */
40
+ skills: {
41
+ name: string;
42
+ body: string;
43
+ }[];
44
+ /** Note maps the preset expects (type "note"). */
45
+ maps: {
46
+ slug: string;
47
+ name?: string;
48
+ }[];
49
+ /** Repo half — write verbatim at these repo-relative paths; never overwrite. */
50
+ scaffold: {
51
+ file: string;
52
+ content: string;
53
+ }[];
54
+ /** Reference scripts — copied once, then owned by the receiving repo. */
55
+ scripts: {
56
+ dest: string;
57
+ content: string;
58
+ }[];
59
+ /** Agent rules for the repo's CLAUDE.md (append only with the user's say-so). */
60
+ snippet?: string;
61
+ }
62
+ export interface PresetBundleResult {
63
+ ok: boolean;
64
+ bundle?: PresetBundle;
65
+ code?: string;
66
+ message?: string;
67
+ }
68
+ /** Read a preset's full contents (no writes, no auth). */
69
+ export declare function readPresetBundle(presetId?: string): PresetBundleResult;
29
70
  export interface DocsInitParams {
30
71
  api?: string;
31
72
  token?: string;
@@ -20,6 +20,50 @@ export function listPresets() {
20
20
  return { ok: false, code: "no_registry", message: `Could not read the preset registry (${idx}): ${msg}` };
21
21
  }
22
22
  }
23
+ /** Load one bundle's manifest, or an unknown_preset error naming what IS available. */
24
+ function loadManifest(presetId) {
25
+ const dir = join(presetsRoot(), presetId);
26
+ try {
27
+ return { dir, manifest: JSON.parse(readFileSync(join(dir, "preset.json"), "utf8")) };
28
+ }
29
+ catch {
30
+ const known = listPresets().presets?.map((p) => p.id).join(", ") || "(registry unreadable)";
31
+ return { code: "unknown_preset", message: `No preset '${presetId}'. Available: ${known}.` };
32
+ }
33
+ }
34
+ /** Read a preset's full contents (no writes, no auth). */
35
+ export function readPresetBundle(presetId = "as-built") {
36
+ const loaded = loadManifest(presetId.trim() || "as-built");
37
+ if (!("manifest" in loaded))
38
+ return { ok: false, code: loaded.code, message: loaded.message };
39
+ const { dir, manifest } = loaded;
40
+ try {
41
+ const scaffold = manifest.scaffold
42
+ ? walkFiles(join(dir, manifest.scaffold))
43
+ // .gitkeep files only exist to carry empty dirs into git — an agent creating the
44
+ // tree makes directories as it writes, so passing them along is noise.
45
+ .filter((rel) => !rel.endsWith(".gitkeep"))
46
+ .map((rel) => ({ file: rel, content: readFileSync(join(dir, manifest.scaffold, ...rel.split("/")), "utf8") }))
47
+ : [];
48
+ return {
49
+ ok: true,
50
+ bundle: {
51
+ id: manifest.id,
52
+ name: manifest.name,
53
+ description: manifest.description,
54
+ skills: (manifest.skills ?? []).map((s) => ({ name: s.name, body: readFileSync(join(dir, s.file), "utf8") })),
55
+ maps: manifest.maps ?? [],
56
+ scaffold,
57
+ scripts: (manifest.scripts ?? []).map((s) => ({ dest: s.dest, content: readFileSync(join(dir, s.file), "utf8") })),
58
+ snippet: manifest.snippet ? readFileSync(join(dir, manifest.snippet), "utf8") : undefined,
59
+ },
60
+ };
61
+ }
62
+ catch (err) {
63
+ const msg = err instanceof Error ? err.message : String(err);
64
+ return { ok: false, code: "bad_preset", message: `Preset '${presetId}' is incomplete: ${msg}` };
65
+ }
66
+ }
23
67
  const SNIPPET_MARKER = "alkahest as-built preset";
24
68
  /** Every file under dir, as paths relative to dir. */
25
69
  function walkFiles(dir) {
@@ -45,15 +89,10 @@ function walkFiles(dir) {
45
89
  */
46
90
  export async function docsInit(path, params = {}) {
47
91
  const presetId = (params.preset ?? "as-built").trim();
48
- const dir = join(presetsRoot(), presetId);
49
- let manifest;
50
- try {
51
- manifest = JSON.parse(readFileSync(join(dir, "preset.json"), "utf8"));
52
- }
53
- catch {
54
- const known = listPresets().presets?.map((p) => p.id).join(", ") || "(registry unreadable)";
55
- return { ok: false, code: "unknown_preset", message: `No preset '${presetId}'. Available: ${known}.` };
56
- }
92
+ const loaded = loadManifest(presetId);
93
+ if (!("manifest" in loaded))
94
+ return { ok: false, code: loaded.code, message: loaded.message };
95
+ const { dir, manifest } = loaded;
57
96
  const root = resolve(path || ".");
58
97
  const result = { ok: true, preset: presetId, skills: [], scaffold: [], scripts: [], maps: [] };
59
98
  // 1) Account skills — upsert by name, but never silently clobber a user-edited body:
@@ -1 +1 @@
1
- {"version":3,"file":"docsInit.js","sourceRoot":"","sources":["../../src/core/docsInit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docsInit.js","sourceRoot":"","sources":["../../src/core/docsInit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type CodeMapFingerprint, type ProjectInfo, type WorkspaceInfo } from "./listProjects.js";
2
+ /**
3
+ * "Where am I signed in, and where does this folder publish?" — the state behind
4
+ * `alkahest status` and behind a bare `alkahest login`.
5
+ *
6
+ * There is no /whoami endpoint and nothing to be a "who": a token resolves to a user_id and a
7
+ * set of workspaces, never a username (see supabase `_shared/auth.ts` / `list-projects`). So the
8
+ * question this answers is the STATE one — is the token live, what can it reach, and which
9
+ * project/map this checkout is bound to. `list-projects` doubles as the validity probe: it is the
10
+ * cheapest authenticated GET, and its rejection codes distinguish revoked from expired from scoped.
11
+ *
12
+ * Like the other core clients this returns a structured result and never writes to stdout/stderr —
13
+ * the MCP server reserves stdout for JSON-RPC.
14
+ */
15
+ export type AuthState =
16
+ /** No token anywhere (credentials file, ALKAHEST_TOKEN). */
17
+ "anonymous"
18
+ /** Token accepted — full access. */
19
+ | "authenticated"
20
+ /** Token is live but SCOPED (widget/capture); it cannot reach the account-wide verbs. */
21
+ | "scoped"
22
+ /** Token unknown or revoked. */
23
+ | "invalid"
24
+ /** Token past its expires_at. */
25
+ | "expired"
26
+ /** The API could not be reached — says nothing about the token. */
27
+ | "unreachable";
28
+ export interface AuthStatus {
29
+ state: AuthState;
30
+ /** True for every state where the token is known-good (authenticated | scoped). */
31
+ ok: boolean;
32
+ apiUrl: string;
33
+ /** The API is the hosted alkahest.app backend (not a self-hosted override). */
34
+ hosted: boolean;
35
+ /** Present whenever a token was found locally, valid or not. */
36
+ token?: {
37
+ masked: string;
38
+ source: "credentials" | "env";
39
+ };
40
+ /** Only on `authenticated` — a scoped token never gets to enumerate. */
41
+ workspaces?: WorkspaceInfo[];
42
+ projects?: ProjectInfo[];
43
+ /** Server or transport message, for the failure states. */
44
+ message?: string;
45
+ }
46
+ /** Resolve the local token, then probe it against the API. One round trip, no writes. */
47
+ export declare function authStatus(params?: {
48
+ api?: string;
49
+ token?: string;
50
+ }): Promise<AuthStatus>;
51
+ export interface CheckoutStatus {
52
+ /** Nearest ancestor holding a `.alkahest/` — the folder this status describes. */
53
+ root: string;
54
+ /** The project this checkout publishes to, if it has ever been linked. */
55
+ slug?: string;
56
+ mapSlug?: string;
57
+ /** Server-side detail for `slug`, when the account can see it. */
58
+ project?: ProjectInfo;
59
+ /** The `mapSlug` entry of `project.codeMaps` (or the sole code map when unset). */
60
+ map?: CodeMapFingerprint;
61
+ /** Linked locally, but the account cannot see that project — moved, deleted, or another account's. */
62
+ unreachable: boolean;
63
+ }
64
+ /** Join the local link (`.alkahest/project.json`) to what the account can actually see. */
65
+ export declare function checkoutStatus(path: string, auth: AuthStatus): CheckoutStatus;
@@ -0,0 +1,50 @@
1
+ import { DEFAULT_API_URL, loadCredentials, resolveApiUrl, resolveToken } from "./credentials.js";
2
+ import { listProjects } from "./listProjects.js";
3
+ import { resolveProject } from "./project.js";
4
+ /** alk_1234…cdef — enough to tell two tokens apart, not enough to use. */
5
+ function mask(token) {
6
+ return token.length <= 12 ? "alk_…" : `${token.slice(0, 8)}…${token.slice(-4)}`;
7
+ }
8
+ const STATE_BY_CODE = {
9
+ no_token: "anonymous",
10
+ "missing token": "anonymous",
11
+ invalid_token: "invalid",
12
+ token_expired: "expired",
13
+ insufficient_scope: "scoped",
14
+ network: "unreachable",
15
+ no_api: "unreachable",
16
+ };
17
+ /** Resolve the local token, then probe it against the API. One round trip, no writes. */
18
+ export async function authStatus(params = {}) {
19
+ const creds = loadCredentials();
20
+ const apiUrl = resolveApiUrl(params.api, creds);
21
+ const hosted = apiUrl === DEFAULT_API_URL;
22
+ const token = resolveToken(params.token, creds);
23
+ if (!token)
24
+ return { state: "anonymous", ok: false, apiUrl, hosted };
25
+ const source = params.token || creds.token ? "credentials" : "env";
26
+ const found = { masked: mask(token), source };
27
+ const res = await listProjects({ api: params.api, token });
28
+ if (res.ok) {
29
+ return {
30
+ state: "authenticated", ok: true, apiUrl, hosted, token: found,
31
+ workspaces: res.workspaces ?? [], projects: res.projects ?? [],
32
+ };
33
+ }
34
+ const state = STATE_BY_CODE[res.code ?? ""] ?? "invalid";
35
+ return { state, ok: state === "scoped", apiUrl, hosted, token: found, message: res.message };
36
+ }
37
+ /** Join the local link (`.alkahest/project.json`) to what the account can actually see. */
38
+ export function checkoutStatus(path, auth) {
39
+ const { root, slug, mapSlug } = resolveProject(path);
40
+ if (!slug)
41
+ return { root, unreachable: false };
42
+ const project = auth.projects?.find((p) => p.slug === slug);
43
+ const map = project
44
+ ? project.codeMaps.find((m) => m.mapSlug === mapSlug) ??
45
+ (mapSlug ? undefined : project.codeMaps[0])
46
+ : undefined;
47
+ // Only call it unreachable when we actually had a list to miss in.
48
+ return { root, slug, mapSlug, project, map, unreachable: Boolean(auth.projects && !project) };
49
+ }
50
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/core/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Human-facing time formatting shared by the commands that print timelines
3
+ * (`history`, `status`). Kept in core so the two agree on what "2h ago" means.
4
+ */
5
+ /** "just now" / "5m ago" / "3d ago" — empty string for an unparsable stamp. */
6
+ export declare function relTime(iso: string): string;
7
+ /** YYYY-MM-DD HH:MM in local time, no seconds. */
8
+ export declare function stamp(iso: string): string;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Human-facing time formatting shared by the commands that print timelines
3
+ * (`history`, `status`). Kept in core so the two agree on what "2h ago" means.
4
+ */
5
+ /** "just now" / "5m ago" / "3d ago" — empty string for an unparsable stamp. */
6
+ export function relTime(iso) {
7
+ const then = Date.parse(iso);
8
+ if (Number.isNaN(then))
9
+ return "";
10
+ const s = Math.max(0, Math.floor((Date.now() - then) / 1000));
11
+ if (s < 60)
12
+ return "just now";
13
+ const m = Math.floor(s / 60);
14
+ if (m < 60)
15
+ return `${m}m ago`;
16
+ const h = Math.floor(m / 60);
17
+ if (h < 24)
18
+ return `${h}h ago`;
19
+ const d = Math.floor(h / 24);
20
+ if (d < 30)
21
+ return `${d}d ago`;
22
+ const mo = Math.floor(d / 30);
23
+ return mo < 12 ? `${mo}mo ago` : `${Math.floor(mo / 12)}y ago`;
24
+ }
25
+ /** YYYY-MM-DD HH:MM in local time, no seconds. */
26
+ export function stamp(iso) {
27
+ const d = new Date(iso);
28
+ if (Number.isNaN(d.getTime()))
29
+ return iso;
30
+ const p = (n) => String(n).padStart(2, "0");
31
+ return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;
32
+ }
33
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/core/time.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,+EAA+E;AAC/E,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,UAAU,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC;AAChG,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AAC/G,CAAC"}
@@ -10,6 +10,7 @@ import { pullIssues, createIssue, updateIssue, deriveIssueStates, terminalStatus
10
10
  import { completeTask, createTask, postTaskComment, pullSkills, pullTaskComments, pullTasks, resolveTaskComment, saveSkill, updateTask } from "../core/tasks.js";
11
11
  import { createNote, editPropDefs, getNote, linkNotes, mapNote, pullNotes, updateNote } from "../core/notes.js";
12
12
  import { listMaps, createMap } from "../core/maps.js";
13
+ import { listPresets, readPresetBundle } from "../core/docsInit.js";
13
14
  import { listProjects } from "../core/listProjects.js";
14
15
  import { listHistory } from "../core/history.js";
15
16
  import { findProjectRoot } from "../core/project.js";
@@ -623,6 +624,41 @@ export function buildServer(remote) {
623
624
  return issueFail("Update task", res.code, res.message);
624
625
  return json({ ok: true, task: res.task });
625
626
  });
627
+ // ---- presets: the installable opinions (ADR-083), readable by the agent ----
628
+ // Not a new capability — every step of an install already rides add_skill / create_map /
629
+ // file writes. What was missing is DISCOVERY: the bundles live in this package's presets/
630
+ // dir and on the web gallery, so an agent asked to "start documenting this repo" had no
631
+ // way to learn they exist and wrote its own conventions instead. Read-only, no auth, no
632
+ // filesystem: it works on the remote connector too.
633
+ server.registerTool("presets", {
634
+ title: "List or read a docs preset",
635
+ description: "START HERE when the user asks to set up documentation for a repo — \"start documenting this project\", " +
636
+ "\"set up as-built docs / an ADR log\", \"연동해줘/문서화 시작해줘\". PRESETS are alkahest's packaged " +
637
+ "opinions (ADR-083): a documentation convention plus everything needed to run it. Call with no argument " +
638
+ "to list what's available; call with `preset` to get that bundle's full contents — skill bodies, the note " +
639
+ "maps it expects, repo scaffold files, a reference sync script, and a CLAUDE.md snippet. " +
640
+ "TO INSTALL ONE, use the tools you already have: (1) `skills` first, then `add_skill` for each preset " +
641
+ "skill whose name is NOT already there — an existing same-name skill is the user's own, LEAVE IT; " +
642
+ "(2) `create_map` for each map slug that doesn't exist yet (type 'note'); (3) write the scaffold files and " +
643
+ "the script at their given paths, never overwriting an existing file; (4) ASK before appending the snippet " +
644
+ "to CLAUDE.md. Then follow the installed skill's bootstrap protocol to write the first docs and mirror " +
645
+ "them, so the user ends the session with a map link rather than an empty folder. The CLI equivalent is " +
646
+ "`alkahest docs init`; doing it through these tools reaches the same state. No token or project needed.",
647
+ inputSchema: {
648
+ preset: z.string().optional().describe("Preset id (e.g. 'as-built') — omit to list the registry"),
649
+ },
650
+ }, async ({ preset }) => {
651
+ if (!preset) {
652
+ const res = listPresets();
653
+ if (!res.ok || !res.presets)
654
+ return issueFail("List presets", res.code, res.message);
655
+ return json({ ok: true, count: res.presets.length, presets: res.presets });
656
+ }
657
+ const res = readPresetBundle(preset);
658
+ if (!res.ok || !res.bundle)
659
+ return issueFail("Read preset", res.code, res.message);
660
+ return json({ ok: true, preset: res.bundle });
661
+ });
626
662
  // ---- skills: personal writing/processing instruction documents (ADR-068) ----
627
663
  server.registerTool("skills", {
628
664
  title: "List skills",