@arshdelight/practi 0.9.5 → 0.11.0
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 +51 -14
- package/dist/client.js +49 -6
- package/dist/client.js.map +1 -1
- package/dist/cmd/blob.js +10 -1
- package/dist/cmd/blob.js.map +1 -1
- package/dist/cmd/clone.js +13 -7
- package/dist/cmd/clone.js.map +1 -1
- package/dist/cmd/comment.js +50 -15
- package/dist/cmd/comment.js.map +1 -1
- package/dist/cmd/config.js +1 -1
- package/dist/cmd/config.js.map +1 -1
- package/dist/cmd/edit.js +80 -8
- package/dist/cmd/edit.js.map +1 -1
- package/dist/cmd/gc.js +77 -0
- package/dist/cmd/gc.js.map +1 -0
- package/dist/cmd/lifecycle.js +63 -13
- package/dist/cmd/lifecycle.js.map +1 -1
- package/dist/cmd/login.js +13 -4
- package/dist/cmd/login.js.map +1 -1
- package/dist/cmd/ls.js +41 -2
- package/dist/cmd/ls.js.map +1 -1
- package/dist/cmd/migrate.js +3 -0
- package/dist/cmd/migrate.js.map +1 -1
- package/dist/cmd/new.js +50 -3
- package/dist/cmd/new.js.map +1 -1
- package/dist/cmd/note.js +160 -0
- package/dist/cmd/note.js.map +1 -0
- package/dist/cmd/push.js +6 -1
- package/dist/cmd/push.js.map +1 -1
- package/dist/cmd/remote.js +15 -8
- package/dist/cmd/remote.js.map +1 -1
- package/dist/cmd/remove.js +42 -0
- package/dist/cmd/remove.js.map +1 -0
- package/dist/cmd/repair.js +1 -1
- package/dist/cmd/repair.js.map +1 -1
- package/dist/cmd/search.js +154 -57
- package/dist/cmd/search.js.map +1 -1
- package/dist/cmd/show.js +97 -9
- package/dist/cmd/show.js.map +1 -1
- package/dist/index.js +134 -36
- package/dist/index.js.map +1 -1
- package/dist/notes.js +121 -0
- package/dist/notes.js.map +1 -0
- package/dist/oauth.js +3 -0
- package/dist/oauth.js.map +1 -1
- package/dist/state.js +2 -1
- package/dist/state.js.map +1 -1
- package/dist/web.js +128 -13
- package/dist/web.js.map +1 -1
- package/package.json +1 -1
- package/skills/use-practi/SKILL.md +52 -15
- package/web-default/app.js +2 -2
- package/web-default/detail.html +6 -1
- package/web-default/detail.js +510 -15
- package/web-default/highlight.min.js +1262 -0
- package/web-default/lang.js +19 -7
- package/web-default/style.css +121 -10
package/dist/cmd/search.js
CHANGED
|
@@ -1,64 +1,181 @@
|
|
|
1
1
|
import { defaultDataDir, loadState } from '../state.js';
|
|
2
2
|
import { openWorkspace } from '../workspace.js';
|
|
3
|
-
import { authedFetch } from '../client.js';
|
|
3
|
+
import { authedFetch, requireCredentials } from '../client.js';
|
|
4
4
|
import { shortHash } from '../render.js';
|
|
5
5
|
/**
|
|
6
|
-
* practi search <query
|
|
7
|
-
* -
|
|
8
|
-
* - --
|
|
9
|
-
* -
|
|
6
|
+
* practi search <query...>:三态检索。
|
|
7
|
+
* - 默认(无旗标)= 混合:先本地后 hub,各吃一份 --limit,scope 只作用于远端半场;
|
|
8
|
+
* - --local 只搜本地;--remote 只搜 hub(GET /api/v1/pop/search,标题命中优先);
|
|
9
|
+
* - 两个旗标同时给是自相矛盾,直接拒。
|
|
10
|
+
* - 空查询 = 浏览:本地看 direct 根,远端看最近公开。
|
|
10
11
|
*/
|
|
11
12
|
export async function runSearch(opts) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (opts.local)
|
|
15
|
-
return runLocalSearch(opts, dataDir, q);
|
|
16
|
-
const state = loadState(dataDir);
|
|
17
|
-
if (!state.remote) {
|
|
18
|
-
console.error('error: no remote configured — run `practi remote set <url>` first');
|
|
13
|
+
if (opts.local && opts.remote) {
|
|
14
|
+
console.error('error: --local and --remote are mutually exclusive — with neither, search is already both (local first, then the hub)');
|
|
19
15
|
return 1;
|
|
20
16
|
}
|
|
21
17
|
if (!['public', 'me', 'all'].includes(opts.scope)) {
|
|
22
18
|
console.error("error: invalid scope — expected public | me | all");
|
|
23
19
|
return 1;
|
|
24
20
|
}
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
22
|
+
const q = opts.positional.join(' ').trim();
|
|
23
|
+
if (opts.local)
|
|
24
|
+
return localSearch(opts, dataDir, q);
|
|
25
|
+
if (opts.remote)
|
|
26
|
+
return remoteSearch(opts, dataDir, q);
|
|
27
|
+
return mixedSearch(opts, dataDir, q);
|
|
28
|
+
}
|
|
29
|
+
/** 混合:本地半场 + 远端半场。远端失败不掩本地结果(照样渲染),但 exit 1 示警。 */
|
|
30
|
+
async function mixedSearch(opts, dataDir, q) {
|
|
31
|
+
// 未初始化的 data dir 上本地半场降级为空(远端照常)——开箱即搜是混合默认的承诺
|
|
32
|
+
let local;
|
|
33
|
+
try {
|
|
34
|
+
local = collectLocal(dataDir, q);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
local = { hits: [], nodesCount: 0 };
|
|
38
|
+
}
|
|
39
|
+
const shownLocal = local.hits.slice(0, opts.limit);
|
|
40
|
+
let rows = [];
|
|
41
|
+
let total = 0;
|
|
42
|
+
let remoteErr = null;
|
|
43
|
+
try {
|
|
44
|
+
const r = await fetchRemote(dataDir, q, opts.scope, opts.limit);
|
|
45
|
+
rows = r.rows;
|
|
46
|
+
total = r.total;
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
remoteErr = e.message;
|
|
50
|
+
}
|
|
51
|
+
if (opts.json) {
|
|
52
|
+
const payload = {
|
|
53
|
+
query: q,
|
|
54
|
+
local: { results: shownLocal, total: local.hits.length },
|
|
55
|
+
remote: remoteErr ? { error: remoteErr } : { results: rows, total },
|
|
56
|
+
};
|
|
57
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
58
|
+
return remoteErr ? 1 : 0;
|
|
59
|
+
}
|
|
60
|
+
console.log('LOCAL (workspace)');
|
|
61
|
+
if (shownLocal.length === 0) {
|
|
62
|
+
console.log(` ${q ? `no local matches for "${q}"` : '(no direct pops in this workspace)'}`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
for (const hit of shownLocal)
|
|
66
|
+
printLocalHit(hit);
|
|
67
|
+
}
|
|
68
|
+
console.log(` ${shownLocal.length} local hit(s) — inspect with \`practi show <hash>\``);
|
|
69
|
+
console.log('\nREMOTE (scope: ' + opts.scope + ')');
|
|
70
|
+
if (remoteErr) {
|
|
71
|
+
console.error(` hub search failed: ${remoteErr}`);
|
|
72
|
+
}
|
|
73
|
+
else if (rows.length === 0) {
|
|
74
|
+
console.log(` ${q ? `no results for "${q}"` : 'no documents yet'}`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
for (const r of rows)
|
|
78
|
+
printRemoteRow(r);
|
|
79
|
+
console.log(` ${rows.length} shown (total ${total}, scope: ${opts.scope}) — fetch one with \`practi pull <hash>\``);
|
|
80
|
+
}
|
|
81
|
+
return remoteErr ? 1 : 0;
|
|
82
|
+
}
|
|
83
|
+
/** --remote:只搜 hub。有凭据走 authed(scope=me/all 需要身份),否则匿名读公开库。 */
|
|
84
|
+
async function remoteSearch(opts, dataDir, q) {
|
|
85
|
+
let rows;
|
|
86
|
+
let total;
|
|
87
|
+
try {
|
|
88
|
+
const r = await fetchRemote(dataDir, q, opts.scope, opts.limit);
|
|
89
|
+
rows = r.rows;
|
|
90
|
+
total = r.total;
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
console.error(`search failed: ${e.message}`);
|
|
31
94
|
return 1;
|
|
32
95
|
}
|
|
33
|
-
const results = body.results ?? [];
|
|
34
96
|
if (opts.json) {
|
|
35
|
-
console.log(JSON.stringify(
|
|
97
|
+
console.log(JSON.stringify({ query: q, results: rows, total }, null, 2));
|
|
36
98
|
return 0;
|
|
37
99
|
}
|
|
38
|
-
if (
|
|
100
|
+
if (rows.length === 0) {
|
|
39
101
|
console.log(q ? `no results for "${q}" (scope: ${opts.scope})` : `no documents yet (scope: ${opts.scope})`);
|
|
40
102
|
return 0;
|
|
41
103
|
}
|
|
42
|
-
for (const r of
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
104
|
+
for (const r of rows)
|
|
105
|
+
printRemoteRow(r);
|
|
106
|
+
console.log(`\n${rows.length} shown (total ${total}, scope: ${opts.scope}) — fetch one with \`practi pull <hash>\``);
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
async function fetchRemote(dataDir, q, scope, limit) {
|
|
110
|
+
const state = loadState(dataDir);
|
|
111
|
+
if (!state.remote)
|
|
112
|
+
throw new Error('no remote configured — run `practi remote set <url>` first');
|
|
113
|
+
if (!['public', 'me', 'all'].includes(scope)) {
|
|
114
|
+
throw new Error('invalid scope — expected public | me | all');
|
|
47
115
|
}
|
|
48
|
-
|
|
116
|
+
const params = new URLSearchParams({ q, scope, limit: String(limit) });
|
|
117
|
+
const path = `/api/v1/pop/search?${params.toString()}`;
|
|
118
|
+
const authed = hasCredentials(dataDir);
|
|
119
|
+
const res = authed
|
|
120
|
+
? await authedFetch(dataDir, state.remote.url, path)
|
|
121
|
+
: await fetch(`${state.remote.url}${path}`);
|
|
122
|
+
const body = (await res.json().catch(() => ({})));
|
|
123
|
+
if (!res.ok) {
|
|
124
|
+
const detail = typeof body.message === 'string' ? body.message : typeof body.error === 'string' ? body.error : `HTTP ${res.status}`;
|
|
125
|
+
throw new Error(detail);
|
|
126
|
+
}
|
|
127
|
+
return { rows: body.results ?? [], total: body.total ?? body.results?.length ?? 0 };
|
|
128
|
+
}
|
|
129
|
+
function hasCredentials(dataDir) {
|
|
130
|
+
try {
|
|
131
|
+
requireCredentials(dataDir);
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function printRemoteRow(r) {
|
|
139
|
+
const desc = r.description ? ` — ${r.description}` : '';
|
|
140
|
+
const author = r.authorName ? ` @${r.authorName}` : '';
|
|
141
|
+
console.log(` ${shortHash(r.root_hash)} [${r.status}] ${r.name}${desc}${author}`);
|
|
142
|
+
console.log(` ${r.root_hash}`);
|
|
143
|
+
}
|
|
144
|
+
/** --local:只搜本地工作区(原语义原样)。 */
|
|
145
|
+
function localSearch(opts, dataDir, q) {
|
|
146
|
+
const { hits, nodesCount } = collectLocal(dataDir, q);
|
|
147
|
+
const shown = hits.slice(0, opts.limit);
|
|
148
|
+
if (opts.json) {
|
|
149
|
+
console.log(JSON.stringify({ query: q, local: true, results: shown, total: hits.length }, null, 2));
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
if (hits.length === 0) {
|
|
153
|
+
console.log(q ? `no local matches for "${q}"` : '(no direct pops in this workspace)');
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
for (const hit of shown)
|
|
157
|
+
printLocalHit(hit);
|
|
158
|
+
const label = q ? `${shown.length} matched` : `${shown.length} direct POP(s), ${nodesCount} nodes`;
|
|
159
|
+
console.log(`\n${label} (local workspace) — inspect with \`practi show <hash>\``);
|
|
49
160
|
return 0;
|
|
50
161
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
162
|
+
function printLocalHit(hit) {
|
|
163
|
+
const tag = hit.type === 'practice' ? `[practice·${hit.op}]` : '[action]';
|
|
164
|
+
const where = hit.direct
|
|
165
|
+
? `direct root, ${hit.size} nodes`
|
|
166
|
+
: hit.roots.map((r) => `in ${shortHash(r.hash)} (${r.name})`).join('; ');
|
|
167
|
+
console.log(` ${shortHash(hit.hash)} ${tag} ${hit.name}`);
|
|
168
|
+
console.log(` ${where}`);
|
|
169
|
+
}
|
|
170
|
+
/** 本地命中计算(--local 与混合共用):
|
|
171
|
+
* - 遍历全部已存节点(含 indirect),对 name/description/content 做大小写不敏感子串匹配;
|
|
172
|
+
* 纯 hex 查询词(≥4 位)额外按哈希前缀匹配。
|
|
173
|
+
* - 输出按 direct 树的深度优先步骤顺序排列,共享子树只出现一次并标注全部所属根。
|
|
174
|
+
* - 空查询 = 浏览 direct 根(带各树节点数)。 */
|
|
175
|
+
function collectLocal(dataDir, q) {
|
|
59
176
|
const ws = openWorkspace(dataDir);
|
|
60
177
|
const state = loadState(dataDir);
|
|
61
|
-
const direct = state.direct.filter(
|
|
178
|
+
const direct = state.direct.filter(h => ws.nodes.has(h));
|
|
62
179
|
const directSet = new Set(direct);
|
|
63
180
|
// 包含关系:节点 → 所属 direct 根(共享子树可属多个根);根 → 树内节点数
|
|
64
181
|
const owner = new Map();
|
|
@@ -112,26 +229,6 @@ function runLocalSearch(opts, dataDir, q) {
|
|
|
112
229
|
};
|
|
113
230
|
for (const root of direct)
|
|
114
231
|
visit(root);
|
|
115
|
-
|
|
116
|
-
const shown = hits.slice(0, opts.limit);
|
|
117
|
-
if (opts.json) {
|
|
118
|
-
console.log(JSON.stringify({ query: q, local: true, results: shown, total }, null, 2));
|
|
119
|
-
return 0;
|
|
120
|
-
}
|
|
121
|
-
if (total === 0) {
|
|
122
|
-
console.log(needle ? `no local matches for "${q}"` : '(no direct pops in this workspace)');
|
|
123
|
-
return 0;
|
|
124
|
-
}
|
|
125
|
-
for (const hit of shown) {
|
|
126
|
-
const tag = hit.type === 'practice' ? `[practice·${hit.op}]` : '[action]';
|
|
127
|
-
const where = hit.direct
|
|
128
|
-
? `direct root, ${hit.size} nodes`
|
|
129
|
-
: hit.roots.map((r) => `in ${shortHash(r.hash)} (${r.name})`).join('; ');
|
|
130
|
-
console.log(` ${shortHash(hit.hash)} ${tag} ${hit.name}`);
|
|
131
|
-
console.log(` ${where}`);
|
|
132
|
-
}
|
|
133
|
-
const label = needle ? `${shown.length} matched` : `${shown.length} direct POP(s), ${ws.nodes.size} nodes`;
|
|
134
|
-
console.log(`\n${label} (local workspace) — inspect with \`practi show <hash>\``);
|
|
135
|
-
return 0;
|
|
232
|
+
return { hits, nodesCount: ws.nodes.size };
|
|
136
233
|
}
|
|
137
234
|
//# sourceMappingURL=search.js.map
|
package/dist/cmd/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/cmd/search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/cmd/search.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/show.js
CHANGED
|
@@ -1,18 +1,106 @@
|
|
|
1
|
-
import { aggregateView, exportSubtree, resolveNodeRef } from '@arshdelight/pop-sdk';
|
|
2
|
-
import { defaultDataDir } from '../state.js';
|
|
1
|
+
import { PracticeError, aggregateView, exportSubtree, parseDocument, resolveNodeRef, } from '@arshdelight/pop-sdk';
|
|
2
|
+
import { defaultDataDir, loadState } from '../state.js';
|
|
3
3
|
import { openWorkspace } from '../workspace.js';
|
|
4
4
|
import { renderSteps, viewHeader } from '../render.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { authedFetch, requireCredentials } from '../client.js';
|
|
6
|
+
/** Inspect one node: aggregate view (default), --json for the StandardView, --doc for the document form.
|
|
7
|
+
*
|
|
8
|
+
* 哈希纪律:本地索引本身即验证(loadWorkspace 重算每个节点,名实不符的 E_NODE_CORRUPT
|
|
9
|
+
* 不进索引)——show 在「没找到」时先翻损坏记录,把「找到但哈希不正确」和「从未存在」
|
|
10
|
+
* 分开说话;本地真没有则回落 hub(完整哈希;前缀只对本地工作区有意义),取回后
|
|
11
|
+
* 重算根哈希三方比对(请求 ref ↔ hub 自称 ↔ 实算),不信传输也不信服务器自述。 */
|
|
12
|
+
export async function runShow(opts) {
|
|
7
13
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
8
14
|
const ws = openWorkspace(dataDir);
|
|
9
|
-
|
|
10
|
-
|
|
15
|
+
let hash;
|
|
16
|
+
try {
|
|
17
|
+
hash = resolveNodeRef(ws, opts.hash);
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
if (!(e instanceof PracticeError) || e.code !== 'E_NOT_FOUND')
|
|
21
|
+
throw e;
|
|
22
|
+
const hex = opts.hash.replace(/^sha256:/i, '').toLowerCase();
|
|
23
|
+
const corrupt = ws.parseIssues.find((i) => i.code === 'E_NODE_CORRUPT' && i.file.endsWith(`${hex}.md`));
|
|
24
|
+
if (corrupt) {
|
|
25
|
+
console.error(`error [E_NODE_CORRUPT]: the node file exists locally, but ${corrupt.message}`);
|
|
26
|
+
if (corrupt.hint)
|
|
27
|
+
console.error(` hint: ${corrupt.hint}`);
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
if (!/^[0-9a-f]{64}$/.test(hex)) {
|
|
31
|
+
console.error(`error [E_NOT_FOUND]: node "${opts.hash}" is not in the local workspace — the hub fallback needs the full hash (prefixes resolve only locally)`);
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
return remoteShow(opts, dataDir, `sha256:${hex}`);
|
|
35
|
+
}
|
|
36
|
+
return renderNode(hash, ws.nodes, opts);
|
|
37
|
+
}
|
|
38
|
+
/** hub 回落:公开文档匿名可读;带凭据走 authedFetch(可读自己的私有/待审)。
|
|
39
|
+
* 取回后 parseDocument 重算根哈希——对不上就报「找到但哈希不正确」,绝不展示。 */
|
|
40
|
+
async function remoteShow(opts, dataDir, ref) {
|
|
41
|
+
const state = loadState(dataDir);
|
|
42
|
+
if (!state.remote) {
|
|
43
|
+
console.error('error: no remote configured — run `practi remote set <url>` first');
|
|
44
|
+
return 1;
|
|
45
|
+
}
|
|
46
|
+
const path = `/api/v1/pop/${encodeURIComponent(ref)}`;
|
|
47
|
+
let res;
|
|
48
|
+
const authed = hasCredentials(dataDir);
|
|
49
|
+
try {
|
|
50
|
+
res = authed
|
|
51
|
+
? await authedFetch(dataDir, state.remote.url, path)
|
|
52
|
+
: await fetch(`${state.remote.url}${path}`);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
console.error(`error: hub unreachable — ${e.message}`);
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
const body = (await res.json().catch(() => ({})));
|
|
59
|
+
if (!res.ok) {
|
|
60
|
+
if (res.status === 404) {
|
|
61
|
+
console.error(`error [E_NOT_FOUND]: node "${ref}" is not in the local workspace and is not visible to you on ${state.remote.url}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.error(`error: hub read failed — ${body.code ? `[${body.code}] ` : ''}${body.message ?? `HTTP ${res.status}`}`);
|
|
65
|
+
}
|
|
66
|
+
return 1;
|
|
67
|
+
}
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = parseDocument(body.document);
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
console.error(`error [E_HASH_MISMATCH]: the hub returned something that does not parse as a document — ${e.message}`);
|
|
74
|
+
return 1;
|
|
75
|
+
}
|
|
76
|
+
if (parsed.rootHash !== ref || parsed.rootHash !== body.root_hash) {
|
|
77
|
+
const claimed = body.root_hash ?? '(none)';
|
|
78
|
+
console.error(`error [E_HASH_MISMATCH]: found a document, but its content hashes to ${parsed.rootHash}, not the requested ${ref} (hub claims ${claimed}) — showing it would be showing unverified content`);
|
|
79
|
+
return 1;
|
|
80
|
+
}
|
|
81
|
+
const nodes = new Map(parsed.nodeHashes);
|
|
82
|
+
nodes.set(parsed.rootHash, parsed.root);
|
|
83
|
+
if (!opts.json && !opts.doc)
|
|
84
|
+
console.log(`from: ${state.remote.url} (hash verified)`);
|
|
85
|
+
return renderNode(ref, nodes, opts);
|
|
86
|
+
}
|
|
87
|
+
function hasCredentials(dataDir) {
|
|
88
|
+
try {
|
|
89
|
+
requireCredentials(dataDir);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function renderNode(hash, nodes, opts) {
|
|
97
|
+
const node = nodes.get(hash);
|
|
11
98
|
if (opts.doc) {
|
|
12
|
-
console.log(JSON.stringify(exportSubtree(node,
|
|
99
|
+
console.log(JSON.stringify(exportSubtree(node, nodes), null, 2));
|
|
13
100
|
return 0;
|
|
14
101
|
}
|
|
15
|
-
|
|
102
|
+
// --json 传 full:机器视图带每步正文,AI 一次读全免逐哈希往返;人类文本仍走紧凑骨架
|
|
103
|
+
const view = aggregateView(hash, nodes, opts.json ? { full: true } : undefined);
|
|
16
104
|
if (opts.json) {
|
|
17
105
|
console.log(JSON.stringify(view, null, 2));
|
|
18
106
|
return 0;
|
|
@@ -24,7 +112,7 @@ export function runShow(opts) {
|
|
|
24
112
|
console.log(`\n${view.content}`);
|
|
25
113
|
if (view.steps.length > 0) {
|
|
26
114
|
console.log('\nsteps:');
|
|
27
|
-
for (const line of renderSteps(view.steps,
|
|
115
|
+
for (const line of renderSteps(view.steps, nodes))
|
|
28
116
|
console.log(` ${line}`);
|
|
29
117
|
}
|
|
30
118
|
if (view.flow.length > 0) {
|
package/dist/cmd/show.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/cmd/show.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../src/cmd/show.ts"],"names":[],"mappings":"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"}
|