@synap-core/cli 1.11.0 → 1.12.2
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 +23 -198
- package/dist/build-info.json +6 -0
- package/dist/commands/agent-run.js +3 -2
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/agents.d.ts +33 -17
- package/dist/commands/agents.js +203 -237
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/app.d.ts +143 -0
- package/dist/commands/app.js +523 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/automate.d.ts +21 -0
- package/dist/commands/automate.js +42 -0
- package/dist/commands/automate.js.map +1 -0
- package/dist/commands/automation-schema.test.d.ts +16 -0
- package/dist/commands/automation-schema.test.js +77 -0
- package/dist/commands/automation-schema.test.js.map +1 -0
- package/dist/commands/automation.d.ts +12 -0
- package/dist/commands/automation.js +80 -35
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/bridge-setup.d.ts +14 -1
- package/dist/commands/bridge-setup.js +392 -128
- package/dist/commands/bridge-setup.js.map +1 -1
- package/dist/commands/cap-connections.d.ts +4 -4
- package/dist/commands/cap-connections.js +14 -14
- package/dist/commands/cap-connections.js.map +1 -1
- package/dist/commands/capability.d.ts +2 -0
- package/dist/commands/capability.js +218 -168
- package/dist/commands/capability.js.map +1 -1
- package/dist/commands/catalog.d.ts +275 -0
- package/dist/commands/catalog.js +481 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/cell.d.ts +155 -8
- package/dist/commands/cell.js +416 -40
- package/dist/commands/cell.js.map +1 -1
- package/dist/commands/centrality.js +1 -13
- package/dist/commands/centrality.js.map +1 -1
- package/dist/commands/connect.d.ts +38 -13
- package/dist/commands/connect.js +68 -167
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connections.d.ts +3 -2
- package/dist/commands/connections.js +95 -25
- package/dist/commands/connections.js.map +1 -1
- package/dist/commands/context.js +7 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +34 -0
- package/dist/commands/data-extra.js +193 -23
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.d.ts +120 -2
- package/dist/commands/data.js +293 -20
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/diagnose.d.ts +66 -4
- package/dist/commands/diagnose.js +285 -28
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/doc.d.ts +11 -4
- package/dist/commands/doc.js +39 -14
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/doctor.d.ts +112 -3
- package/dist/commands/doctor.js +657 -32
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/explain.js +5 -5
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/import.d.ts +368 -13
- package/dist/commands/import.js +1064 -54
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +20 -9
- package/dist/commands/init.js +433 -973
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +1 -0
- package/dist/commands/keys.js +15 -2
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/knowledge.d.ts +22 -6
- package/dist/commands/knowledge.js +117 -55
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/lens.d.ts +37 -1
- package/dist/commands/lens.js +192 -71
- package/dist/commands/lens.js.map +1 -1
- package/dist/commands/market-authoring.d.ts +29 -2
- package/dist/commands/market-authoring.js +348 -7
- package/dist/commands/market-authoring.js.map +1 -1
- package/dist/commands/market-official.d.ts +58 -0
- package/dist/commands/market-official.js +84 -0
- package/dist/commands/market-official.js.map +1 -0
- package/dist/commands/market.d.ts +400 -16
- package/dist/commands/market.js +1802 -146
- package/dist/commands/market.js.map +1 -1
- package/dist/commands/mcp.d.ts +60 -25
- package/dist/commands/mcp.js +251 -64
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/open.d.ts +39 -9
- package/dist/commands/open.js +80 -25
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/playbook.d.ts +42 -0
- package/dist/commands/playbook.js +162 -0
- package/dist/commands/playbook.js.map +1 -0
- package/dist/commands/pod.js +1 -1
- package/dist/commands/pod.js.map +1 -1
- package/dist/commands/pods.d.ts +5 -0
- package/dist/commands/pods.js +97 -116
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.d.ts +62 -0
- package/dist/commands/proposals-actions.js +143 -8
- package/dist/commands/proposals-actions.js.map +1 -1
- package/dist/commands/proposals-await.d.ts +68 -0
- package/dist/commands/proposals-await.js +248 -0
- package/dist/commands/proposals-await.js.map +1 -0
- package/dist/commands/proton-setup.d.ts +73 -0
- package/dist/commands/proton-setup.js +577 -0
- package/dist/commands/proton-setup.js.map +1 -0
- package/dist/commands/providers.d.ts +23 -0
- package/dist/commands/providers.js +126 -1
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/raycast.js +6 -2
- package/dist/commands/raycast.js.map +1 -1
- package/dist/commands/rule.d.ts +150 -0
- package/dist/commands/rule.js +447 -0
- package/dist/commands/rule.js.map +1 -0
- package/dist/commands/session-wait.d.ts +111 -0
- package/dist/commands/session-wait.js +209 -0
- package/dist/commands/session-wait.js.map +1 -0
- package/dist/commands/sessions.d.ts +52 -0
- package/dist/commands/sessions.js +478 -58
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skill-manage.d.ts +21 -0
- package/dist/commands/skill-manage.js +136 -19
- package/dist/commands/skill-manage.js.map +1 -1
- package/dist/commands/skills.js +16 -0
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/status.d.ts +1 -4
- package/dist/commands/status.js +5 -34
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.backoff.test.d.ts +13 -0
- package/dist/commands/statusline.backoff.test.js +100 -0
- package/dist/commands/statusline.backoff.test.js.map +1 -0
- package/dist/commands/statusline.js +16 -9
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/sync-status.d.ts +12 -0
- package/dist/commands/sync-status.js +125 -0
- package/dist/commands/sync-status.js.map +1 -0
- package/dist/commands/templates-retire.d.ts +34 -0
- package/dist/commands/templates-retire.js +192 -0
- package/dist/commands/templates-retire.js.map +1 -0
- package/dist/commands/tools.js +6 -21
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/tracks.d.ts +51 -0
- package/dist/commands/tracks.js +291 -0
- package/dist/commands/tracks.js.map +1 -0
- package/dist/commands/update.d.ts +3 -11
- package/dist/commands/update.js +5 -134
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/upload.d.ts +41 -3
- package/dist/commands/upload.js +120 -18
- package/dist/commands/upload.js.map +1 -1
- package/dist/commands/vendor.d.ts +28 -0
- package/dist/commands/vendor.js +110 -0
- package/dist/commands/vendor.js.map +1 -0
- package/dist/commands/versions.js +6 -0
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/view.js +10 -5
- package/dist/commands/view.js.map +1 -1
- package/dist/commands/whoami.d.ts +23 -3
- package/dist/commands/whoami.js +169 -23
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/worker.d.ts +122 -0
- package/dist/commands/worker.js +435 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/commands/worker.test.d.ts +1 -0
- package/dist/commands/worker.test.js +116 -0
- package/dist/commands/worker.test.js.map +1 -0
- package/dist/commands/workspace-ops.d.ts +35 -0
- package/dist/commands/workspace-ops.js +153 -0
- package/dist/commands/workspace-ops.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +900 -180
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-connections.d.ts +31 -0
- package/dist/lib/agent-connections.js +33 -0
- package/dist/lib/agent-connections.js.map +1 -0
- package/dist/lib/agent-detect.d.ts +27 -0
- package/dist/lib/agent-detect.js +71 -0
- package/dist/lib/agent-detect.js.map +1 -0
- package/dist/lib/agent-door.d.ts +138 -0
- package/dist/lib/agent-door.js +426 -0
- package/dist/lib/agent-door.js.map +1 -0
- package/dist/lib/agents-config.d.ts +2 -0
- package/dist/lib/agents-config.js +4 -9
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/approval-poll.d.ts +31 -2
- package/dist/lib/approval-poll.js +20 -7
- package/dist/lib/approval-poll.js.map +1 -1
- package/dist/lib/atomic-file.d.ts +48 -0
- package/dist/lib/atomic-file.js +129 -0
- package/dist/lib/atomic-file.js.map +1 -0
- package/dist/lib/auth.d.ts +14 -9
- package/dist/lib/auth.js +44 -61
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/batch-approval.d.ts +85 -0
- package/dist/lib/batch-approval.js +170 -0
- package/dist/lib/batch-approval.js.map +1 -0
- package/dist/lib/capture-lane.d.ts +6 -5
- package/dist/lib/capture-lane.js +6 -5
- package/dist/lib/capture-lane.js.map +1 -1
- package/dist/lib/capture-structure.d.ts +230 -11
- package/dist/lib/capture-structure.js +251 -13
- package/dist/lib/capture-structure.js.map +1 -1
- package/dist/lib/catalog-templates.d.ts +59 -0
- package/dist/lib/catalog-templates.js +126 -0
- package/dist/lib/catalog-templates.js.map +1 -0
- package/dist/lib/cli-build.d.ts +19 -0
- package/dist/lib/cli-build.js +37 -0
- package/dist/lib/cli-build.js.map +1 -0
- package/dist/lib/conversation-headers.d.ts +18 -0
- package/dist/lib/conversation-headers.js +32 -0
- package/dist/lib/conversation-headers.js.map +1 -0
- package/dist/lib/cp-packages.d.ts +167 -11
- package/dist/lib/cp-packages.js +253 -21
- package/dist/lib/cp-packages.js.map +1 -1
- package/dist/lib/credential-class.d.ts +117 -0
- package/dist/lib/credential-class.js +116 -0
- package/dist/lib/credential-class.js.map +1 -0
- package/dist/lib/describe-lens.d.ts +35 -0
- package/dist/lib/describe-lens.js +40 -0
- package/dist/lib/describe-lens.js.map +1 -1
- package/dist/lib/device-connect.d.ts +125 -0
- package/dist/lib/device-connect.js +256 -0
- package/dist/lib/device-connect.js.map +1 -0
- package/dist/lib/directory-lens.d.ts +99 -0
- package/dist/lib/directory-lens.js +187 -0
- package/dist/lib/directory-lens.js.map +1 -0
- package/dist/lib/exporter-coverage.d.ts +71 -0
- package/dist/lib/exporter-coverage.js +97 -0
- package/dist/lib/exporter-coverage.js.map +1 -0
- package/dist/lib/hub-client.d.ts +29 -8
- package/dist/lib/hub-client.js +328 -55
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/init-connect.d.ts +41 -0
- package/dist/lib/init-connect.js +75 -0
- package/dist/lib/init-connect.js.map +1 -0
- package/dist/lib/init-exit.d.ts +24 -0
- package/dist/lib/init-exit.js +41 -0
- package/dist/lib/init-exit.js.map +1 -0
- package/dist/lib/init-flow.d.ts +25 -0
- package/dist/lib/init-flow.js +40 -0
- package/dist/lib/init-flow.js.map +1 -0
- package/dist/lib/init-handoff.d.ts +16 -0
- package/dist/lib/init-handoff.js +19 -0
- package/dist/lib/init-handoff.js.map +1 -0
- package/dist/lib/init-output.d.ts +18 -0
- package/dist/lib/init-output.js +43 -0
- package/dist/lib/init-output.js.map +1 -0
- package/dist/lib/init-pod.d.ts +45 -0
- package/dist/lib/init-pod.js +36 -0
- package/dist/lib/init-pod.js.map +1 -0
- package/dist/lib/installed.d.ts +210 -11
- package/dist/lib/installed.js +234 -36
- package/dist/lib/installed.js.map +1 -1
- package/dist/lib/key-approval.d.ts +57 -0
- package/dist/lib/key-approval.js +117 -0
- package/dist/lib/key-approval.js.map +1 -0
- package/dist/lib/key-diagnosis.d.ts +56 -0
- package/dist/lib/key-diagnosis.js +227 -0
- package/dist/lib/key-diagnosis.js.map +1 -0
- package/dist/lib/key-doctor.d.ts +136 -0
- package/dist/lib/key-doctor.js +286 -0
- package/dist/lib/key-doctor.js.map +1 -0
- package/dist/lib/key-locations.d.ts +120 -0
- package/dist/lib/key-locations.js +326 -0
- package/dist/lib/key-locations.js.map +1 -0
- package/dist/lib/key-source.d.ts +66 -0
- package/dist/lib/key-source.js +106 -0
- package/dist/lib/key-source.js.map +1 -0
- package/dist/lib/key-state.d.ts +70 -0
- package/dist/lib/key-state.js +115 -0
- package/dist/lib/key-state.js.map +1 -0
- package/dist/lib/kind-package.d.ts +181 -0
- package/dist/lib/kind-package.js +679 -0
- package/dist/lib/kind-package.js.map +1 -0
- package/dist/lib/knowledge-title.d.ts +24 -0
- package/dist/lib/knowledge-title.js +46 -0
- package/dist/lib/knowledge-title.js.map +1 -0
- package/dist/lib/knowledge-title.test.d.ts +1 -0
- package/dist/lib/knowledge-title.test.js +34 -0
- package/dist/lib/knowledge-title.test.js.map +1 -0
- package/dist/lib/machine-instance.d.ts +64 -0
- package/dist/lib/machine-instance.js +142 -0
- package/dist/lib/machine-instance.js.map +1 -0
- package/dist/lib/mcp-bridge.d.ts +42 -0
- package/dist/lib/mcp-bridge.js +147 -0
- package/dist/lib/mcp-bridge.js.map +1 -0
- package/dist/lib/mcp-bridge.test.d.ts +1 -0
- package/dist/lib/mcp-bridge.test.js +90 -0
- package/dist/lib/mcp-bridge.test.js.map +1 -0
- package/dist/lib/mcp-call.d.ts +30 -0
- package/dist/lib/mcp-call.js +107 -0
- package/dist/lib/mcp-call.js.map +1 -0
- package/dist/lib/mcp-snippets.d.ts +53 -0
- package/dist/lib/mcp-snippets.js +82 -0
- package/dist/lib/mcp-snippets.js.map +1 -0
- package/dist/lib/next-steps.d.ts +8 -0
- package/dist/lib/next-steps.js +31 -1
- package/dist/lib/next-steps.js.map +1 -1
- package/dist/lib/package-wire.d.ts +179 -0
- package/dist/lib/package-wire.js +68 -0
- package/dist/lib/package-wire.js.map +1 -0
- package/dist/lib/pair-link.d.ts +38 -0
- package/dist/lib/pair-link.js +68 -0
- package/dist/lib/pair-link.js.map +1 -0
- package/dist/lib/pod-wide.d.ts +40 -0
- package/dist/lib/pod-wide.js +46 -0
- package/dist/lib/pod-wide.js.map +1 -0
- package/dist/lib/pod.d.ts +66 -112
- package/dist/lib/pod.js +134 -412
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/project-ref.d.ts +9 -3
- package/dist/lib/project-ref.js +10 -4
- package/dist/lib/project-ref.js.map +1 -1
- package/dist/lib/review-credential.d.ts +119 -0
- package/dist/lib/review-credential.js +147 -0
- package/dist/lib/review-credential.js.map +1 -0
- package/dist/lib/safe-open.d.ts +49 -0
- package/dist/lib/safe-open.js +119 -0
- package/dist/lib/safe-open.js.map +1 -0
- package/dist/lib/session-lens.d.ts +40 -1
- package/dist/lib/session-lens.js +54 -4
- package/dist/lib/session-lens.js.map +1 -1
- package/dist/lib/superwhisper-import.d.ts +8 -0
- package/dist/lib/superwhisper-import.js +14 -7
- package/dist/lib/superwhisper-import.js.map +1 -1
- package/dist/lib/superwhisper-title.test.d.ts +1 -0
- package/dist/lib/superwhisper-title.test.js +18 -0
- package/dist/lib/superwhisper-title.test.js.map +1 -0
- package/dist/lib/targets.d.ts +134 -10
- package/dist/lib/targets.js +962 -258
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/template-file.d.ts +4 -0
- package/dist/lib/template-file.js.map +1 -1
- package/dist/lib/template-lifecycle.d.ts +217 -0
- package/dist/lib/template-lifecycle.js +433 -0
- package/dist/lib/template-lifecycle.js.map +1 -0
- package/dist/lib/template-steps.d.ts +88 -0
- package/dist/lib/template-steps.js +118 -0
- package/dist/lib/template-steps.js.map +1 -0
- package/dist/lib/time-ago.d.ts +2 -0
- package/dist/lib/time-ago.js +15 -0
- package/dist/lib/time-ago.js.map +1 -0
- package/dist/utils/logger.js +5 -2
- package/dist/utils/logger.js.map +1 -1
- package/package.json +23 -17
- package/skills/README.md +12 -10
- package/skills/agent-os/SKILL.md +214 -99
- package/skills/manifest.json +1 -1
- package/skills/onboard/SKILL.md +55 -26
- package/skills/synap/README.md +5 -8
- package/skills/synap/SKILL.md +1086 -283
- package/skills/synap/_order.txt +7 -0
- package/skills/synap/_skill.yaml +1 -1
- package/skills/synap/automations.md +15 -0
- package/skills/synap/capture.md +5 -0
- package/skills/synap/cli-operations.md +24 -18
- package/skills/synap/concepts.md +28 -0
- package/skills/synap/content-os.md +10 -1
- package/skills/synap/creative-loop.md +15 -10
- package/skills/synap/crm.md +21 -52
- package/skills/synap/document-embeds.md +141 -47
- package/skills/synap/escalation-ladder.md +20 -10
- package/skills/synap/focus-sessions.md +47 -21
- package/skills/synap/from-intent.md +142 -0
- package/skills/synap/governance-rules.md +4 -4
- package/skills/synap/governance.md +10 -7
- package/skills/synap/hand-off.md +33 -0
- package/skills/synap/inline-patterns.md +15 -7
- package/skills/synap/lenses.md +33 -15
- package/skills/synap/linking.md +41 -40
- package/skills/synap/mcp-remote-servers.md +64 -0
- package/skills/synap/mental-model.md +17 -15
- package/skills/synap/operating-mode-rules.md +1 -1
- package/skills/synap/processes.md +118 -0
- package/skills/synap/quick-reference.md +5 -1
- package/skills/synap/reading.md +3 -1
- package/skills/synap/reflexes.md +12 -42
- package/skills/synap/viewframe-cells.md +38 -5
- package/skills/synap/work-flow.md +1 -1
- package/skills/synap/work-model.md +96 -0
- package/skills/synap/worked-examples.md +4 -5
- package/skills/synap/workspace-design.md +14 -10
- package/skills/synap/writes.md +97 -24
- package/skills/synap/writing-titles.md +63 -0
- package/skills/synap-app/SKILL.md +2 -2
- package/skills/synap-app/_skill.yaml +1 -1
- package/skills/synap-app/install-commands.md +1 -1
- package/skills/synap-design/SKILL.md +474 -0
- package/skills/synap-design/_order.txt +4 -0
- package/skills/synap-design/_skill.yaml +21 -0
- package/skills/synap-design/loop.md +134 -0
- package/skills/synap-design/overview.md +44 -0
- package/skills/synap-design/principles.md +130 -0
- package/skills/synap-design/system.md +133 -0
- package/skills/synap-market/SKILL.md +306 -16
- package/skills/synap-market/_skill.yaml +1 -1
- package/skills/synap-market/author-and-publish.md +145 -8
- package/skills/synap-market/governance-and-catalog.md +7 -0
- package/skills/synap-market/install.md +79 -1
- package/skills/synap-market/overview.md +74 -6
- package/skills/synap-schema/SKILL.md +172 -10
- package/skills/synap-schema/_order.txt +2 -0
- package/skills/synap-schema/_skill.yaml +4 -2
- package/skills/synap-schema/common-mistakes.md +4 -2
- package/skills/synap-schema/discover-profiles.md +1 -1
- package/skills/synap-schema/entity-scope.md +15 -3
- package/skills/synap-schema/extend-first.md +29 -0
- package/skills/synap-schema/extend-vs-create.md +1 -1
- package/skills/synap-schema/intent-vocabulary-ssot.md +111 -0
- package/skills/synap-schema/property-types.md +1 -1
- package/skills/synap-schema/relations.md +1 -1
- package/skills/synap-ui/SKILL.md +19 -12
- package/skills/synap-ui/_skill.yaml +1 -1
- package/skills/synap-ui/ai-companion.md +1 -1
- package/skills/synap-ui/arranging-bento.md +2 -0
- package/skills/synap-ui/bento-layouts.md +10 -10
- package/skills/synap-ui/bento-recipes.md +313 -543
- package/skills/synap-ui/four-builds.md +5 -0
- package/skills/synap-ui/view-types.md +2 -2
- package/skills/synap-ui/widget-catalog.md +22 -278
- package/templates/automations/bookmark-enrichment.automation.json +290 -13
- package/templates/automations/url-bookmark-capture.automation.json +73 -11
- package/templates/skills/authoring-playbooks/SKILL.md +6 -3
- package/templates/skills/authoring-playbooks/reference/stages-contract.md +15 -0
- package/templates/skills/authoring-playbooks/reference/worked-example.md +3 -0
- package/dist/commands/infra.d.ts +0 -21
- package/dist/commands/infra.js +0 -262
- package/dist/commands/infra.js.map +0 -1
- package/dist/commands/template.d.ts +0 -42
- package/dist/commands/template.js +0 -191
- package/dist/commands/template.js.map +0 -1
- package/dist/lib/browser-auth.d.ts +0 -35
- package/dist/lib/browser-auth.js +0 -170
- package/dist/lib/browser-auth.js.map +0 -1
- package/dist/lib/openclaw.d.ts +0 -32
- package/dist/lib/openclaw.js +0 -164
- package/dist/lib/openclaw.js.map +0 -1
- package/dist/lib/seed.d.ts +0 -13
- package/dist/lib/seed.js +0 -135
- package/dist/lib/seed.js.map +0 -1
- package/node_modules/@synap/hub-rest-client/dist/index.cjs +0 -1261
- package/node_modules/@synap/hub-rest-client/dist/index.d.cts +0 -1647
- package/node_modules/@synap/hub-rest-client/dist/index.d.ts +0 -1647
- package/node_modules/@synap/hub-rest-client/dist/index.js +0 -1231
- package/node_modules/@synap/hub-rest-client/package.json +0 -45
- package/node_modules/@synap/hub-rest-client/src/client.ts +0 -1631
- package/node_modules/@synap/hub-rest-client/src/errors.ts +0 -30
- package/node_modules/@synap/hub-rest-client/src/index.ts +0 -153
- package/node_modules/@synap/hub-rest-client/src/setup.ts +0 -133
- package/node_modules/@synap/hub-rest-client/src/types.ts +0 -1299
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `synap catalog validate|diff|publish [--kind k] [slug...] [--official] [--dry-run]`
|
|
3
|
+
* ==========================================================================
|
|
4
|
+
*
|
|
5
|
+
* The team's ONE door to the official catalog (every installable kind). This
|
|
6
|
+
* file is a THIN caller: loading, validation, the diff against the live
|
|
7
|
+
* catalog, the `synap-official` preflight and the POSTs are ONE lib in the
|
|
8
|
+
* monorepo checkout — `scripts/catalog-lib.mjs` of the catalog package
|
|
9
|
+
* (`@synap-core/catalog`, or `@synap-core/workspace-templates` before the
|
|
10
|
+
* rename). The surface this command relies on:
|
|
11
|
+
*
|
|
12
|
+
* loadCatalog({ root?, kinds?, slugs? }) → { entries, problems }
|
|
13
|
+
* validateCatalog(entries, { siblingRepos? }) → Problem[]
|
|
14
|
+
* diffCatalog(entries, { cpUrl, token? }) → DiffRow[]
|
|
15
|
+
* publishCatalog({ entries, cpUrl, token, official, dryRun, confirm }) → results[]
|
|
16
|
+
* checkPublisher({ cpUrl, token }) → { official, vendor?, reason? } (optional)
|
|
17
|
+
*
|
|
18
|
+
* ONE READ PATH: every kind — capabilities included — is read from the catalog
|
|
19
|
+
* package by `loadCatalog` (its default kind dirs). The CLI never reads the
|
|
20
|
+
* control-plane repo; the CP's capability JSON is only a guarded mirror now.
|
|
21
|
+
*
|
|
22
|
+
* ONE ERROR TABLE: every code the lib throws (and every refusal of this
|
|
23
|
+
* command) maps to ONE next step in `CATALOG_ERROR_HINTS`.
|
|
24
|
+
*
|
|
25
|
+
* `synap market publish --official` is an ALIAS of
|
|
26
|
+
* `synap catalog publish --official --kind workspace` — `marketPublishOfficial`
|
|
27
|
+
* calls `runCatalog` below; there is no second implementation.
|
|
28
|
+
*
|
|
29
|
+
* WHY THE CHECKOUT, NEVER THIS CLI'S BUNDLE: the CLI's npm copy of the
|
|
30
|
+
* templates package is older than the repo. Publishing from it would stamp
|
|
31
|
+
* stale content as official — so the lib is dynamic-imported from the checkout
|
|
32
|
+
* (found by `--catalog-dir`, else by walking up from cwd, identified by the
|
|
33
|
+
* package.json NAME).
|
|
34
|
+
*
|
|
35
|
+
* SHAPE CHECK: the lib lives in another repo and evolves on its own. A checkout
|
|
36
|
+
* whose lib is missing or exports a different shape is a clear refusal that
|
|
37
|
+
* names what is missing — never a `TypeError: x is not a function` crash.
|
|
38
|
+
*
|
|
39
|
+
* SAFETY (publish): validate → diff preview → confirm → publish. `--dry-run`
|
|
40
|
+
* stops after the preview and NEVER calls `publishCatalog`. Non-interactive
|
|
41
|
+
* without `--yes` refuses rather than guess.
|
|
42
|
+
*/
|
|
43
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
44
|
+
import { dirname, join, resolve as resolvePath } from "node:path";
|
|
45
|
+
import { pathToFileURL } from "node:url";
|
|
46
|
+
import { getCpUrl, getStoredToken, isTokenLocallyExpired } from "../lib/auth.js";
|
|
47
|
+
import { log } from "../utils/logger.js";
|
|
48
|
+
/** Package names the catalog checkout may carry (new name first). */
|
|
49
|
+
export const CATALOG_PACKAGE_NAMES = ["@synap-core/catalog", "@synap-core/workspace-templates"];
|
|
50
|
+
export const CATALOG_LIB_PATH = "scripts/catalog-lib.mjs";
|
|
51
|
+
export const CATALOG_KINDS = ["workspace", "capability", "skill", "pack", "automation"];
|
|
52
|
+
export const CATALOG_VERBS = ["validate", "diff", "publish"];
|
|
53
|
+
// ── One error table ─────────────────────────────────────────────────────────
|
|
54
|
+
/**
|
|
55
|
+
* Every code the catalog lib throws (`CatalogErrorCode` in the checkout's
|
|
56
|
+
* `scripts/catalog-lib.d.mts` — a tripwire keeps this list a superset) plus this
|
|
57
|
+
* command's own refusals, each mapped to ONE next step. The lib's message says
|
|
58
|
+
* WHAT happened (it carries the detail: stale slugs, the vendor found…); the
|
|
59
|
+
* hint says what to DO. Nowhere else in this command writes a remedy string.
|
|
60
|
+
*/
|
|
61
|
+
export const CATALOG_ERROR_HINTS = {
|
|
62
|
+
// The lib's codes.
|
|
63
|
+
"stale-build": "Rebuild the catalog package, then re-run: pnpm --filter @synap-core/workspace-templates build",
|
|
64
|
+
"invalid-template": "Fix the listed problems in the catalog files, then re-run: synap catalog validate",
|
|
65
|
+
"unknown-slug": "Check the slug — run: synap catalog validate --json to list every entry",
|
|
66
|
+
"not-logged-in": "Sign in to the control plane — run: synap login",
|
|
67
|
+
"not-official-publisher": "Sign in (synap login) with the account that owns the synap-official vendor",
|
|
68
|
+
"cp-unreachable": "The control plane did not answer — check your network / SYNAP_CP_URL and retry; nothing was published",
|
|
69
|
+
"live-read-failed": "A live catalog row could not be read — retry; nothing was published blind",
|
|
70
|
+
"not-confirmed": "The write was not confirmed — re-run and answer yes, or pass --yes",
|
|
71
|
+
"unsupported-runtime": "Switch Node: `nvm use 22` (22.18+), or 23.6+. Check which one runs with `which node && node -v`.",
|
|
72
|
+
// This command's own refusals.
|
|
73
|
+
usage: "Run: synap catalog --help",
|
|
74
|
+
"checkout-not-found": "Run from inside the Synap monorepo, or pass --catalog-dir (market publish: --templates-dir) <path to the catalog package>",
|
|
75
|
+
"lib-load-failed": "Pull synap-app (the checkout's catalog lib is missing, older or newer than this CLI)",
|
|
76
|
+
"lib-shape": "Pull synap-app (the checkout's catalog lib returned an unexpected shape)",
|
|
77
|
+
"confirmation-required": "Re-run with --dry-run to preview, or --yes to publish non-interactively",
|
|
78
|
+
};
|
|
79
|
+
/** The one next step for a code (an unknown code from a newer lib gets the pull hint). */
|
|
80
|
+
export function catalogErrorHint(code) {
|
|
81
|
+
return CATALOG_ERROR_HINTS[code] ?? CATALOG_ERROR_HINTS["lib-load-failed"];
|
|
82
|
+
}
|
|
83
|
+
const REQUIRED_EXPORTS = ["loadCatalog", "validateCatalog", "diffCatalog", "publishCatalog"];
|
|
84
|
+
/**
|
|
85
|
+
* The shape check. Returns the error message, or null when `mod` carries every
|
|
86
|
+
* function of the fixed interface.
|
|
87
|
+
*/
|
|
88
|
+
export function catalogLibShapeError(mod, libFile) {
|
|
89
|
+
const m = (mod ?? {});
|
|
90
|
+
const missing = REQUIRED_EXPORTS.filter((name) => typeof m[name] !== "function");
|
|
91
|
+
if (missing.length === 0)
|
|
92
|
+
return null;
|
|
93
|
+
return (`${libFile} does not export the catalog interface — missing or not a function: ${missing.join(", ")}. ` +
|
|
94
|
+
`Expected ${REQUIRED_EXPORTS.join(", ")}.`);
|
|
95
|
+
}
|
|
96
|
+
// ── Usage ───────────────────────────────────────────────────────────────────
|
|
97
|
+
/** A positional that is a path, not a slug (slugs are `[a-z][a-z0-9-]*`). */
|
|
98
|
+
export function looksLikeFile(arg) {
|
|
99
|
+
return /[./\\]/.test(arg);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Every combination that would otherwise be silently ignored is a usage error
|
|
103
|
+
* (exit 2). Returns the message, or null when valid.
|
|
104
|
+
*
|
|
105
|
+
* Default (named so it can be overridden): `publish` REQUIRES `--official` —
|
|
106
|
+
* the catalog is the official corpus; there is no other vendor that publishes
|
|
107
|
+
* it, so a non-official publish of it has no meaning yet.
|
|
108
|
+
*/
|
|
109
|
+
export function catalogUsageError(verb, slugs, opts) {
|
|
110
|
+
if (!CATALOG_VERBS.includes(verb)) {
|
|
111
|
+
return `Unknown catalog command "${verb}" — use one of: ${CATALOG_VERBS.join(", ")}.`;
|
|
112
|
+
}
|
|
113
|
+
if (opts.kind !== undefined && !CATALOG_KINDS.includes(opts.kind)) {
|
|
114
|
+
return `Unknown --kind "${opts.kind}" — use one of: ${CATALOG_KINDS.join(", ")}.`;
|
|
115
|
+
}
|
|
116
|
+
const file = slugs.find(looksLikeFile);
|
|
117
|
+
if (file) {
|
|
118
|
+
return `The catalog takes SLUGS, not a file ("${file}" looks like a path). To publish a file, use: synap market publish <file>.`;
|
|
119
|
+
}
|
|
120
|
+
if (verb !== "publish") {
|
|
121
|
+
const stray = [opts.official && "--official", opts.dryRun && "--dry-run", opts.yes && "--yes"].filter(Boolean);
|
|
122
|
+
if (stray.length > 0)
|
|
123
|
+
return `${stray.join(", ")} only apply to "synap catalog publish".`;
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
if (!opts.official) {
|
|
127
|
+
return "catalog publish writes the OFFICIAL catalog — pass --official (founder: a `synap login` session that owns the synap-official vendor).";
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
// ── Locating the checkout ───────────────────────────────────────────────────
|
|
132
|
+
function catalogPackageName(dir) {
|
|
133
|
+
const pj = join(dir, "package.json");
|
|
134
|
+
if (!existsSync(pj))
|
|
135
|
+
return null;
|
|
136
|
+
try {
|
|
137
|
+
const name = JSON.parse(readFileSync(pj, "utf8")).name;
|
|
138
|
+
return name && CATALOG_PACKAGE_NAMES.includes(name) ? name : null;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The catalog package dir of the monorepo checkout. `explicit` must BE that
|
|
146
|
+
* package; otherwise walk up from `cwd`, at each level trying the dir itself,
|
|
147
|
+
* `packages/catalog`, `packages/workspace-templates` (inside synap-app) and the
|
|
148
|
+
* same under `synap-app/` (monorepo root). Identity is the package.json `name`,
|
|
149
|
+
* never the path alone. `@synap-core/catalog` wins over the re-export shim.
|
|
150
|
+
*/
|
|
151
|
+
export function findCatalogDir(cwd, explicit) {
|
|
152
|
+
if (explicit) {
|
|
153
|
+
const dir = resolvePath(cwd, explicit);
|
|
154
|
+
return catalogPackageName(dir) ? dir : null;
|
|
155
|
+
}
|
|
156
|
+
let dir = resolvePath(cwd);
|
|
157
|
+
for (;;) {
|
|
158
|
+
const candidates = [
|
|
159
|
+
dir,
|
|
160
|
+
join(dir, "packages/catalog"),
|
|
161
|
+
join(dir, "packages/workspace-templates"),
|
|
162
|
+
join(dir, "synap-app/packages/catalog"),
|
|
163
|
+
join(dir, "synap-app/packages/workspace-templates"),
|
|
164
|
+
];
|
|
165
|
+
const named = candidates.filter((c) => catalogPackageName(c));
|
|
166
|
+
const preferred = named.find((c) => catalogPackageName(c) === CATALOG_PACKAGE_NAMES[0]) ?? named[0];
|
|
167
|
+
if (preferred)
|
|
168
|
+
return preferred;
|
|
169
|
+
const parent = dirname(dir);
|
|
170
|
+
if (parent === dir)
|
|
171
|
+
return null;
|
|
172
|
+
dir = parent;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
class CatalogLoadError extends Error {
|
|
176
|
+
code = "lib-load-failed";
|
|
177
|
+
}
|
|
178
|
+
/** Import the checkout's lib and shape-check it. Throws `CatalogLoadError`. */
|
|
179
|
+
export async function loadCatalogLib(catalogDir, importLib = (f) => import(pathToFileURL(f).href)) {
|
|
180
|
+
const libFile = join(catalogDir, CATALOG_LIB_PATH);
|
|
181
|
+
if (!existsSync(libFile)) {
|
|
182
|
+
throw new CatalogLoadError(`${libFile} not found — this checkout predates the one catalog lib.`);
|
|
183
|
+
}
|
|
184
|
+
let mod;
|
|
185
|
+
try {
|
|
186
|
+
mod = await importLib(libFile);
|
|
187
|
+
}
|
|
188
|
+
catch (e) {
|
|
189
|
+
throw new CatalogLoadError(`Could not load ${libFile}: ${e.message}`);
|
|
190
|
+
}
|
|
191
|
+
const shape = catalogLibShapeError(mod, libFile);
|
|
192
|
+
if (shape)
|
|
193
|
+
throw new CatalogLoadError(shape);
|
|
194
|
+
return mod;
|
|
195
|
+
}
|
|
196
|
+
async function readlineConfirm(question) {
|
|
197
|
+
const readline = await import("node:readline/promises");
|
|
198
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
199
|
+
try {
|
|
200
|
+
const answer = await rl.question(question);
|
|
201
|
+
return /^y(es)?$/i.test(answer.trim());
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
rl.close();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// ── Rendering ───────────────────────────────────────────────────────────────
|
|
208
|
+
function isError(p) {
|
|
209
|
+
return p.severity !== "warning";
|
|
210
|
+
}
|
|
211
|
+
function formatProblem(p) {
|
|
212
|
+
const where = [p.kind, p.slug].filter(Boolean).join("/") || p.path || "catalog";
|
|
213
|
+
return ` ${isError(p) ? "✗" : "!"} ${where}: ${p.message}`;
|
|
214
|
+
}
|
|
215
|
+
const STATUS_LABEL = {
|
|
216
|
+
new: "NEW ",
|
|
217
|
+
changed: "CHANGED ",
|
|
218
|
+
unchanged: "unchanged",
|
|
219
|
+
};
|
|
220
|
+
function shortValue(v) {
|
|
221
|
+
const text = JSON.stringify(v) ?? "null";
|
|
222
|
+
return text.length > 70 ? `${text.slice(0, 69)}…` : text;
|
|
223
|
+
}
|
|
224
|
+
/** Fallback for an older lib without `formatRetirement` — same facts, one line + reason. */
|
|
225
|
+
function fallbackRetirementLines(r) {
|
|
226
|
+
const target = r.replacedBy ? ` → ${r.replacedBy}` : " (no replacement)";
|
|
227
|
+
return [
|
|
228
|
+
` ${STATUS_LABEL[r.status] ?? r.status} retire ${r.kind}/${r.slug}${target}`,
|
|
229
|
+
...(r.reason ? [` reason: ${r.reason}`] : []),
|
|
230
|
+
...(Array.isArray(r.warnings) ? r.warnings.map((w) => ` ! ${w}`) : []),
|
|
231
|
+
];
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Tombstones the selection publishes: `--kind` and named slugs filter them the
|
|
235
|
+
* same way they filter live entries (the lib's `loadCatalog` does not filter
|
|
236
|
+
* `retired` by kind).
|
|
237
|
+
*/
|
|
238
|
+
export function selectTombstones(retired, sel) {
|
|
239
|
+
return (retired ?? []).filter((t) => (!sel.kind || t.kind === sel.kind) && (sel.slugs.length === 0 || sel.slugs.includes(t.slug)));
|
|
240
|
+
}
|
|
241
|
+
export function formatDiff(allRows, formatRetirement) {
|
|
242
|
+
const rows = allRows.filter((r) => r.action !== "retire");
|
|
243
|
+
const retirements = allRows.filter((r) => r.action === "retire");
|
|
244
|
+
// A warning several rows share (an older CP that cannot preview a workspace
|
|
245
|
+
// version says so on every workspace row) prints ONCE under the summary,
|
|
246
|
+
// with its row count, instead of under every row.
|
|
247
|
+
const rowsWarned = new Map();
|
|
248
|
+
for (const r of rows) {
|
|
249
|
+
for (const w of new Set(Array.isArray(r.warnings) ? r.warnings : []))
|
|
250
|
+
rowsWarned.set(w, (rowsWarned.get(w) ?? 0) + 1);
|
|
251
|
+
}
|
|
252
|
+
const shared = [...rowsWarned].filter(([, n]) => n > 1);
|
|
253
|
+
const lines = rows.map((r) => {
|
|
254
|
+
const hashes = r.status === "changed" ? ` ${r.hashBefore ?? "?"} → ${r.hashAfter ?? "?"}` : "";
|
|
255
|
+
const head = ` ${STATUS_LABEL[r.status] ?? r.status} ${r.kind}/${r.slug}${hashes}`;
|
|
256
|
+
const detail = [];
|
|
257
|
+
if (r.status === "changed" && r.hashBefore && r.hashAfter && r.hashBefore !== r.hashAfter) {
|
|
258
|
+
detail.push(" ~ definition: new content version");
|
|
259
|
+
}
|
|
260
|
+
const spBefore = r.sourcePackage?.before?.version ?? "none";
|
|
261
|
+
const spAfter = r.sourcePackage?.after?.version ?? "none";
|
|
262
|
+
if (r.status === "changed" && spBefore !== spAfter) {
|
|
263
|
+
detail.push(` ~ sourcePackage: ${spBefore} → ${spAfter}`);
|
|
264
|
+
}
|
|
265
|
+
if (r.status === "changed" && Array.isArray(r.columns)) {
|
|
266
|
+
for (const c of r.columns)
|
|
267
|
+
detail.push(` ~ ${c.column}: ${shortValue(c.before)} → ${shortValue(c.after)}`);
|
|
268
|
+
}
|
|
269
|
+
const warn = Array.isArray(r.warnings)
|
|
270
|
+
? r.warnings.filter((w) => (rowsWarned.get(w) ?? 0) < 2).map((w) => ` ! ${w}`)
|
|
271
|
+
: [];
|
|
272
|
+
return [head, ...detail, ...warn].join("\n");
|
|
273
|
+
});
|
|
274
|
+
const count = (s) => rows.filter((r) => r.status === s).length;
|
|
275
|
+
for (const r of retirements) {
|
|
276
|
+
lines.push(...(formatRetirement
|
|
277
|
+
? formatRetirement({
|
|
278
|
+
kind: r.kind,
|
|
279
|
+
slug: r.slug,
|
|
280
|
+
replacedBy: r.replacedBy ?? null,
|
|
281
|
+
reason: r.reason ?? "",
|
|
282
|
+
status: r.status,
|
|
283
|
+
warnings: r.warnings,
|
|
284
|
+
})
|
|
285
|
+
: fallbackRetirementLines(r)));
|
|
286
|
+
}
|
|
287
|
+
lines.push(`\n ${count("new")} new · ${count("changed")} changed · ${count("unchanged")} unchanged`);
|
|
288
|
+
for (const [w, n] of shared)
|
|
289
|
+
lines.push(` ! ${w} (${n} rows)`);
|
|
290
|
+
if (retirements.length > 0) {
|
|
291
|
+
const toSend = retirements.filter((r) => r.status !== "unchanged").length;
|
|
292
|
+
lines.push(` ${retirements.length} retired: ${toSend} to send · ${retirements.length - toSend} unchanged`);
|
|
293
|
+
}
|
|
294
|
+
return lines.join("\n");
|
|
295
|
+
}
|
|
296
|
+
function resultFailed(r) {
|
|
297
|
+
return r.outcome === "failed" || r.outcome === "declined" || r.status === "failed" || typeof r.error === "string";
|
|
298
|
+
}
|
|
299
|
+
// ── The command ─────────────────────────────────────────────────────────────
|
|
300
|
+
/**
|
|
301
|
+
* Returns the process exit code (0 ok · 1 refused/failed · 2 usage). The
|
|
302
|
+
* index.ts action sets `process.exitCode` from it.
|
|
303
|
+
*/
|
|
304
|
+
export async function runCatalog(verb, slugs, opts, deps = {}) {
|
|
305
|
+
const out = deps.out ?? ((l) => console.log(l));
|
|
306
|
+
const fail = (code, message, exit = 1) => {
|
|
307
|
+
const hint = catalogErrorHint(code);
|
|
308
|
+
if (opts.json)
|
|
309
|
+
out(JSON.stringify({ ok: false, error: code, message, hint }, null, 2));
|
|
310
|
+
else {
|
|
311
|
+
log.error(message);
|
|
312
|
+
out(` → ${hint}`);
|
|
313
|
+
}
|
|
314
|
+
return exit;
|
|
315
|
+
};
|
|
316
|
+
const usage = catalogUsageError(verb, slugs, opts);
|
|
317
|
+
if (usage)
|
|
318
|
+
return fail("usage", usage, 2);
|
|
319
|
+
const cwd = deps.cwd ?? process.cwd();
|
|
320
|
+
const catalogDir = findCatalogDir(cwd, opts.catalogDir);
|
|
321
|
+
if (!catalogDir) {
|
|
322
|
+
return fail("checkout-not-found", opts.catalogDir
|
|
323
|
+
? `${opts.catalogDir} is not the catalog package (no package.json named ${CATALOG_PACKAGE_NAMES.join(" or ")}).`
|
|
324
|
+
: `Could not find the catalog checkout from ${cwd}.`);
|
|
325
|
+
}
|
|
326
|
+
// Credentials: required to publish; used (if valid) to diff; unused to validate.
|
|
327
|
+
const creds = verb === "validate" ? null : deps.credentials === undefined ? getStoredToken() : deps.credentials;
|
|
328
|
+
const sessionOk = !!creds?.token && !isTokenLocallyExpired(creds);
|
|
329
|
+
if (verb === "publish" && !sessionOk) {
|
|
330
|
+
return fail("not-logged-in", creds?.token ? "Your control-plane session has expired." : "Not signed in to the Synap control plane.");
|
|
331
|
+
}
|
|
332
|
+
const interactive = deps.isInteractive ?? (!!process.stdin.isTTY && !opts.json);
|
|
333
|
+
if (verb === "publish" && !opts.dryRun && !opts.yes && !interactive) {
|
|
334
|
+
return fail("confirmation-required", "Refusing to publish the official catalog without a confirmation.");
|
|
335
|
+
}
|
|
336
|
+
let lib;
|
|
337
|
+
try {
|
|
338
|
+
lib = await loadCatalogLib(catalogDir, deps.importLib);
|
|
339
|
+
}
|
|
340
|
+
catch (e) {
|
|
341
|
+
return fail(e.code ?? "lib-load-failed", e.message);
|
|
342
|
+
}
|
|
343
|
+
const libCall = async (name, fn) => {
|
|
344
|
+
try {
|
|
345
|
+
return await fn();
|
|
346
|
+
}
|
|
347
|
+
catch (e) {
|
|
348
|
+
const err = e;
|
|
349
|
+
throw Object.assign(new Error(err.message), { code: err.code ?? `${name}-failed` });
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
try {
|
|
353
|
+
// 1. Load + validate (every verb).
|
|
354
|
+
// ONE read path: the catalog package's own kind dirs (capabilities included).
|
|
355
|
+
const loaded = await libCall("load", () => lib.loadCatalog({ root: catalogDir, kinds: opts.kind ? [opts.kind] : undefined }));
|
|
356
|
+
if (!loaded || !Array.isArray(loaded.entries) || !Array.isArray(loaded.problems)) {
|
|
357
|
+
return fail("lib-shape", `loadCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return { entries[], problems[] }.`);
|
|
358
|
+
}
|
|
359
|
+
// Validate the selection AGAINST the whole loaded corpus: a workspace's
|
|
360
|
+
// compose/require deps are other entries, which a slug filter would drop.
|
|
361
|
+
const corpus = Array.isArray(loaded.corpus) ? loaded.corpus : loaded.entries;
|
|
362
|
+
const entries = slugs.length ? corpus.filter((e) => slugs.includes(e.slug)) : loaded.entries;
|
|
363
|
+
const retired = selectTombstones(loaded.retired, { kind: opts.kind, slugs });
|
|
364
|
+
// A named slug that is only a tombstone is a valid selection (retire just it).
|
|
365
|
+
const missing = slugs.filter((s) => !entries.some((e) => e.slug === s) && !retired.some((t) => t.slug === s));
|
|
366
|
+
const validated = await libCall("validate", () => lib.validateCatalog(entries, { corpus }));
|
|
367
|
+
if (!Array.isArray(validated)) {
|
|
368
|
+
return fail("lib-shape", `validateCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return Problem[].`);
|
|
369
|
+
}
|
|
370
|
+
const problems = [
|
|
371
|
+
...loaded.problems,
|
|
372
|
+
...validated,
|
|
373
|
+
...missing.map((slug) => ({
|
|
374
|
+
slug,
|
|
375
|
+
kind: opts.kind,
|
|
376
|
+
code: "unknown-slug",
|
|
377
|
+
message: `no ${opts.kind ?? "catalog"} entry with this slug`,
|
|
378
|
+
})),
|
|
379
|
+
];
|
|
380
|
+
const errors = problems.filter(isError);
|
|
381
|
+
const scope = `${opts.kind ?? "all kinds"}${slugs.length ? ` · ${slugs.join(", ")}` : ""}`;
|
|
382
|
+
if (!opts.json) {
|
|
383
|
+
log.heading(`Catalog ${verb} — ${scope} — from ${catalogDir}`);
|
|
384
|
+
for (const p of problems)
|
|
385
|
+
out(formatProblem(p));
|
|
386
|
+
}
|
|
387
|
+
if (errors.length > 0) {
|
|
388
|
+
if (opts.json)
|
|
389
|
+
out(JSON.stringify({ ok: false, error: "invalid-template", hint: catalogErrorHint("invalid-template"), entries: entries.length, problems }, null, 2));
|
|
390
|
+
else
|
|
391
|
+
log.error(`${errors.length} problem(s) in ${entries.length} entr${entries.length === 1 ? "y" : "ies"}${verb === "validate" ? "" : ` — nothing to ${verb} until they are fixed`}.`);
|
|
392
|
+
return 1;
|
|
393
|
+
}
|
|
394
|
+
if (verb === "validate") {
|
|
395
|
+
if (opts.json)
|
|
396
|
+
out(JSON.stringify({ ok: true, entries: entries.length, problems }, null, 2));
|
|
397
|
+
else
|
|
398
|
+
log.success(`${entries.length} entr${entries.length === 1 ? "y" : "ies"} valid.`);
|
|
399
|
+
return 0;
|
|
400
|
+
}
|
|
401
|
+
const cpUrl = deps.cpUrl ?? getCpUrl();
|
|
402
|
+
const token = sessionOk ? creds.token : undefined;
|
|
403
|
+
// 2. Official preflight, BEFORE the preview (read-only, the lib's one rule):
|
|
404
|
+
// publish → refuse here, so a non-official account never sees a preview
|
|
405
|
+
// it could not act on; diff → warn and still show the diff.
|
|
406
|
+
let publisherWarning;
|
|
407
|
+
if (lib.checkPublisher) {
|
|
408
|
+
const check = await libCall("preflight", () => lib.checkPublisher({ cpUrl, token, fetchImpl: deps.fetchImpl }));
|
|
409
|
+
if (!check.official) {
|
|
410
|
+
if (verb === "publish")
|
|
411
|
+
return fail(check.reason, check.message);
|
|
412
|
+
publisherWarning = { code: check.reason, message: check.message };
|
|
413
|
+
if (!opts.json) {
|
|
414
|
+
log.warn(`Publishing would be refused: ${check.message}`);
|
|
415
|
+
out(` → ${catalogErrorHint(check.reason)}`);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// 3. Diff against the live catalog (diff + publish).
|
|
420
|
+
const rows = await libCall("diff", () => lib.diffCatalog(entries, { cpUrl, token, fetchImpl: deps.fetchImpl, retired }));
|
|
421
|
+
if (!Array.isArray(rows)) {
|
|
422
|
+
return fail("lib-shape", `diffCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return a row array.`);
|
|
423
|
+
}
|
|
424
|
+
if (!opts.json)
|
|
425
|
+
out(formatDiff(rows, lib.formatRetirement));
|
|
426
|
+
if (verb === "diff" || opts.dryRun) {
|
|
427
|
+
if (opts.json) {
|
|
428
|
+
const publishable = publisherWarning
|
|
429
|
+
? { publishable: false, publishRefusal: { ...publisherWarning, hint: catalogErrorHint(publisherWarning.code) } }
|
|
430
|
+
: {};
|
|
431
|
+
out(JSON.stringify({ ok: true, dryRun: verb === "publish" ? true : undefined, cpUrl, diff: rows, ...publishable }, null, 2));
|
|
432
|
+
}
|
|
433
|
+
else if (opts.dryRun)
|
|
434
|
+
log.info("Dry run — nothing was published.");
|
|
435
|
+
return 0;
|
|
436
|
+
}
|
|
437
|
+
// 4. Confirm, then the ONE write door.
|
|
438
|
+
if (!opts.yes) {
|
|
439
|
+
const ok = await (deps.confirm ?? readlineConfirm)(`\n Publish ${entries.length} catalog entr${entries.length === 1 ? "y" : "ies"}${retired.length ? ` and ${retired.length} retirement${retired.length === 1 ? "" : "s"}` : ""} (${scope}) to ${cpUrl} as synap-official? [y/N] `);
|
|
440
|
+
if (!ok) {
|
|
441
|
+
log.info("Cancelled — nothing was published.");
|
|
442
|
+
return 1;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
const results = await libCall("publish", () => lib.publishCatalog({
|
|
446
|
+
entries,
|
|
447
|
+
corpus,
|
|
448
|
+
cpUrl,
|
|
449
|
+
token: creds.token,
|
|
450
|
+
official: true,
|
|
451
|
+
dryRun: false,
|
|
452
|
+
// The human already said yes above; the lib may call this as its own gate.
|
|
453
|
+
confirm: async () => true,
|
|
454
|
+
fetchImpl: deps.fetchImpl,
|
|
455
|
+
callerUserId: creds.userId,
|
|
456
|
+
log: opts.json ? () => { } : out,
|
|
457
|
+
retired,
|
|
458
|
+
}));
|
|
459
|
+
if (!Array.isArray(results)) {
|
|
460
|
+
return fail("lib-shape", `publishCatalog in ${join(catalogDir, CATALOG_LIB_PATH)} did not return a result array — check the live catalog before re-running.`);
|
|
461
|
+
}
|
|
462
|
+
const failed = results.filter(resultFailed);
|
|
463
|
+
if (opts.json) {
|
|
464
|
+
out(JSON.stringify({ ok: failed.length === 0, cpUrl, diff: rows, results }, null, 2));
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
for (const r of failed)
|
|
468
|
+
out(` ✗ ${[r.kind, r.slug].filter(Boolean).join("/")}: ${r.error ?? "failed"}`);
|
|
469
|
+
if (failed.length > 0)
|
|
470
|
+
log.error(`${failed.length}/${results.length} catalog entr${results.length === 1 ? "y" : "ies"} failed to publish.`);
|
|
471
|
+
else
|
|
472
|
+
log.success(`Published ${results.length} official catalog entr${results.length === 1 ? "y" : "ies"}.`);
|
|
473
|
+
}
|
|
474
|
+
return failed.length > 0 ? 1 : 0;
|
|
475
|
+
}
|
|
476
|
+
catch (e) {
|
|
477
|
+
const err = e;
|
|
478
|
+
return fail(err.code ?? `${verb}-failed`, err.message);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/commands/catalog.ts"],"names":[],"mappings":"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"}
|