@arshdelight/practi 0.9.5 → 0.10.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 +96 -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 +49 -14
- package/web-default/app.js +2 -2
- package/web-default/detail.html +5 -1
- package/web-default/detail.js +352 -12
- package/web-default/lang.js +16 -4
- package/web-default/style.css +59 -7
package/dist/cmd/edit.js
CHANGED
|
@@ -2,15 +2,15 @@ import fs from 'node:fs';
|
|
|
2
2
|
import { createFromDoc, loadWorkspace, validateWorkspace, resolveNodeRef, nodeFilePath, } from '@arshdelight/pop-sdk';
|
|
3
3
|
import { claimDirect, defaultDataDir, loadState, saveState } from '../state.js';
|
|
4
4
|
import { openWorkspace } from '../workspace.js';
|
|
5
|
+
import { storeDocumentRemote } from '../client.js';
|
|
6
|
+
import { runDelete, resolveClaimRef } from './lifecycle.js';
|
|
7
|
+
import { shortHash } from '../render.js';
|
|
5
8
|
function readStdin() {
|
|
6
9
|
return fs.readFileSync(0, 'utf8');
|
|
7
10
|
}
|
|
8
11
|
function isRecord(v) {
|
|
9
12
|
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
10
13
|
}
|
|
11
|
-
function short(hash) {
|
|
12
|
-
return hash.slice('sha256:'.length, 'sha256:'.length + 10);
|
|
13
|
-
}
|
|
14
14
|
/**
|
|
15
15
|
* 从全部 direct 根做可达性分析(沿 children pins 走——内联与 ChildRef 同形存储,无需区分),
|
|
16
16
|
* 返回工作区里不可达的节点哈希。即 hub reconcileIndirectClaims 的本地对应:
|
|
@@ -38,9 +38,9 @@ export function collectUnreachable(ws, directRoots) {
|
|
|
38
38
|
* practi edit <hash>:非交互编辑一个 direct 根——新文档(file/--json/stdin)→ 新哈希换注册。
|
|
39
39
|
* 编辑即修订:根节点自动追加 revisions(from = 旧根哈希;spec §2.2 历史指针,允许悬空、永不校验)。
|
|
40
40
|
* 默认 GC 不可达节点(旧根及其独有后代;仍被其它 direct 根引用的内容保留);--keep 跳过。
|
|
41
|
-
* 纯本地操作:远端旧版仍在,结束时提示 push +
|
|
41
|
+
* 纯本地操作:远端旧版仍在,结束时提示 push + remove --remote 同步。
|
|
42
42
|
*/
|
|
43
|
-
export function runEdit(opts) {
|
|
43
|
+
export async function runEdit(opts) {
|
|
44
44
|
const ref = opts.positional[0];
|
|
45
45
|
let text;
|
|
46
46
|
if (opts.json !== undefined)
|
|
@@ -53,10 +53,79 @@ export function runEdit(opts) {
|
|
|
53
53
|
text = readStdin();
|
|
54
54
|
if (!ref || text === undefined || text.trim() === '') {
|
|
55
55
|
console.error("usage: practi edit <hash> <file.json> | practi edit <hash> --json '<text>' | practi edit <hash> < file.json");
|
|
56
|
-
console.error(' [--message <text>] [--no-revision] [--keep]');
|
|
56
|
+
console.error(' [--message <text>] [--no-revision] [--keep] [--remote (replace the claim on the hub only)]');
|
|
57
57
|
return 1;
|
|
58
58
|
}
|
|
59
59
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
60
|
+
if (opts.remote === true)
|
|
61
|
+
return remoteEdit(opts, dataDir, ref, text);
|
|
62
|
+
return localEdit(opts, dataDir, ref, text);
|
|
63
|
+
}
|
|
64
|
+
/** --remote:只有远端——把我对 hash A 的认领换成新文档(hash B):A 经 /mine 解析
|
|
65
|
+
* (前缀 OK,兼当「是我的认领」预检)→ 新文档带 revision{from:A} POST 上去(hub 解析
|
|
66
|
+
* 算哈希并认领)→ runDelete 撤掉 A(无人再认领时 hub 硬删旧内容)。本地零写入;
|
|
67
|
+
* 撤 A 失败时 B 已在(两认领并存),明说 practi remove <A> --remote 自愈。 */
|
|
68
|
+
async function remoteEdit(opts, dataDir, ref, text) {
|
|
69
|
+
const state = loadState(dataDir);
|
|
70
|
+
if (!state.remote) {
|
|
71
|
+
console.error('error: no remote configured — run `practi remote set <url>` first');
|
|
72
|
+
return 1;
|
|
73
|
+
}
|
|
74
|
+
let oldRoot;
|
|
75
|
+
try {
|
|
76
|
+
oldRoot = await resolveClaimRef(dataDir, state.remote.url, ref);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
console.error(`error: ${e.message}`);
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
82
|
+
let doc;
|
|
83
|
+
try {
|
|
84
|
+
doc = JSON.parse(text);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
console.error(`error [E_JSON]: not valid JSON — ${e.message}`);
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
90
|
+
if (!isRecord(doc)) {
|
|
91
|
+
console.error('error [E_SCHEMA]: the document must be a JSON object (one tree, root included)');
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
if (opts.noRevision !== true) {
|
|
95
|
+
const revisions = Array.isArray(doc.revisions) ? doc.revisions : [];
|
|
96
|
+
const already = revisions.some((r) => isRecord(r) && r.from === oldRoot);
|
|
97
|
+
if (!already) {
|
|
98
|
+
revisions.push({
|
|
99
|
+
when: new Date().toISOString().slice(0, 10),
|
|
100
|
+
what: opts.message ?? 'edited via practi edit --remote',
|
|
101
|
+
from: oldRoot,
|
|
102
|
+
});
|
|
103
|
+
doc.revisions = revisions;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
let newRoot;
|
|
107
|
+
try {
|
|
108
|
+
const stored = await storeDocumentRemote(dataDir, state.remote.url, doc);
|
|
109
|
+
newRoot = stored.rootHash;
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
console.error(`error: remote edit failed — ${e.message} (the old claim is untouched)`);
|
|
113
|
+
return 1;
|
|
114
|
+
}
|
|
115
|
+
if (newRoot === oldRoot) {
|
|
116
|
+
// 与本地路同规:内容哈希相同=无事可换,绝不能走 DELETE(否则空转一次编辑会把自己的认领撤掉)
|
|
117
|
+
console.log(`unchanged: ${oldRoot} (content hashes identically — claim kept)`);
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
console.log(`edited: ${oldRoot} -> ${newRoot} (on the hub — it parsed and hashed the tree)`);
|
|
121
|
+
const code = await runDelete({ dataDir, positional: [oldRoot] });
|
|
122
|
+
if (code !== 0) {
|
|
123
|
+
console.error(`remote: withdrawing the old claim failed — both versions are claimed on the hub now; run \`practi remove ${oldRoot} --remote\` to finish`);
|
|
124
|
+
return 1;
|
|
125
|
+
}
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
function localEdit(opts, dataDir, ref, text) {
|
|
60
129
|
const state = loadState(dataDir);
|
|
61
130
|
const ws = openWorkspace(dataDir);
|
|
62
131
|
const oldRoot = resolveNodeRef(ws, ref);
|
|
@@ -113,9 +182,12 @@ export function runEdit(opts) {
|
|
|
113
182
|
const dead = collectUnreachable(loadWorkspace(dataDir), state.direct);
|
|
114
183
|
for (const h of dead)
|
|
115
184
|
fs.unlinkSync(nodeFilePath(dataDir, h));
|
|
116
|
-
console.log(`gc: removed ${dead.length} unreachable node(s)${dead.length > 0 ? ` — ${dead.map(
|
|
185
|
+
console.log(`gc: removed ${dead.length} unreachable node(s)${dead.length > 0 ? ` — ${dead.map(shortHash).join(', ')}` : ''}`);
|
|
186
|
+
if (dead.length > 0) {
|
|
187
|
+
console.log('hint: blobs stay with their bytes — `practi gc` sweeps orphans when you want');
|
|
188
|
+
}
|
|
117
189
|
}
|
|
118
|
-
console.log(`remote: the hub still holds the old version — sync with \`practi push\` then \`practi
|
|
190
|
+
console.log(`remote: the hub still holds the old version — sync with \`practi push\` then \`practi remove ${oldRoot} --remote\``);
|
|
119
191
|
return 0;
|
|
120
192
|
}
|
|
121
193
|
//# sourceMappingURL=edit.js.map
|
package/dist/cmd/edit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/cmd/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,GAEb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/cmd/edit.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/gc.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { defaultDataDir } from '../state.js';
|
|
4
|
+
import { openWorkspace } from '../workspace.js';
|
|
5
|
+
import { shortHash } from '../render.js';
|
|
6
|
+
function fmtBytes(n) {
|
|
7
|
+
if (n >= 1024 * 1024)
|
|
8
|
+
return `${(n / 1024 / 1024).toFixed(1)} MB`;
|
|
9
|
+
if (n >= 1024)
|
|
10
|
+
return `${(n / 1024).toFixed(1)} KB`;
|
|
11
|
+
return `${n} B`;
|
|
12
|
+
}
|
|
13
|
+
export function runGc(opts) {
|
|
14
|
+
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
15
|
+
const ws = openWorkspace(dataDir);
|
|
16
|
+
// 附件只长在 action 上(schema 保证 practice 无 attachments),扫一遍全部节点即可
|
|
17
|
+
const referenced = new Set();
|
|
18
|
+
for (const node of ws.nodes.values()) {
|
|
19
|
+
if (node.type !== 'action')
|
|
20
|
+
continue;
|
|
21
|
+
for (const att of node.attachments ?? [])
|
|
22
|
+
referenced.add(att.hash);
|
|
23
|
+
}
|
|
24
|
+
const orphans = [];
|
|
25
|
+
const blobsDir = path.join(dataDir, 'blobs');
|
|
26
|
+
if (fs.existsSync(blobsDir)) {
|
|
27
|
+
for (const shard of fs.readdirSync(blobsDir)) {
|
|
28
|
+
const shardDir = path.join(blobsDir, shard);
|
|
29
|
+
let names;
|
|
30
|
+
try {
|
|
31
|
+
names = fs.readdirSync(shardDir);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
continue; // 非目录条目(人手放的杂物):不删不报,只跳过
|
|
35
|
+
}
|
|
36
|
+
for (const name of names) {
|
|
37
|
+
if (!/^[0-9a-f]{64}$/.test(name))
|
|
38
|
+
continue; // 抽屉里的杂物(.DS_Store 等):不删不报
|
|
39
|
+
const hash = `sha256:${name}`;
|
|
40
|
+
if (referenced.has(hash))
|
|
41
|
+
continue;
|
|
42
|
+
const file = path.join(shardDir, name);
|
|
43
|
+
let size;
|
|
44
|
+
try {
|
|
45
|
+
size = fs.statSync(file).size;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
continue; // 扫描瞬间被人拿走:跳过
|
|
49
|
+
}
|
|
50
|
+
orphans.push({ hash, file, size });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (orphans.length === 0) {
|
|
55
|
+
console.log('gc: no orphan blobs');
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
const freed = orphans.reduce((s, o) => s + o.size, 0);
|
|
59
|
+
console.log(`gc: ${orphans.length} orphan blob(s), ${fmtBytes(freed)}${opts.apply ? ' — removed' : ' — dry run, pass --apply to remove'}`);
|
|
60
|
+
for (const o of orphans)
|
|
61
|
+
console.log(` ${shortHash(o.hash)}`);
|
|
62
|
+
if (opts.apply) {
|
|
63
|
+
for (const o of orphans)
|
|
64
|
+
fs.unlinkSync(o.file);
|
|
65
|
+
// 抽屉清空了就顺手撤掉(撤不掉=还有东西,不硬来)
|
|
66
|
+
for (const dir of new Set(orphans.map(o => path.dirname(o.file)))) {
|
|
67
|
+
try {
|
|
68
|
+
fs.rmdirSync(dir);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// 非空或已消失:留着无妨
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=gc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gc.js","sourceRoot":"","sources":["../../src/cmd/gc.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/lifecycle.js
CHANGED
|
@@ -1,31 +1,63 @@
|
|
|
1
|
+
import { PracticeError, resolveNodeRef } from '@arshdelight/pop-sdk';
|
|
1
2
|
import { defaultDataDir, loadState } from '../state.js';
|
|
2
|
-
import { authedFetch } from '../client.js';
|
|
3
|
+
import { authedFetch, fetchMine } from '../client.js';
|
|
4
|
+
import { openWorkspace } from '../workspace.js';
|
|
3
5
|
/**
|
|
4
|
-
* practi
|
|
5
|
-
* POST /api/v1/pop/:ref/submit
|
|
6
|
+
* practi publish [hash]:尝试发布(PRIVATE → PENDING_REVIEW,自动机审通过后 PUBLISHED;此前已过审免二审)。
|
|
7
|
+
* POST /api/v1/pop/:ref/submit(hub 端点名不变,这是 CLI 面孔)。不带 hash 默认发布全部 direct roots;
|
|
8
|
+
* hub 现行为:PENDING/APPROVED 的重复 submit 幂等(免二审),仅 REJECTED 名单 409。ref 支持短哈希:
|
|
9
|
+
* 本地工作区解析,未命中回落我在 hub 上的认领前缀(唯一匹配才收)。
|
|
6
10
|
*/
|
|
7
|
-
export async function
|
|
8
|
-
return runLifecycle(opts, 'submit', '
|
|
11
|
+
export async function runPublish(opts) {
|
|
12
|
+
return runLifecycle(opts, 'submit', 'published');
|
|
9
13
|
}
|
|
10
14
|
/**
|
|
11
15
|
* practi unpublish [hash]:撤回待审 / 下架已公开(PENDING_REVIEW|PUBLISHED → PRIVATE,退出公开检索)。
|
|
12
|
-
* POST /api/v1/pop/:ref/unpublish。
|
|
16
|
+
* POST /api/v1/pop/:ref/unpublish。ref 同样支持短哈希。
|
|
13
17
|
*/
|
|
14
18
|
export async function runUnpublish(opts) {
|
|
15
19
|
return runLifecycle(opts, 'unpublish', 'unpublished');
|
|
16
20
|
}
|
|
17
21
|
/**
|
|
18
|
-
* practi
|
|
19
|
-
* DELETE /api/v1/pop/:ref。必须显式给 hash
|
|
22
|
+
* practi remove <hash> --remote:删除自己在 remote 上的 DIRECT 认领(无认领的文档被硬删除)。
|
|
23
|
+
* DELETE /api/v1/pop/:ref。必须显式给 hash(不做默认全删);短哈希与 publish 同规
|
|
24
|
+
* (本地工作区解析 → 我在 hub 的认领前缀兜底)。纯远端操作,本地工作区不动,
|
|
20
25
|
* 再次 push 同内容会重建(新行,PRIVATE)。
|
|
21
26
|
*/
|
|
22
27
|
export async function runDelete(opts) {
|
|
23
28
|
if (opts.positional.length === 0) {
|
|
24
|
-
console.error('usage: practi
|
|
29
|
+
console.error('usage: practi remove <hash> --remote (explicit hash required — no default; hash prefix OK)');
|
|
25
30
|
return 1;
|
|
26
31
|
}
|
|
27
32
|
return runLifecycle(opts, undefined, 'deleted');
|
|
28
33
|
}
|
|
34
|
+
/** 短哈希解析:全哈希直过;否则先本地工作区(resolveNodeRef,本地歧义即报),
|
|
35
|
+
* 未命中再回落我在 hub 上的认领做前缀唯一匹配——两条登记簿都可能藏着这篇文档。 */
|
|
36
|
+
export async function resolveClaimRef(dataDir, remoteUrl, ref) {
|
|
37
|
+
const hex = ref.replace(/^sha256:/i, '').toLowerCase();
|
|
38
|
+
if (/^[0-9a-f]{64}$/.test(hex))
|
|
39
|
+
return `sha256:${hex}`;
|
|
40
|
+
if (!/^[0-9a-f]{4,63}$/.test(hex)) {
|
|
41
|
+
throw new Error(`"${ref}" is not a hash (full or ≥4-hex prefix)`);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
return resolveNodeRef(openWorkspace(dataDir), ref);
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
if (e instanceof PracticeError && e.code === 'E_AMBIGUOUS')
|
|
48
|
+
throw e;
|
|
49
|
+
// 本地没有(含未初始化工作区):hub 认领表兜底
|
|
50
|
+
const mine = await fetchMine(dataDir, remoteUrl);
|
|
51
|
+
const hits = mine.filter((r) => r.root_hash.startsWith(`sha256:${hex}`));
|
|
52
|
+
if (hits.length === 0) {
|
|
53
|
+
throw new Error(`${ref} is neither in the local workspace nor among your remote claims`);
|
|
54
|
+
}
|
|
55
|
+
if (hits.length > 1) {
|
|
56
|
+
throw new Error(`hash prefix "${ref}" matches ${hits.length} of your remote claims — give more hex`);
|
|
57
|
+
}
|
|
58
|
+
return hits[0].root_hash;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
29
61
|
async function runLifecycle(opts, action, // undefined → DELETE
|
|
30
62
|
verb) {
|
|
31
63
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
@@ -34,11 +66,29 @@ verb) {
|
|
|
34
66
|
console.error('error: no remote configured — run `practi remote set <url>` first');
|
|
35
67
|
return 1;
|
|
36
68
|
}
|
|
37
|
-
|
|
69
|
+
let refs;
|
|
70
|
+
if (opts.positional[0]) {
|
|
71
|
+
// 三种动作(publish/unpublish/remove --remote)共用同一套 ref 解析:全哈希直过
|
|
72
|
+
// (带不带 sha256: 均可),≥4 位前缀先本地工作区、未命中回落我在 hub 的认领
|
|
73
|
+
try {
|
|
74
|
+
refs = [await resolveClaimRef(dataDir, state.remote.url, opts.positional[0])];
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
console.error(`error: ${e.message}`);
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (action === undefined) {
|
|
82
|
+
console.error('usage: practi remove <hash> --remote (explicit hash required — no default; hash prefix OK)');
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
refs = state.direct; // 默认全部 direct(本来就是全哈希)
|
|
87
|
+
}
|
|
38
88
|
if (refs.length === 0) {
|
|
39
89
|
console.error(action
|
|
40
|
-
? 'error: no direct pops to ' + action + ' (none registered)'
|
|
41
|
-
: 'usage: practi
|
|
90
|
+
? 'error: no direct pops to ' + (action === 'submit' ? 'publish' : action) + ' (none registered)'
|
|
91
|
+
: 'usage: practi remove <hash> --remote');
|
|
42
92
|
return 1;
|
|
43
93
|
}
|
|
44
94
|
let failed = 0;
|
|
@@ -57,7 +107,7 @@ verb) {
|
|
|
57
107
|
failed++;
|
|
58
108
|
continue;
|
|
59
109
|
}
|
|
60
|
-
console.log(`${verb}: ${body.root_hash ?? ref} (${body.status ??
|
|
110
|
+
console.log(body.status ? `${verb}: ${body.root_hash ?? ref} (${body.status})` : `${verb}: ${body.root_hash ?? ref}`);
|
|
61
111
|
}
|
|
62
112
|
catch (e) {
|
|
63
113
|
console.error(`${verb} failed: ${ref} — ${e.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/cmd/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/cmd/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/login.js
CHANGED
|
@@ -6,6 +6,7 @@ import { authedFetch, validAccessToken, HubUnreachableError } from '../client.js
|
|
|
6
6
|
* practi login:OAuth 2.1 Authorization Code + PKCE(loopback 回调)登录 practihub。
|
|
7
7
|
* 浏览器授权 → 换 access+refresh token → 凭证存 $dataDir/practi.auth.json(独立于 workspace 状态)。
|
|
8
8
|
* 之后命令自动用 refresh token 续期(rotation),无需再次交互。
|
|
9
|
+
* --reauth:已登录时不必先 logout——一步重换凭据(revoke 是 best-effort,不阻塞)。
|
|
9
10
|
*/
|
|
10
11
|
export async function runLogin(opts) {
|
|
11
12
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
@@ -17,27 +18,35 @@ export async function runLogin(opts) {
|
|
|
17
18
|
const remote = state.remote.url;
|
|
18
19
|
const resource = cliResource(remote);
|
|
19
20
|
const existing = loadCredentials(dataDir);
|
|
20
|
-
if (existing) {
|
|
21
|
+
if (opts.reauth === true && existing) {
|
|
22
|
+
const revokeTarget = existing.resource && existing.resource !== resource
|
|
23
|
+
? existing.resource.replace(/\/cli$/, '')
|
|
24
|
+
: remote;
|
|
25
|
+
await revokeToken(revokeTarget, existing.client_id, existing.refresh_token, 'refresh_token');
|
|
26
|
+
deleteCredentials(dataDir);
|
|
27
|
+
console.log('logged out');
|
|
28
|
+
}
|
|
29
|
+
else if (existing) {
|
|
21
30
|
if (existing.resource && existing.resource !== resource) {
|
|
22
31
|
// 凭据由另一个 hub 签发,对当前 remote 无用——清掉直接走新登录
|
|
23
32
|
console.error(`note: stored credentials were issued for ${existing.resource}, not ${resource} — clearing them`);
|
|
24
33
|
deleteCredentials(dataDir);
|
|
25
34
|
}
|
|
26
35
|
else if (isAccessTokenFresh(existing)) {
|
|
27
|
-
console.error('error: already logged in —
|
|
36
|
+
console.error('error: already logged in — use `practi login --reauth` (or logout first)');
|
|
28
37
|
return 1;
|
|
29
38
|
}
|
|
30
39
|
else {
|
|
31
40
|
// access 已过期:探一次 refresh。被拒=凭据已死,自动清除后继续;连不上=生死未知,保留并退出
|
|
32
41
|
try {
|
|
33
42
|
await validAccessToken(dataDir, remote);
|
|
34
|
-
console.error('error: already logged in —
|
|
43
|
+
console.error('error: already logged in — use `practi login --reauth` (or logout first)');
|
|
35
44
|
return 1;
|
|
36
45
|
}
|
|
37
46
|
catch (e) {
|
|
38
47
|
if (e instanceof HubUnreachableError) {
|
|
39
48
|
console.error(`error: already logged in, but the session cannot be verified — ${e.message}`);
|
|
40
|
-
console.error('
|
|
49
|
+
console.error(' use `practi login --reauth` to force a fresh session');
|
|
41
50
|
return 1;
|
|
42
51
|
}
|
|
43
52
|
console.error(`note: stored credentials are dead — clearing them (${e.message})`);
|
package/dist/cmd/login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cmd/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACtH,OAAO,EACL,WAAW,EACX,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cmd/login.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/ls.js
CHANGED
|
@@ -2,7 +2,10 @@ import { aggregateView } from '@arshdelight/pop-sdk';
|
|
|
2
2
|
import { defaultDataDir, loadState } from '../state.js';
|
|
3
3
|
import { openWorkspace } from '../workspace.js';
|
|
4
4
|
import { renderSteps, shortHash, viewHeader } from '../render.js';
|
|
5
|
-
|
|
5
|
+
import { fetchMine } from '../client.js';
|
|
6
|
+
export async function runLs(opts) {
|
|
7
|
+
if (opts.remote === true)
|
|
8
|
+
return remoteLs(opts);
|
|
6
9
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
7
10
|
const ws = openWorkspace(dataDir);
|
|
8
11
|
const state = loadState(dataDir);
|
|
@@ -10,13 +13,15 @@ export function runLs(opts) {
|
|
|
10
13
|
const direct = state.direct.filter(h => ws.nodes.has(h));
|
|
11
14
|
const directSet = new Set(state.direct);
|
|
12
15
|
const indirect = [...ws.nodes.keys()].filter(h => !directSet.has(h));
|
|
16
|
+
// 注册在列但节点文件缺失/损坏的根:不无痕消失,进 JSON 的 unresolved(加法键,仅非空时出现)
|
|
17
|
+
const unresolved = state.direct.filter(h => !ws.nodes.has(h));
|
|
13
18
|
if (opts.json) {
|
|
14
19
|
const views = direct.map(h => aggregateView(h, ws.nodes));
|
|
15
20
|
const indirectNodes = indirect.map(h => {
|
|
16
21
|
const n = ws.nodes.get(h);
|
|
17
22
|
return { hash: h, name: n.name, type: n.type, ...(n.type === 'practice' ? { op: n.op } : {}) };
|
|
18
23
|
});
|
|
19
|
-
console.log(JSON.stringify({ direct: views, indirect: indirectNodes }, null, 2));
|
|
24
|
+
console.log(JSON.stringify({ direct: views, indirect: indirectNodes, ...(unresolved.length > 0 ? { unresolved } : {}) }, null, 2));
|
|
20
25
|
return 0;
|
|
21
26
|
}
|
|
22
27
|
if (direct.length === 0) {
|
|
@@ -56,4 +61,38 @@ export function runLs(opts) {
|
|
|
56
61
|
}
|
|
57
62
|
return 0;
|
|
58
63
|
}
|
|
64
|
+
/** --remote:列「我在 hub 上的认领」(fetchMine)——与本地 ls 同为 direct 清单语义,
|
|
65
|
+
* 只是登记簿换成远端那本。-a 是本地专属(hub 不提供间接节点视图),组合即拒。 */
|
|
66
|
+
async function remoteLs(opts) {
|
|
67
|
+
if (opts.all) {
|
|
68
|
+
console.error('error: -a is local-only — the hub lists your direct claims (no indirect view)');
|
|
69
|
+
return 1;
|
|
70
|
+
}
|
|
71
|
+
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
72
|
+
const state = loadState(dataDir);
|
|
73
|
+
if (!state.remote) {
|
|
74
|
+
console.error('error: no remote configured — run `practi remote set <url>` first');
|
|
75
|
+
return 1;
|
|
76
|
+
}
|
|
77
|
+
let mine;
|
|
78
|
+
try {
|
|
79
|
+
mine = await fetchMine(dataDir, state.remote.url);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
console.error(`error: ${e.message}`);
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
if (opts.json) {
|
|
86
|
+
console.log(JSON.stringify({ remote: state.remote.url, direct: mine }, null, 2));
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
if (mine.length === 0) {
|
|
90
|
+
console.log('(no remote claims — push one with `practi push`)');
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
for (const r of mine) {
|
|
94
|
+
console.log(`${shortHash(r.root_hash)} [${r.status}] ${r.name ?? ''}`);
|
|
95
|
+
}
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
59
98
|
//# sourceMappingURL=ls.js.map
|
package/dist/cmd/ls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/cmd/ls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/cmd/ls.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/migrate.js
CHANGED
|
@@ -129,6 +129,9 @@ export function runMigrate(opts) {
|
|
|
129
129
|
}
|
|
130
130
|
if (toIsConvention) {
|
|
131
131
|
console.log(`next run: the default data dir resolves to ${to} (convention location)`);
|
|
132
|
+
if (process.env.PRACTI_HOME || process.env.POP_HOME) {
|
|
133
|
+
console.error(`warning: $${process.env.PRACTI_HOME ? 'PRACTI_HOME' : 'POP_HOME'} is set and OUTRANKS the convention — unset it or repoint it at ${to}, or every bare command keeps resolving to the deleted directory`);
|
|
134
|
+
}
|
|
132
135
|
}
|
|
133
136
|
else {
|
|
134
137
|
try {
|
package/dist/cmd/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cmd/migrate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cmd/migrate.ts"],"names":[],"mappings":"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"}
|