@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/new.js
CHANGED
|
@@ -2,6 +2,8 @@ import fs from 'node:fs';
|
|
|
2
2
|
import { createFromDoc, loadWorkspace, validateWorkspace } from '@arshdelight/pop-sdk';
|
|
3
3
|
import { claimDirect, defaultDataDir, loadState, saveState } from '../state.js';
|
|
4
4
|
import { openWorkspace } from '../workspace.js';
|
|
5
|
+
import { runPublish } from './lifecycle.js';
|
|
6
|
+
import { storeDocumentRemote } from '../client.js';
|
|
5
7
|
function readStdin() {
|
|
6
8
|
return fs.readFileSync(0, 'utf8');
|
|
7
9
|
}
|
|
@@ -9,8 +11,18 @@ function readStdin() {
|
|
|
9
11
|
* Create a POP from a JSON document: --json '<text>', <file.json>, or stdin
|
|
10
12
|
* (all machine/AI friendly — no editor loop). Validates through the SDK,
|
|
11
13
|
* persists the content-addressed tree, and registers the root as direct.
|
|
14
|
+
*
|
|
15
|
+
* --remote switches the whole creation to the hub: the authoring JSON goes to
|
|
16
|
+
* the existing POST /api/v1/pop (the hub runs the same SDK parse + hashing),
|
|
17
|
+
* nothing is written locally. --publish additionally submits for review and
|
|
18
|
+
* requires --remote (publishing needs the document on the hub first).
|
|
12
19
|
*/
|
|
13
|
-
export function runNew(opts) {
|
|
20
|
+
export async function runNew(opts) {
|
|
21
|
+
// 旗标组合的语义错误先于 IO 报(missing.json --publish 应报 --publish requires --remote 而非 ENOENT)
|
|
22
|
+
if (opts.publish === true && opts.remote !== true) {
|
|
23
|
+
console.error('error: --publish requires --remote — publishing needs the document on the hub first');
|
|
24
|
+
return 1;
|
|
25
|
+
}
|
|
14
26
|
let text;
|
|
15
27
|
if (opts.json !== undefined)
|
|
16
28
|
text = opts.json;
|
|
@@ -22,6 +34,7 @@ export function runNew(opts) {
|
|
|
22
34
|
text = readStdin();
|
|
23
35
|
if (text === undefined || text.trim() === '') {
|
|
24
36
|
console.error('usage: practi new <file.json> | practi new --json \'<json text>\' | practi new < file.json');
|
|
37
|
+
console.error(' [--remote (create on the hub only)] [--publish (submit for review; requires --remote)]');
|
|
25
38
|
return 1;
|
|
26
39
|
}
|
|
27
40
|
let doc;
|
|
@@ -33,6 +46,12 @@ export function runNew(opts) {
|
|
|
33
46
|
return 1;
|
|
34
47
|
}
|
|
35
48
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
49
|
+
if (opts.remote === true)
|
|
50
|
+
return remoteNew(opts, dataDir, doc);
|
|
51
|
+
return localNew(dataDir, doc);
|
|
52
|
+
}
|
|
53
|
+
/** 本地默认路:SDK 校验 → 内容寻址落盘 → 注册 direct。 */
|
|
54
|
+
function localNew(dataDir, doc) {
|
|
36
55
|
const ws = openWorkspace(dataDir);
|
|
37
56
|
const { root, count } = createFromDoc(ws, doc);
|
|
38
57
|
const issues = validateWorkspace(loadWorkspace(dataDir));
|
|
@@ -47,9 +66,37 @@ export function runNew(opts) {
|
|
|
47
66
|
console.error(` ${i.code}: ${i.message}${i.hint ? ` (${i.hint})` : ''}`);
|
|
48
67
|
}
|
|
49
68
|
console.error(`warning: stored but NOT registered as direct — ${issues.length} validation issue(s)`);
|
|
69
|
+
return 1; // 存了但没注册成=没办成正事,与 edit 同类失败及 --remote 的服务端 422 对齐
|
|
70
|
+
}
|
|
71
|
+
console.log('status: valid, registered as direct');
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
/** --remote:只有远端——创作 JSON 直送现有 POST /api/v1/pop(hub 委托官方 SDK 解析、
|
|
75
|
+
* 规范化、算 root_hash 并认领,默认 PRIVATE),本地零写入,root 由服务端告知。
|
|
76
|
+
* 注意:远端独占的文档下一次 practi pull 会拉回本地(它就是 hub 上你的认领),
|
|
77
|
+
* 本地 ls/show/web/note 也看不见它。--publish 再链 submit 送审。 */
|
|
78
|
+
async function remoteNew(opts, dataDir, doc) {
|
|
79
|
+
const state = loadState(dataDir);
|
|
80
|
+
if (!state.remote) {
|
|
81
|
+
console.error('error: no remote configured — run `practi remote set <url>` first');
|
|
82
|
+
return 1;
|
|
83
|
+
}
|
|
84
|
+
let stored;
|
|
85
|
+
try {
|
|
86
|
+
stored = await storeDocumentRemote(dataDir, state.remote.url, doc);
|
|
50
87
|
}
|
|
51
|
-
|
|
52
|
-
console.
|
|
88
|
+
catch (e) {
|
|
89
|
+
console.error(`error: remote create failed — ${e.message}`);
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
console.log(`created: ${stored.rootHash} (on the hub — it parsed and hashed the tree; nothing written locally)`);
|
|
93
|
+
console.log(`status: ${stored.status}, claimed${stored.idempotent ? ' (already existed)' : ''}`);
|
|
94
|
+
if (opts.publish === true) {
|
|
95
|
+
const code = await runPublish({ dataDir, positional: [stored.rootHash] });
|
|
96
|
+
if (code !== 0) {
|
|
97
|
+
console.error('publish: submit failed — the document is created on the hub (PRIVATE); run `practi publish <hash>` after fixing');
|
|
98
|
+
return 1;
|
|
99
|
+
}
|
|
53
100
|
}
|
|
54
101
|
return 0;
|
|
55
102
|
}
|
package/dist/cmd/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/cmd/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,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":"new.js","sourceRoot":"","sources":["../../src/cmd/new.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/note.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { resolveNodeRef } from '@arshdelight/pop-sdk';
|
|
2
|
+
import { defaultDataDir, loadState } from '../state.js';
|
|
3
|
+
import { openWorkspace } from '../workspace.js';
|
|
4
|
+
import { shortHash } from '../render.js';
|
|
5
|
+
import { loadNotes, insertNote, updateNote, removeNote, subtreeHashes } from '../notes.js';
|
|
6
|
+
const USAGE = `usage: practi note add|list|edit|delete
|
|
7
|
+
practi note add <node> -m "<笔记内容>" [--json]
|
|
8
|
+
把学习/复现笔记钉在节点哈希上(前缀 OK;本地记录,不上传)
|
|
9
|
+
practi note list [hash] [--json]
|
|
10
|
+
无参=全部笔记(按所属文档分组);hash=只看该节点子树内的笔记
|
|
11
|
+
practi note edit <note-id> -m "<新内容>" [--json]
|
|
12
|
+
practi note delete <note-id>`;
|
|
13
|
+
export function runNote(opts) {
|
|
14
|
+
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
15
|
+
const sub = opts.positional[0];
|
|
16
|
+
switch (sub) {
|
|
17
|
+
case 'add':
|
|
18
|
+
return noteAdd(opts, dataDir);
|
|
19
|
+
case 'list':
|
|
20
|
+
return noteList(opts, dataDir);
|
|
21
|
+
case 'edit':
|
|
22
|
+
return noteEdit(opts, dataDir);
|
|
23
|
+
case 'delete':
|
|
24
|
+
return noteDelete(opts, dataDir);
|
|
25
|
+
default:
|
|
26
|
+
console.error(USAGE);
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function noteAdd(opts, dataDir) {
|
|
31
|
+
const target = opts.positional[1];
|
|
32
|
+
if (!target || !opts.message || !opts.message.trim()) {
|
|
33
|
+
console.error('usage: practi note add <node> -m "<笔记内容>"');
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
// 存在性校验兼前缀解析:笔记必须钉在工作区已有的节点上(挡手滑哈希)
|
|
37
|
+
const ws = openWorkspace(dataDir);
|
|
38
|
+
const hash = resolveNodeRef(ws, target);
|
|
39
|
+
const note = insertNote(dataDir, hash, opts.message);
|
|
40
|
+
if (opts.json) {
|
|
41
|
+
console.log(JSON.stringify(note, null, 2));
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
console.log(`noted on ${shortHash(hash)} — id ${note.id}`);
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
function noteList(opts, dataDir) {
|
|
48
|
+
const target = opts.positional[1];
|
|
49
|
+
const file = loadNotes(dataDir);
|
|
50
|
+
let notes = file.notes;
|
|
51
|
+
if (target) {
|
|
52
|
+
const ws = openWorkspace(dataDir);
|
|
53
|
+
const hash = resolveNodeRef(ws, target);
|
|
54
|
+
const set = subtreeHashes(ws, hash);
|
|
55
|
+
notes = notes.filter(n => set.has(n.hash));
|
|
56
|
+
}
|
|
57
|
+
if (opts.json) {
|
|
58
|
+
// 机器窗:按存入顺序(时间正序)平铺,不分组——分组是人看的
|
|
59
|
+
console.log(JSON.stringify(notes, null, 2));
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
if (notes.length === 0) {
|
|
63
|
+
console.log(target ? 'no notes in this subtree' : 'no notes');
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
if (target) {
|
|
67
|
+
const ws2 = openWorkspace(dataDir);
|
|
68
|
+
printNotes(notes, h => ws2.nodes.get(h)?.name ?? shortHash(h));
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
// 无参:按所属文档分组(组内时间正序=学习轨迹,组按最新笔记倒序=最近在学的在前);
|
|
72
|
+
// 钉在已 GC/换根孤儿上的笔记归入悬空组殿后
|
|
73
|
+
const ws = openWorkspace(dataDir);
|
|
74
|
+
const state = loadState(dataDir);
|
|
75
|
+
const claimed = new Set();
|
|
76
|
+
const groups = [];
|
|
77
|
+
for (const root of state.direct) {
|
|
78
|
+
if (!ws.nodes.has(root))
|
|
79
|
+
continue;
|
|
80
|
+
const set = subtreeHashes(ws, root);
|
|
81
|
+
const items = notes.filter(n => set.has(n.hash));
|
|
82
|
+
if (!items.length)
|
|
83
|
+
continue;
|
|
84
|
+
for (const n of items)
|
|
85
|
+
claimed.add(n.id);
|
|
86
|
+
groups.push({ title: groupTitle(ws, root), items });
|
|
87
|
+
}
|
|
88
|
+
const dangling = notes.filter(n => !claimed.has(n.id));
|
|
89
|
+
if (dangling.length) {
|
|
90
|
+
groups.push({ title: `dangling (${dangling.length})`, items: dangling });
|
|
91
|
+
}
|
|
92
|
+
groups.sort((a, b) => newest(b.items).localeCompare(newest(a.items)));
|
|
93
|
+
for (const g of groups) {
|
|
94
|
+
console.log(`\n${g.title}`);
|
|
95
|
+
printNotes(g.items, h => ws.nodes.get(h)?.name ?? shortHash(h));
|
|
96
|
+
}
|
|
97
|
+
return 0;
|
|
98
|
+
}
|
|
99
|
+
function groupTitle(ws, root) {
|
|
100
|
+
const node = ws.nodes.get(root);
|
|
101
|
+
const tag = node ? (node.type === 'practice' ? `practice·${node.op}` : 'action') : '';
|
|
102
|
+
return `${node?.name ?? '?'} [${tag}] ${shortHash(root)}`;
|
|
103
|
+
}
|
|
104
|
+
function newest(items) {
|
|
105
|
+
return items.reduce((acc, n) => (n.createdAt > acc ? n.createdAt : acc), '');
|
|
106
|
+
}
|
|
107
|
+
function printNotes(notes, label) {
|
|
108
|
+
for (const n of notes) {
|
|
109
|
+
console.log(` ${n.id} ${fmtLocal(n.createdAt)} ${label(n.hash)}`);
|
|
110
|
+
for (const line of n.content.split('\n'))
|
|
111
|
+
console.log(` ${line}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** ISO → 本地时区 YYYY-MM-DD HH:mm(个人日记口径:时间属于看的人) */
|
|
115
|
+
function fmtLocal(iso) {
|
|
116
|
+
const d = new Date(iso);
|
|
117
|
+
if (Number.isNaN(d.getTime()))
|
|
118
|
+
return iso;
|
|
119
|
+
const p = (x) => (x < 10 ? '0' : '') + x;
|
|
120
|
+
return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;
|
|
121
|
+
}
|
|
122
|
+
function reportMutation(id, m) {
|
|
123
|
+
if (!m.ok) {
|
|
124
|
+
if (m.reason === 'not_found')
|
|
125
|
+
console.error(`error: note "${id}" not found`);
|
|
126
|
+
else
|
|
127
|
+
console.error(`error: note id prefix "${id}" matches ${m.matches} notes`);
|
|
128
|
+
return 1;
|
|
129
|
+
}
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
132
|
+
function noteEdit(opts, dataDir) {
|
|
133
|
+
const id = opts.positional[1];
|
|
134
|
+
if (!id || !opts.message || !opts.message.trim()) {
|
|
135
|
+
console.error('usage: practi note edit <note-id> -m "<新内容>"');
|
|
136
|
+
return 1;
|
|
137
|
+
}
|
|
138
|
+
const m = updateNote(dataDir, id, opts.message);
|
|
139
|
+
if (!m.ok)
|
|
140
|
+
return reportMutation(id, m);
|
|
141
|
+
if (opts.json) {
|
|
142
|
+
console.log(JSON.stringify(m.note, null, 2));
|
|
143
|
+
return 0;
|
|
144
|
+
}
|
|
145
|
+
console.log(`note ${m.note.id} edited`);
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
function noteDelete(opts, dataDir) {
|
|
149
|
+
const id = opts.positional[1];
|
|
150
|
+
if (!id) {
|
|
151
|
+
console.error('usage: practi note delete <note-id>');
|
|
152
|
+
return 1;
|
|
153
|
+
}
|
|
154
|
+
const m = removeNote(dataDir, id);
|
|
155
|
+
if (!m.ok)
|
|
156
|
+
return reportMutation(id, m);
|
|
157
|
+
console.log(`note ${m.note.id} deleted`);
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=note.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note.js","sourceRoot":"","sources":["../../src/cmd/note.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/push.js
CHANGED
|
@@ -7,7 +7,7 @@ import { authedFetch, fetchMine } from '../client.js';
|
|
|
7
7
|
* - 先分页取 hub 上「我的」认领表(mine),diff 出本地认领而 hub 我还没认领的,
|
|
8
8
|
* 只传这些(带 hash 只推该 direct;不带推全部 direct)——不再全量 POST。
|
|
9
9
|
* - 走 POST /api/v1/pop(内容寻址幂等):hub 没有就存,有则 idempotent 不重复写,
|
|
10
|
-
* 且每次上传都获得 DIRECT 认领。默认存为 PRIVATE;公开仍需
|
|
10
|
+
* 且每次上传都获得 DIRECT 认领。默认存为 PRIVATE;公开仍需 practi publish 送审。
|
|
11
11
|
*/
|
|
12
12
|
export async function runPush(opts) {
|
|
13
13
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
@@ -45,6 +45,11 @@ export async function runPush(opts) {
|
|
|
45
45
|
failed++;
|
|
46
46
|
continue;
|
|
47
47
|
}
|
|
48
|
+
if (!state.direct.includes(resolved)) {
|
|
49
|
+
console.error(`push failed: ${ref} — ${resolved} is not one of your direct pops (push exports YOUR direct roots; indirect nodes travel inside them)`);
|
|
50
|
+
failed++;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
48
53
|
if (!mineHashes.has(resolved))
|
|
49
54
|
toPush.push(resolved);
|
|
50
55
|
}
|
package/dist/cmd/push.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/cmd/push.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/cmd/push.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd/remote.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { defaultDataDir, loadState, saveState } from '../state.js';
|
|
1
|
+
import { defaultDataDir, DEFAULT_REMOTE_URL, loadState, saveState } from '../state.js';
|
|
2
2
|
import { loadCredentials, deleteCredentials } from '../credentials.js';
|
|
3
3
|
import { cliResource, revokeToken } from '../oauth.js';
|
|
4
|
+
/** practi remote set / remove。看当前挂靠用 `practi config`(remote show 已砍——与 config 重复)。 */
|
|
4
5
|
export async function runRemote(opts) {
|
|
5
6
|
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
6
7
|
const state = loadState(dataDir);
|
|
7
|
-
const action = opts.positional[0]
|
|
8
|
+
const action = opts.positional[0];
|
|
8
9
|
switch (action) {
|
|
9
10
|
case 'set': {
|
|
10
11
|
const url = opts.positional[1];
|
|
@@ -33,15 +34,21 @@ export async function runRemote(opts) {
|
|
|
33
34
|
case 'remove': {
|
|
34
35
|
delete state.remote;
|
|
35
36
|
saveState(dataDir, state);
|
|
36
|
-
console.log(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
console.log(`remote removed — falls back to the official hub (${DEFAULT_REMOTE_URL})`);
|
|
38
|
+
// 与 set 同规:换回官方 hub 时,自建 hub 签发的凭据已无用——revoke(best-effort)并清除
|
|
39
|
+
const creds = loadCredentials(dataDir);
|
|
40
|
+
if (creds && creds.resource && creds.resource !== cliResource(DEFAULT_REMOTE_URL)) {
|
|
41
|
+
const oldOrigin = creds.resource.replace(/\/cli$/, '');
|
|
42
|
+
if (oldOrigin)
|
|
43
|
+
await revokeToken(oldOrigin, creds.client_id, creds.refresh_token, 'refresh_token');
|
|
44
|
+
deleteCredentials(dataDir);
|
|
45
|
+
console.log(`note: cleared credentials issued by ${oldOrigin} — run \`practi login\` against ${DEFAULT_REMOTE_URL}`);
|
|
46
|
+
}
|
|
41
47
|
return 0;
|
|
42
48
|
}
|
|
43
49
|
default:
|
|
44
|
-
console.error(
|
|
50
|
+
console.error('error: missing action — set or remove');
|
|
51
|
+
console.error('usage: practi remote set <url> | remove (see the current remote with `practi config`)');
|
|
45
52
|
return 1;
|
|
46
53
|
}
|
|
47
54
|
}
|
package/dist/cmd/remote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/cmd/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/cmd/remote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { loadWorkspace, resolveNodeRef, nodeFilePath } from '@arshdelight/pop-sdk';
|
|
3
|
+
import { defaultDataDir, loadState, saveState } from '../state.js';
|
|
4
|
+
import { openWorkspace } from '../workspace.js';
|
|
5
|
+
import { collectUnreachable } from './edit.js';
|
|
6
|
+
import { runDelete } from './lifecycle.js';
|
|
7
|
+
import { shortHash } from '../render.js';
|
|
8
|
+
export async function runRemove(opts) {
|
|
9
|
+
if (opts.remote === true) {
|
|
10
|
+
return runDelete({ dataDir: opts.dataDir, positional: opts.positional.slice(0, 1) }); // 一命令一认领,多给的不静默连删
|
|
11
|
+
}
|
|
12
|
+
const ref = opts.positional[0];
|
|
13
|
+
if (!ref) {
|
|
14
|
+
console.error('usage: practi remove <hash> (take a direct pop out of the local directory; unreachable nodes are GCed)');
|
|
15
|
+
console.error(' practi remove <hash> --remote (withdraw the claim on the remote instead)');
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
const dataDir = opts.dataDir ?? defaultDataDir();
|
|
19
|
+
const state = loadState(dataDir);
|
|
20
|
+
const ws = openWorkspace(dataDir);
|
|
21
|
+
const root = resolveNodeRef(ws, ref);
|
|
22
|
+
if (!state.direct.includes(root)) {
|
|
23
|
+
console.error(`error: ${root} is not one of your direct pops — remove takes a direct root out of the local directory;`);
|
|
24
|
+
console.error(' indirect nodes live inside direct trees (`practi ls -a`), leave by removing their root');
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
state.direct = state.direct.filter((h) => h !== root);
|
|
28
|
+
saveState(dataDir, state); // claims 修剪在写盘口:被删根的认领时刻随之失效
|
|
29
|
+
console.log(`removed: ${root} from the local directory`);
|
|
30
|
+
const dead = collectUnreachable(loadWorkspace(dataDir), state.direct);
|
|
31
|
+
for (const h of dead)
|
|
32
|
+
fs.unlinkSync(nodeFilePath(dataDir, h));
|
|
33
|
+
console.log(`gc: removed ${dead.length} unreachable node(s)${dead.length > 0 ? ` — ${dead.map(shortHash).join(', ')}` : ''}`);
|
|
34
|
+
if (dead.length > 0) {
|
|
35
|
+
console.log('hint: blobs stay with their bytes — `practi gc` sweeps orphans when you want');
|
|
36
|
+
}
|
|
37
|
+
if (state.remote) {
|
|
38
|
+
console.log(`remote: the hub copy (if pushed) stays — withdraw with \`practi remove ${shortHash(root)} --remote\``);
|
|
39
|
+
}
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/cmd/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAiBzC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;IAC1G,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,0GAA0G,CAAC,CAAC;QAC1H,OAAO,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACnG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,0FAA0F,CAAC,CAAC;QACxH,OAAO,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;QAC/G,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACtD,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,6BAA6B;IACxD,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,2BAA2B,CAAC,CAAC;IAE1D,MAAM,IAAI,GAAG,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtE,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CACT,qBAAqB,IAAI,CAAC,MAAM,uBAAuB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACvH,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,4EAA4E,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/cmd/repair.js
CHANGED
|
@@ -28,7 +28,7 @@ export function runRepair(opts) {
|
|
|
28
28
|
saveState(dataDir, state);
|
|
29
29
|
console.log(`claims: ${already} already stamped, ${backfilled} backfilled from file time, ${unrepairable.length} unrepairable`);
|
|
30
30
|
for (const h of unrepairable)
|
|
31
|
-
console.
|
|
31
|
+
console.error(` no local node file: ${h}`);
|
|
32
32
|
return unrepairable.length > 0 ? 1 : 0;
|
|
33
33
|
}
|
|
34
34
|
//# sourceMappingURL=repair.js.map
|
package/dist/cmd/repair.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair.js","sourceRoot":"","sources":["../../src/cmd/repair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM9D;;;qCAGqC;AACrC,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;IACjD,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,UAAU,EAAE,CAAC;IACf,CAAC;IACD,IAAI,UAAU,GAAG,CAAC;QAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,qBAAqB,UAAU,+BAA+B,YAAY,CAAC,MAAM,eAAe,CAAC,CAAC;IAClI,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"repair.js","sourceRoot":"","sources":["../../src/cmd/repair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM9D;;;qCAGqC;AACrC,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC;IACjD,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QACD,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,UAAU,EAAE,CAAC;IACf,CAAC;IACD,IAAI,UAAU,GAAG,CAAC;QAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,qBAAqB,UAAU,+BAA+B,YAAY,CAAC,MAAM,eAAe,CAAC,CAAC;IAClI,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
|