@easysociable/cli 0.1.6 → 0.1.8
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.
|
@@ -492,10 +492,11 @@ User wants a tracked job: "开一单", "open a run", "按完整流程", or a mul
|
|
|
492
492
|
### Platform gate (required before folder create)
|
|
493
493
|
|
|
494
494
|
1. User already named platform(s) → use them.
|
|
495
|
-
2. Else **ask
|
|
496
|
-
3.
|
|
497
|
-
4. **
|
|
498
|
-
5.
|
|
495
|
+
2. Else **stop and ask a required multi-select platform question**. Offer the account’s `platforms` from `accounts/_index` plus any supported platforms the user may name: `x`, `linkedin`, `instagram`, `tiktok`, `threads`, `xiaohongshu`. The user must be able to select one or more.
|
|
496
|
+
3. Do not create a folder, row, brief, or draft before the platform selection is answered.
|
|
497
|
+
4. **Do not** silently default to `x` when opening a run (default `x` still applies to other flows, e.g. watchlist filter).
|
|
498
|
+
5. **N platforms selected → N runs** (same topic/goal/pillar; independent platform craft, brief, draft, editor, rubric, and ship state).
|
|
499
|
+
6. Slug: include the platform when N>1 or always OK — e.g. `2026-08-26-angle-x`, `…-linkedin`.
|
|
499
500
|
|
|
500
501
|
### Load platform craft (required — every run, every draft stage)
|
|
501
502
|
|
|
@@ -732,7 +732,7 @@
|
|
|
732
732
|
brand: "观察台",
|
|
733
733
|
search: "搜索 ID、一句话、来源…",
|
|
734
734
|
overview: "总览", needs: "需求库", hits: "Hits", products: "产品库", recommendations: "推荐库", topics: "选题库", notes: "记录与知识", runs: "Run 档案", pub: "发布与复盘",
|
|
735
|
-
notes_in: "记下的",
|
|
735
|
+
notes_in: "记下的", notes_lib: "进库的",
|
|
736
736
|
lead: "先认 IP,再看库存。",
|
|
737
737
|
kpi_cap: "记下的", kpi_needs: "需求", kpi_hits: "Hits", kpi_lib: "进库的", kpi_topics: "选题", kpi_out: "下场",
|
|
738
738
|
kpi_cap_sub: "Capture", kpi_needs_sub: "Needs 原话", kpi_lib_sub: "Swipe / Atom / Claim",
|
|
@@ -881,7 +881,7 @@
|
|
|
881
881
|
brand: "Observatory",
|
|
882
882
|
search: "Search ID, one-liner, source…",
|
|
883
883
|
overview: "Overview", needs: "Needs", hits: "Hits", products: "Products", recommendations: "Recommendations", topics: "Topics", notes: "Notes & library", runs: "Run files", pub: "Shipped & review",
|
|
884
|
-
notes_in: "Captured",
|
|
884
|
+
notes_in: "Captured", notes_lib: "Catalog",
|
|
885
885
|
lead: "Pick an IP, then inspect the stock.",
|
|
886
886
|
kpi_cap: "Captured", kpi_needs: "Needs", kpi_hits: "Hits", kpi_lib: "Catalog", kpi_topics: "Topics", kpi_out: "Outcomes",
|
|
887
887
|
kpi_cap_sub: "Capture", kpi_needs_sub: "Audience quotes", kpi_lib_sub: "Swipe / Atom / Claim",
|
|
@@ -2198,9 +2198,10 @@
|
|
|
2198
2198
|
|
|
2199
2199
|
function renderNotes() {
|
|
2200
2200
|
$list.innerHTML = "";
|
|
2201
|
+
if (notesTab === "needs") notesTab = "notes";
|
|
2201
2202
|
const sub = document.createElement("div");
|
|
2202
2203
|
sub.className = "subtabs";
|
|
2203
|
-
sub.innerHTML = `<button data-t="notes">${t("notes_in")}</button><button data-t="
|
|
2204
|
+
sub.innerHTML = `<button data-t="notes">${t("notes_in")}</button><button data-t="lib">${t("notes_lib")}</button>`;
|
|
2204
2205
|
$list.appendChild(sub);
|
|
2205
2206
|
sub.querySelectorAll("button").forEach(b => b.classList.toggle("on", b.dataset.t === notesTab));
|
|
2206
2207
|
sub.onclick = (e) => {
|
|
@@ -2232,10 +2233,6 @@
|
|
|
2232
2233
|
$list.appendChild(cards);
|
|
2233
2234
|
return;
|
|
2234
2235
|
}
|
|
2235
|
-
if (notesTab === "needs") {
|
|
2236
|
-
renderNeedsList($list);
|
|
2237
|
-
return;
|
|
2238
|
-
}
|
|
2239
2236
|
const items = GRAPH.nodes.filter(n => n.lib && inScope(n));
|
|
2240
2237
|
const subtypeOf = (n) => n.atom_type || n.form || n.claim_type || "";
|
|
2241
2238
|
const kinds = [...new Set(items.map(n => n.kind))];
|