@easysociable/cli 0.1.2 → 0.1.4

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.
Files changed (148) hide show
  1. package/README.md +32 -21
  2. package/{skills/easysociable-content → content-engine}/scripts/starter.mjs +3 -1
  3. package/{skills/easysociable-content → content-engine}/scripts/workbench.mjs +13 -8
  4. package/{skills/easysociable-content → content-engine}/starter/CLAUDE.md +217 -128
  5. package/{skills/easysociable-content → content-engine}/starter/engine.json +3 -0
  6. package/content-engine/starter/needs/README.md +38 -0
  7. package/content-engine/starter/needs/_index.md +31 -0
  8. package/content-engine/starter/needs/_template.md +24 -0
  9. package/content-engine/starter/needs/entries/README.md +5 -0
  10. package/content-engine/starter/products/README.md +38 -0
  11. package/content-engine/starter/products/_index.md +24 -0
  12. package/content-engine/starter/products/_template.md +56 -0
  13. package/content-engine/starter/products/entries/P-001-easysociable.md +150 -0
  14. package/content-engine/starter/profiles/_index.md +16 -0
  15. package/{skills/easysociable-content → content-engine}/starter/profiles/default/README.md +4 -1
  16. package/content-engine/starter/profiles/default/boundaries.md +14 -0
  17. package/content-engine/starter/profiles/default/expression.md +18 -0
  18. package/content-engine/starter/profiles/default/lanes.md +12 -0
  19. package/content-engine/starter/profiles/default/stories.md +15 -0
  20. package/{skills/easysociable-content → content-engine}/starter/profiles/default/voice.md +14 -0
  21. package/content-engine/starter/recommendations/README.md +21 -0
  22. package/content-engine/starter/recommendations/_index.md +21 -0
  23. package/content-engine/starter/recommendations/_template.md +44 -0
  24. package/{skills/easysociable-content → content-engine}/starter/runs/_template/brief.md +1 -1
  25. package/{skills/easysociable-content → content-engine}/starter/runs/_template/pack.md +15 -7
  26. package/{skills/easysociable-content → content-engine}/starter/runs/_template/packet.md +6 -0
  27. package/{skills/easysociable-content → content-engine}/starter/swipe/_template.md +3 -1
  28. package/content-engine/starter/topics/README.md +21 -0
  29. package/{skills/easysociable-content → content-engine}/starter/topics/_index.md +12 -5
  30. package/content-engine/starter/topics/_template-item.md +103 -0
  31. package/{skills/easysociable-content → content-engine}/starter/topics/scoring.md +55 -4
  32. package/content-engine/workbench/__pycache__/build.cpython-310.pyc +0 -0
  33. package/{skills/easysociable-content → content-engine}/workbench/build.py +306 -97
  34. package/{skills/easysociable-content → content-engine}/workbench/serve.py +0 -0
  35. package/{skills/easysociable-content → content-engine}/workbench/template.html +173 -27
  36. package/dist/easysociable.js +629 -142
  37. package/dist/easysociable.js.map +1 -1
  38. package/package.json +15 -15
  39. package/skills/ONBOARDING.md +21 -18
  40. package/skills/easysociable-content/SKILL.md +104 -98
  41. package/skills/easysociable-content/workflows/INTERVIEW.md +70 -0
  42. package/skills/easysociable-content/workflows/NEEDS.md +82 -0
  43. package/skills/easysociable-slideshow/SKILL.md +79 -44
  44. package/skills/easysociable-slideshow/references/ARC.md +44 -0
  45. package/skills/easysociable-slideshow/references/CONTENT_PACK.md +34 -6
  46. package/skills/easysociable-slideshow/workflows/CREATE_RUN.md +24 -5
  47. package/skills/easysociable-slideshow/workflows/OUT_OF_SCOPE.md +3 -0
  48. package/skills/easysociable-template/SKILL.md +29 -30
  49. package/skills/easysociable-template/references/CATALOG_METADATA.md +23 -20
  50. package/skills/easysociable-template/references/DESIGN_V2_1.md +53 -2
  51. package/skills/easysociable-template/references/GATEWAY.md +7 -2
  52. package/skills/easysociable-template/references/PLATFORM_SPECS.md +11 -3
  53. package/skills/easysociable-template/references/THEME_TOKENS.md +1 -1
  54. package/skills/easysociable-template/references/fixtures/image-reference.design-plan.json +74 -0
  55. package/skills/easysociable-template/references/fixtures/image-reference.visual-qa.json +28 -0
  56. package/skills/easysociable-template/scripts/generate-theme-from-hex.mjs +0 -0
  57. package/skills/easysociable-template/scripts/validate-design-v2.mjs +97 -0
  58. package/skills/easysociable-template/workflows/ASSET_PLAN.md +2 -1
  59. package/skills/easysociable-template/workflows/AUTHORING_FROM_BRIEF.md +4 -4
  60. package/skills/easysociable-template/workflows/AUTHORING_FROM_IMAGE.md +66 -16
  61. package/skills/easysociable-template/workflows/AUTHORING_STUDIO.md +28 -15
  62. package/skills/easysociable-template/workflows/DESIGN_BRIEF.md +4 -3
  63. package/skills/easysociable-template/workflows/FILL_AND_RENDER.md +4 -83
  64. package/skills/easysociable-template/workflows/MULTI_PLATFORM_FAMILY.md +81 -0
  65. package/skills/easysociable-template/workflows/OUT_OF_SCOPE.md +3 -2
  66. package/skills/easysociable-template/workflows/PUBLISH_FROM_DRAFT.md +1 -1
  67. package/skills/easysociable-template/workflows/VISUAL_QA.md +10 -0
  68. package/skills/easysociable-content/INSTALL.md +0 -60
  69. package/skills/easysociable-content/platforms/claude.md +0 -4
  70. package/skills/easysociable-content/platforms/codex.md +0 -4
  71. package/skills/easysociable-content/platforms/hermes.md +0 -4
  72. package/skills/easysociable-content/platforms/openclaw.md +0 -4
  73. package/skills/easysociable-content/references/CLI.md +0 -40
  74. package/skills/easysociable-content/references/CONTRACT_SYNC.md +0 -42
  75. package/skills/easysociable-content/references/MCP.md +0 -15
  76. package/skills/easysociable-content/references/PAGE_PACK.md +0 -129
  77. package/skills/easysociable-content/references/PLATFORM_GUIDE.md +0 -36
  78. package/skills/easysociable-content/references/RUN_LAYOUT.md +0 -73
  79. package/skills/easysociable-content/references/TROUBLESHOOTING.md +0 -13
  80. package/skills/easysociable-content/references/VAULT.md +0 -40
  81. package/skills/easysociable-content/references/VOICE.md +0 -16
  82. package/skills/easysociable-content/scripts/package-skill.mjs +0 -49
  83. package/skills/easysociable-content/scripts/setup.mjs +0 -200
  84. package/skills/easysociable-content/scripts/setup.test.mjs +0 -82
  85. package/skills/easysociable-content/starter/discovery/README.md +0 -18
  86. package/skills/easysociable-content/starter/discovery/_index.md +0 -27
  87. package/skills/easysociable-content/starter/discovery/_template.md +0 -41
  88. package/skills/easysociable-content/starter/profiles/_index.md +0 -13
  89. package/skills/easysociable-content/starter/topics/README.md +0 -25
  90. package/skills/easysociable-content/starter/topics/WATCHLIST.md +0 -65
  91. package/skills/easysociable-content/starter/topics/_template-item.md +0 -90
  92. package/skills/easysociable-content/starter/topics/watchlists/README.md +0 -10
  93. package/skills/easysociable-content/starter/topics/watchlists/_shared.md +0 -14
  94. package/skills/easysociable-content/starter/topics/watchlists/default.md +0 -6
  95. package/skills/easysociable-content/workflows/ANALYSIS_AND_COVERAGE.md +0 -17
  96. package/skills/easysociable-content/workflows/CONTENT_EXPORT.md +0 -24
  97. package/skills/easysociable-content/workflows/GETTING_STARTED.md +0 -40
  98. package/skills/easysociable-content/workflows/MCP_FIRST.md +0 -5
  99. package/skills/easysociable-content/workflows/OUT_OF_SCOPE.md +0 -18
  100. package/skills/easysociable-content/workflows/PACK_AUTHORING.md +0 -42
  101. package/skills/easysociable-content/workflows/SWIPE_CAPTURE.md +0 -18
  102. package/skills/easysociable-content/workflows/TOPIC_DRAFT.md +0 -29
  103. package/skills/easysociable-content/workflows/WORKING_DRAFT.md +0 -19
  104. /package/{skills/easysociable-content → content-engine}/fixtures/golden-run-en/draft.md +0 -0
  105. /package/{skills/easysociable-content → content-engine}/fixtures/golden-run-en/idea.md +0 -0
  106. /package/{skills/easysociable-content → content-engine}/fixtures/golden-run-en/pack-tiktok.json +0 -0
  107. /package/{skills/easysociable-content → content-engine}/scripts/contracts.mjs +0 -0
  108. /package/{skills/easysociable-content → content-engine}/scripts/export-contracts.mjs +0 -0
  109. /package/{skills/easysociable-content → content-engine}/scripts/fixture.test.mjs +0 -0
  110. /package/{skills/easysociable-content → content-engine}/scripts/validate-export.mjs +0 -0
  111. /package/{skills/easysociable-content → content-engine}/scripts/validate-pack.mjs +0 -0
  112. /package/{skills/easysociable-content → content-engine}/scripts/validate-run.mjs +0 -0
  113. /package/{skills/easysociable-content → content-engine}/scripts/validate.test.mjs +0 -0
  114. /package/{skills/easysociable-content → content-engine}/starter/accounts/README.md +0 -0
  115. /package/{skills/easysociable-content → content-engine}/starter/accounts/_index.md +0 -0
  116. /package/{skills/easysociable-content → content-engine}/starter/accounts/overrides/README.md +0 -0
  117. /package/{skills/easysociable-content → content-engine}/starter/exports/README.md +0 -0
  118. /package/{skills/easysociable-content → content-engine}/starter/inbox/README.md +0 -0
  119. /package/{skills/easysociable-content → content-engine}/starter/inbox/_index.md +0 -0
  120. /package/{skills/easysociable-content → content-engine}/starter/inbox/entries/README.md +0 -0
  121. /package/{skills/easysociable-content → content-engine}/starter/platforms/README.md +0 -0
  122. /package/{skills/easysociable-content → content-engine}/starter/platforms/ig.md +0 -0
  123. /package/{skills/easysociable-content → content-engine}/starter/platforms/instagram.md +0 -0
  124. /package/{skills/easysociable-content → content-engine}/starter/platforms/linkedin.md +0 -0
  125. /package/{skills/easysociable-content → content-engine}/starter/platforms/threads.md +0 -0
  126. /package/{skills/easysociable-content → content-engine}/starter/platforms/tiktok.md +0 -0
  127. /package/{skills/easysociable-content → content-engine}/starter/platforms/x.md +0 -0
  128. /package/{skills/easysociable-content → content-engine}/starter/platforms/xiaohongshu.md +0 -0
  129. /package/{skills/easysociable-content → content-engine}/starter/profiles/default/audience.md +0 -0
  130. /package/{skills/easysociable-content → content-engine}/starter/profiles/default/pillars.md +0 -0
  131. /package/{skills/easysociable-content → content-engine}/starter/published/_index.md +0 -0
  132. /package/{skills/easysociable-content → content-engine}/starter/raw/README.md +0 -0
  133. /package/{skills/easysociable-content → content-engine}/starter/raw/_index.md +0 -0
  134. /package/{skills/easysociable-content → content-engine}/starter/runs/README.md +0 -0
  135. /package/{skills/easysociable-content → content-engine}/starter/runs/_index.md +0 -0
  136. /package/{skills/easysociable-content → content-engine}/starter/runs/_template/draft.md +0 -0
  137. /package/{skills/easysociable-content → content-engine}/starter/runs/_template/editor.md +0 -0
  138. /package/{skills/easysociable-content → content-engine}/starter/runs/_template/feedback.md +0 -0
  139. /package/{skills/easysociable-content → content-engine}/starter/runs/_template/idea.md +0 -0
  140. /package/{skills/easysociable-content → content-engine}/starter/runs/_template/rubric.md +0 -0
  141. /package/{skills/easysociable-content → content-engine}/starter/swipe/_index.md +0 -0
  142. /package/{skills/easysociable-content → content-engine}/starter/topics/items/README.md +0 -0
  143. /package/{skills/easysociable-content → content-engine}/starter/wiki/README.md +0 -0
  144. /package/{skills/easysociable-content → content-engine}/starter/wiki/atoms/_index.md +0 -0
  145. /package/{skills/easysociable-content → content-engine}/starter/wiki/atoms/_template.md +0 -0
  146. /package/{skills/easysociable-content → content-engine}/starter/wiki/claims/_index.md +0 -0
  147. /package/{skills/easysociable-content → content-engine}/starter/wiki/claims/_template.md +0 -0
  148. /package/{skills/easysociable-content → content-engine}/starter/workbench/README.md +0 -0
package/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # EasySociable CLI
2
2
 
3
- Agent-first CLI and MCP host for EasySociable Template and Slideshow V1.
4
- Gateway-only: no Local API, SQLite, or local renderer.
3
+ Agent-first CLI for EasySociable: local Content Engine, Template, Slideshow, and MCP.
5
4
 
6
5
  ```bash
7
6
  npm i -g @easysociable/cli
@@ -9,25 +8,44 @@ npm i -g @easysociable/cli
9
8
  curl -fsSL https://easysociable.com/install.sh | bash
10
9
  ```
11
10
 
12
- Requires Node.js 20+.
11
+ Requires Node.js 20+. Content Engine workbench also needs `python3`.
13
12
 
14
13
  ## Quick start
15
14
 
16
15
  ```bash
16
+ # Default skills + MCP for Codex / Claude Code (template + slideshow)
17
17
  easysociable install --yes
18
- # Tell your Agent what to make.
19
- # Sign up and run auth login only when Gateway asks for it.
20
18
  ```
21
19
 
22
- Default `install` copies **Template + Slideshow** Skills and registers the
23
- unified MCP for Codex / Claude Code. Opt into the Obsidian Content Skill later:
20
+ Default install does **not** include `easysociable-content`. Add it when you want the Content Engine pointer skill:
24
21
 
25
22
  ```bash
26
- easysociable install --skills content --yes
23
+ easysociable install --skills content,template,slideshow --yes
24
+ easysociable engine init --root /workspace --yes
25
+ easysociable engine serve --engine /workspace/Content Engine --no-open
27
26
  ```
28
27
 
29
- Lazy-auth guidance for Agents lives in the package at `skills/ONBOARDING.md`
30
- (also installed into your host skills directory by `easysociable install`).
28
+ Then tell the Agent to follow `Content Engine/CLAUDE.md`. The starter includes
29
+ separate `products/` (owned offers) and `recommendations/` (third-party review
30
+ subjects) libraries; neither is a substitute for `needs/`.
31
+
32
+ Lazy-auth guidance lives in the package at `skills/ONBOARDING.md`.
33
+
34
+ ## Content Engine
35
+
36
+ | Command | Purpose |
37
+ |---------|---------|
38
+ | `easysociable engine init [--root] [--yes] [--serve]` | Scaffold starter (never overwrites) |
39
+ | `easysociable engine serve [--engine] [--no-open]` | Sync workbench runtime from CLI, rebuild, start on `:8765` |
40
+ | `easysociable engine build [--engine]` | Sync workbench runtime from CLI, then rebuild `workbench/index.html` |
41
+ | `easysociable engine detect` | Find engines under search roots |
42
+ | `easysociable engine validate --root …` | Starter completeness |
43
+ | `easysociable engine validate --run …` | Run / pack checks before render |
44
+
45
+ The Workbench exposes Products and Recommendations as separate read-only
46
+ indexes. Topics can cite either one without forcing a product connection.
47
+
48
+ Default `--root` / `--engine` parent is `/workspace` when that directory exists, otherwise the current working directory.
31
49
 
32
50
  ## Authentication
33
51
 
@@ -38,26 +56,19 @@ easysociable templates list --json
38
56
  easysociable mcp serve --transport stdio
39
57
  ```
40
58
 
41
- Human-readable diagnostics go to stderr. With `--json`, stdout is only the
42
- versioned JSON envelope.
43
-
44
- ## Common commands
59
+ ## Other commands
45
60
 
46
61
  | Command | Purpose |
47
62
  |---------|---------|
48
63
  | `easysociable install [--yes] [--skills list]` | Install Skills + MCP |
49
64
  | `easysociable update [--yes] [--skills list]` | Update Skills + MCP |
50
- | `easysociable auth login --api-key <key>` | Store Gateway credentials |
51
65
  | `easysociable templates …` | Page Template drafts / catalog |
52
- | `easysociable brands …` | Workspace Brands (fonts, colors, logo) |
53
- | `easysociable profiles …` | Deprecated — use `brands` |
54
- | `easysociable themes …` | Deprecated — use `brands` |
55
- | `easysociable slideshows …` | List, create, update and render Slideshow Runs |
66
+ | `easysociable brands …` | Workspace Brands |
67
+ | `easysociable slideshows …` | Slideshow Runs |
56
68
  | `easysociable renders …` | Single-page final render jobs |
57
69
  | `easysociable mcp serve --transport stdio` | Unified MCP server |
58
70
 
59
- `--skills` accepts comma-separated short names: `content`, `template`,
60
- `slideshow` (default: `template,slideshow`).
71
+ `--skills` accepts: `content`, `template`, `slideshow` (default: `template,slideshow`).
61
72
 
62
73
  ## License
63
74
 
@@ -11,7 +11,9 @@ export const ENGINE_PATHS = {
11
11
  runs: 'runs',
12
12
  exports: 'exports',
13
13
  topics: 'topics',
14
- discovery: 'discovery',
14
+ needs: 'needs',
15
+ products: 'products',
16
+ recommendations: 'recommendations',
15
17
  swipe: 'swipe',
16
18
  profiles: 'profiles',
17
19
  inbox: 'inbox',
@@ -30,21 +30,26 @@ export function portInUse(port = WORKBENCH_PORT) {
30
30
  })
31
31
  }
32
32
 
33
- export function ensureWorkbench(engine) {
33
+ /** `update: false` = init (missing only). `update: true` = build/serve refresh from package. */
34
+ export function ensureWorkbench(engine, { update = false } = {}) {
34
35
  const destDir = join(engine, 'workbench')
35
36
  mkdirSync(destDir, { recursive: true })
36
37
  const copied = []
38
+ const updated = []
37
39
  const skipped = []
38
40
  for (const name of WORKBENCH_FILES) {
39
41
  const dest = join(destDir, name)
40
- if (existsSync(dest)) {
42
+ const from = join(WORKBENCH_SRC, name)
43
+ if (existsSync(dest) && !update) {
41
44
  skipped.push(name)
42
45
  continue
43
46
  }
44
- copyFileSync(join(WORKBENCH_SRC, name), dest)
45
- copied.push(name)
47
+ const existed = existsSync(dest)
48
+ copyFileSync(from, dest)
49
+ if (existed) updated.push(name)
50
+ else copied.push(name)
46
51
  }
47
- return { destDir, copied, skipped }
52
+ return { destDir, copied, updated, skipped }
48
53
  }
49
54
 
50
55
  export function buildWorkbench(engine) {
@@ -68,7 +73,7 @@ export async function startWorkbench(engine, { noOpen = false } = {}) {
68
73
  if (!python) {
69
74
  return { ok: false, code: 'PYTHON3_REQUIRED', message: 'python3 is required for the workbench. Install Python 3 and retry.' }
70
75
  }
71
- ensureWorkbench(engine)
76
+ ensureWorkbench(engine, { update: true })
72
77
  const built = buildWorkbench(engine)
73
78
  if (!built.ok) return built
74
79
  const url = WORKBENCH_URL
@@ -112,9 +117,9 @@ async function main() {
112
117
  if (!options.engine) throw new Error('--engine is required')
113
118
  const engine = resolve(options.engine)
114
119
  if (options.command === 'build') {
115
- ensureWorkbench(engine)
120
+ const workbench = ensureWorkbench(engine, { update: true })
116
121
  const built = buildWorkbench(engine)
117
- output(built, options.json)
122
+ output({ workbench, ...built }, options.json)
118
123
  if (!built.ok) process.exitCode = 2
119
124
  return
120
125
  }