opensquid 0.5.441 → 0.5.449
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 +1 -0
- package/dist/functions/arm_scope.d.ts +27 -0
- package/dist/functions/arm_scope.d.ts.map +1 -0
- package/dist/functions/arm_scope.js +52 -0
- package/dist/functions/arm_scope.js.map +1 -0
- package/dist/functions/index.d.ts +1 -0
- package/dist/functions/index.d.ts.map +1 -1
- package/dist/functions/index.js +1 -0
- package/dist/functions/index.js.map +1 -1
- package/dist/functions/recall_pre_inject.d.ts.map +1 -1
- package/dist/functions/recall_pre_inject.js +12 -0
- package/dist/functions/recall_pre_inject.js.map +1 -1
- package/dist/rag/store_git.d.ts +23 -0
- package/dist/rag/store_git.d.ts.map +1 -0
- package/dist/rag/store_git.js +57 -0
- package/dist/rag/store_git.js.map +1 -0
- package/dist/runtime/bootstrap.d.ts.map +1 -1
- package/dist/runtime/bootstrap.js +2 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/handoff/render.d.ts +5 -4
- package/dist/runtime/handoff/render.d.ts.map +1 -1
- package/dist/runtime/handoff/render.js +7 -7
- package/dist/runtime/handoff/render.js.map +1 -1
- package/dist/runtime/hooks/active_task_mirror.js +0 -0
- package/dist/runtime/hooks/apply_patch.js +0 -0
- package/dist/runtime/hooks/dispatch.js +0 -0
- package/dist/runtime/hooks/hook_output.js +0 -0
- package/dist/runtime/hooks/memory_reconcile.js +0 -0
- package/dist/runtime/hooks/new_project_detect.js +0 -0
- package/dist/runtime/hooks/profession_resolver.js +0 -0
- package/dist/runtime/hooks/scope_intent.js +0 -0
- package/dist/runtime/hooks/session-end.js +11 -0
- package/dist/runtime/hooks/session-end.js.map +1 -1
- package/dist/runtime/hooks/session_id.js +0 -0
- package/dist/runtime/hooks/session_liveness.js +0 -0
- package/dist/runtime/hooks/stop_drive.js +0 -0
- package/dist/runtime/hooks/stop_stream.js +0 -0
- package/dist/runtime/hooks/subagent_guard.js +0 -0
- package/dist/runtime/hooks/transcript.js +0 -0
- package/dist/runtime/hooks/transcript_tasks.js +0 -0
- package/dist/runtime/ralph/orchestrator.d.ts.map +1 -1
- package/dist/runtime/ralph/orchestrator.js +2 -1
- package/dist/runtime/ralph/orchestrator.js.map +1 -1
- package/dist/setup/cli/limits_state.d.ts.map +1 -1
- package/dist/setup/cli/limits_state.js +6 -40
- package/dist/setup/cli/limits_state.js.map +1 -1
- package/dist/setup/cli/pack_walk.d.ts +32 -0
- package/dist/setup/cli/pack_walk.d.ts.map +1 -0
- package/dist/setup/cli/pack_walk.js +76 -0
- package/dist/setup/cli/pack_walk.js.map +1 -0
- package/dist/setup/cli/permissions_state.d.ts.map +1 -1
- package/dist/setup/cli/permissions_state.js +6 -37
- package/dist/setup/cli/permissions_state.js.map +1 -1
- package/dist/setup/cli/triggers_state.d.ts.map +1 -1
- package/dist/setup/cli/triggers_state.js +3 -29
- package/dist/setup/cli/triggers_state.js.map +1 -1
- package/dist/workgraph/events.d.ts.map +1 -1
- package/dist/workgraph/events.js +10 -0
- package/dist/workgraph/events.js.map +1 -1
- package/dist/workgraph/store.d.ts.map +1 -1
- package/dist/workgraph/store.js +5 -0
- package/dist/workgraph/store.js.map +1 -1
- package/dist/workgraph/types.d.ts +2 -1
- package/dist/workgraph/types.d.ts.map +1 -1
- package/docs/ARCHITECTURE.md +268 -0
- package/docs/pack-runtime.md +15 -12
- package/docs/skill-grammar-guide.md +4 -4
- package/package.json +5 -3
- package/packs/builtin/coding-flow/skills/entry-and-handoffs/skill.yaml +13 -17
- package/dist/anti-drift/evaluator.d.ts +0 -88
- package/dist/anti-drift/evaluator.d.ts.map +0 -1
- package/dist/anti-drift/evaluator.js +0 -417
- package/dist/anti-drift/evaluator.js.map +0 -1
- package/dist/anti-drift/evaluator.test.js +0 -78
- package/dist/anti-drift/rules.d.ts +0 -80
- package/dist/anti-drift/rules.d.ts.map +0 -1
- package/dist/anti-drift/rules.js +0 -368
- package/dist/anti-drift/rules.js.map +0 -1
- package/dist/anti-drift/rules.test.js +0 -213
- package/dist/anti-drift/state.d.ts +0 -107
- package/dist/anti-drift/state.d.ts.map +0 -1
- package/dist/anti-drift/state.js +0 -177
- package/dist/anti-drift/state.js.map +0 -1
- package/dist/anti-drift/state.test.js +0 -120
- package/dist/chat/adapters/discord.d.ts +0 -41
- package/dist/chat/adapters/discord.d.ts.map +0 -1
- package/dist/chat/adapters/discord.js +0 -176
- package/dist/chat/adapters/discord.js.map +0 -1
- package/dist/chat/adapters/discord.test.js +0 -25
- package/dist/chat/adapters/slack.d.ts +0 -43
- package/dist/chat/adapters/slack.d.ts.map +0 -1
- package/dist/chat/adapters/slack.js +0 -172
- package/dist/chat/adapters/slack.js.map +0 -1
- package/dist/chat/adapters/slack.test.js +0 -30
- package/dist/chat/adapters/telegram.d.ts +0 -148
- package/dist/chat/adapters/telegram.d.ts.map +0 -1
- package/dist/chat/adapters/telegram.js +0 -498
- package/dist/chat/adapters/telegram.js.map +0 -1
- package/dist/chat/adapters/telegram.test.js +0 -94
- package/dist/chat/config.d.ts +0 -98
- package/dist/chat/config.d.ts.map +0 -1
- package/dist/chat/config.js +0 -185
- package/dist/chat/config.js.map +0 -1
- package/dist/chat/daemon/active-project.d.ts +0 -17
- package/dist/chat/daemon/active-project.d.ts.map +0 -1
- package/dist/chat/daemon/active-project.js +0 -23
- package/dist/chat/daemon/active-project.js.map +0 -1
- package/dist/chat/daemon/autospawn.d.ts +0 -40
- package/dist/chat/daemon/autospawn.d.ts.map +0 -1
- package/dist/chat/daemon/autospawn.js +0 -129
- package/dist/chat/daemon/autospawn.js.map +0 -1
- package/dist/chat/daemon/autospawn.test.js +0 -112
- package/dist/chat/daemon/cli.d.ts +0 -18
- package/dist/chat/daemon/cli.d.ts.map +0 -1
- package/dist/chat/daemon/cli.js +0 -71
- package/dist/chat/daemon/cli.js.map +0 -1
- package/dist/chat/daemon/collisions.js +0 -384
- package/dist/chat/daemon/health-check.d.ts +0 -69
- package/dist/chat/daemon/health-check.d.ts.map +0 -1
- package/dist/chat/daemon/health-check.js +0 -112
- package/dist/chat/daemon/health-check.js.map +0 -1
- package/dist/chat/daemon/inbox-read.d.ts +0 -35
- package/dist/chat/daemon/inbox-read.d.ts.map +0 -1
- package/dist/chat/daemon/inbox-read.js +0 -75
- package/dist/chat/daemon/inbox-read.js.map +0 -1
- package/dist/chat/daemon/inbox-read.test.js +0 -97
- package/dist/chat/daemon/inbox.d.ts +0 -63
- package/dist/chat/daemon/inbox.d.ts.map +0 -1
- package/dist/chat/daemon/inbox.js +0 -56
- package/dist/chat/daemon/inbox.js.map +0 -1
- package/dist/chat/daemon/inbox.test.js +0 -110
- package/dist/chat/daemon/lifecycle.d.ts +0 -71
- package/dist/chat/daemon/lifecycle.d.ts.map +0 -1
- package/dist/chat/daemon/lifecycle.js +0 -221
- package/dist/chat/daemon/lifecycle.js.map +0 -1
- package/dist/chat/daemon/lifecycle.test.js +0 -163
- package/dist/chat/daemon/protocol.d.ts +0 -107
- package/dist/chat/daemon/protocol.d.ts.map +0 -1
- package/dist/chat/daemon/protocol.js +0 -54
- package/dist/chat/daemon/protocol.js.map +0 -1
- package/dist/chat/daemon/routing.d.ts +0 -140
- package/dist/chat/daemon/routing.d.ts.map +0 -1
- package/dist/chat/daemon/routing.js +0 -198
- package/dist/chat/daemon/routing.js.map +0 -1
- package/dist/chat/daemon/routing.test.js +0 -259
- package/dist/chat/daemon/rpc-client.d.ts +0 -45
- package/dist/chat/daemon/rpc-client.d.ts.map +0 -1
- package/dist/chat/daemon/rpc-client.js +0 -133
- package/dist/chat/daemon/rpc-client.js.map +0 -1
- package/dist/chat/daemon/rpc-server.d.ts +0 -39
- package/dist/chat/daemon/rpc-server.d.ts.map +0 -1
- package/dist/chat/daemon/rpc-server.js +0 -385
- package/dist/chat/daemon/rpc-server.js.map +0 -1
- package/dist/chat/daemon/rpc.test.js +0 -177
- package/dist/chat/daemon/subscribers.js +0 -257
- package/dist/chat/daemon/worker.d.ts +0 -27
- package/dist/chat/daemon/worker.d.ts.map +0 -1
- package/dist/chat/daemon/worker.js +0 -313
- package/dist/chat/daemon/worker.js.map +0 -1
- package/dist/chat/daemon/workspace-topic.js +0 -324
- package/dist/chat/env-token.d.ts +0 -60
- package/dist/chat/env-token.d.ts.map +0 -1
- package/dist/chat/env-token.js +0 -137
- package/dist/chat/env-token.js.map +0 -1
- package/dist/chat/env-token.test.js +0 -160
- package/dist/chat/factory.d.ts +0 -30
- package/dist/chat/factory.d.ts.map +0 -1
- package/dist/chat/factory.js +0 -50
- package/dist/chat/factory.js.map +0 -1
- package/dist/chat/factory.test.js +0 -55
- package/dist/chat/gateway.d.ts +0 -176
- package/dist/chat/gateway.d.ts.map +0 -1
- package/dist/chat/gateway.js +0 -146
- package/dist/chat/gateway.js.map +0 -1
- package/dist/chat/gateway.test.js +0 -192
- package/dist/claude-md.d.ts +0 -39
- package/dist/claude-md.d.ts.map +0 -1
- package/dist/claude-md.js +0 -113
- package/dist/claude-md.js.map +0 -1
- package/dist/claude-md.test.js +0 -91
- package/dist/codex/activate.d.ts +0 -66
- package/dist/codex/activate.d.ts.map +0 -1
- package/dist/codex/activate.js +0 -329
- package/dist/codex/activate.js.map +0 -1
- package/dist/codex/activate.test.js +0 -229
- package/dist/codex/bundled-default/bundled-default.test.js +0 -161
- package/dist/codex/cli-publish.test.js +0 -133
- package/dist/codex/cli.d.ts +0 -35
- package/dist/codex/cli.d.ts.map +0 -1
- package/dist/codex/cli.js +0 -554
- package/dist/codex/cli.js.map +0 -1
- package/dist/codex/cli.test.js +0 -277
- package/dist/codex/import-skill-md.d.ts +0 -53
- package/dist/codex/import-skill-md.d.ts.map +0 -1
- package/dist/codex/import-skill-md.js +0 -236
- package/dist/codex/import-skill-md.js.map +0 -1
- package/dist/codex/import-skill-md.test.js +0 -225
- package/dist/codex/loader.d.ts +0 -27
- package/dist/codex/loader.d.ts.map +0 -1
- package/dist/codex/loader.js +0 -86
- package/dist/codex/loader.js.map +0 -1
- package/dist/codex/loader.test.js +0 -75
- package/dist/codex/parse.d.ts +0 -28
- package/dist/codex/parse.d.ts.map +0 -1
- package/dist/codex/parse.js +0 -309
- package/dist/codex/parse.js.map +0 -1
- package/dist/codex/parse.test.js +0 -241
- package/dist/codex/store.d.ts +0 -87
- package/dist/codex/store.d.ts.map +0 -1
- package/dist/codex/store.js +0 -205
- package/dist/codex/store.js.map +0 -1
- package/dist/codex/store.test.js +0 -242
- package/dist/codex/types.d.ts +0 -398
- package/dist/codex/types.d.ts.map +0 -1
- package/dist/codex/types.js +0 -21
- package/dist/codex/types.js.map +0 -1
- package/dist/config.d.ts +0 -53
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -202
- package/dist/config.js.map +0 -1
- package/dist/config.test.js +0 -117
- package/dist/engine/cli.d.ts +0 -14
- package/dist/engine/cli.d.ts.map +0 -1
- package/dist/engine/cli.js +0 -171
- package/dist/engine/cli.js.map +0 -1
- package/dist/engine/client.d.ts +0 -219
- package/dist/engine/client.d.ts.map +0 -1
- package/dist/engine/client.js +0 -312
- package/dist/engine/client.js.map +0 -1
- package/dist/engine/config.d.ts +0 -62
- package/dist/engine/config.d.ts.map +0 -1
- package/dist/engine/config.js +0 -223
- package/dist/engine/config.js.map +0 -1
- package/dist/engine/index.d.ts +0 -17
- package/dist/engine/index.d.ts.map +0 -1
- package/dist/engine/index.js +0 -16
- package/dist/engine/index.js.map +0 -1
- package/dist/engine/resolver.d.ts +0 -62
- package/dist/engine/resolver.d.ts.map +0 -1
- package/dist/engine/resolver.js +0 -103
- package/dist/engine/resolver.js.map +0 -1
- package/dist/engine/singleton.d.ts +0 -95
- package/dist/engine/singleton.d.ts.map +0 -1
- package/dist/engine/singleton.js +0 -325
- package/dist/engine/singleton.js.map +0 -1
- package/dist/engine/types.d.ts +0 -402
- package/dist/engine/types.d.ts.map +0 -1
- package/dist/engine/types.js +0 -22
- package/dist/engine/types.js.map +0 -1
- package/dist/engine-binary-resolver.js +0 -110
- package/dist/engine-binary-resolver.test.js +0 -61
- package/dist/engine-cli.js +0 -60
- package/dist/engine-client.js +0 -301
- package/dist/engine-client.test.js +0 -118
- package/dist/functions/chain_state.d.ts +0 -51
- package/dist/functions/chain_state.d.ts.map +0 -1
- package/dist/functions/chain_state.js +0 -59
- package/dist/functions/chain_state.js.map +0 -1
- package/dist/hooks/drift-catalog.d.ts +0 -68
- package/dist/hooks/drift-catalog.d.ts.map +0 -1
- package/dist/hooks/drift-catalog.js +0 -184
- package/dist/hooks/drift-catalog.js.map +0 -1
- package/dist/hooks/drift-catalog.test.js +0 -154
- package/dist/hooks/drift-patterns.d.ts +0 -110
- package/dist/hooks/drift-patterns.d.ts.map +0 -1
- package/dist/hooks/drift-patterns.js +0 -289
- package/dist/hooks/drift-patterns.js.map +0 -1
- package/dist/hooks/drift-patterns.test.js +0 -325
- package/dist/hooks/engine-vocab-gate.d.ts +0 -108
- package/dist/hooks/engine-vocab-gate.d.ts.map +0 -1
- package/dist/hooks/engine-vocab-gate.js +0 -225
- package/dist/hooks/engine-vocab-gate.js.map +0 -1
- package/dist/hooks/engine-vocab-gate.test.js +0 -170
- package/dist/hooks/heartbeat.d.ts +0 -107
- package/dist/hooks/heartbeat.d.ts.map +0 -1
- package/dist/hooks/heartbeat.js +0 -316
- package/dist/hooks/heartbeat.js.map +0 -1
- package/dist/hooks/heartbeat.test.js +0 -393
- package/dist/hooks/honesty-ledger-session-scope.test.js +0 -100
- package/dist/hooks/honesty-ledger.d.ts +0 -123
- package/dist/hooks/honesty-ledger.d.ts.map +0 -1
- package/dist/hooks/honesty-ledger.js +0 -226
- package/dist/hooks/honesty-ledger.js.map +0 -1
- package/dist/hooks/honesty-ledger.test.js +0 -466
- package/dist/hooks/inline-report-check.d.ts +0 -63
- package/dist/hooks/inline-report-check.d.ts.map +0 -1
- package/dist/hooks/inline-report-check.js +0 -88
- package/dist/hooks/inline-report-check.js.map +0 -1
- package/dist/hooks/inline-report-check.test.js +0 -96
- package/dist/hooks/pre-tool-use.d.ts +0 -62
- package/dist/hooks/pre-tool-use.d.ts.map +0 -1
- package/dist/hooks/pre-tool-use.js +0 -342
- package/dist/hooks/pre-tool-use.js.map +0 -1
- package/dist/hooks/pre-tool-use.test.js +0 -134
- package/dist/hooks/session-end.d.ts +0 -15
- package/dist/hooks/session-end.d.ts.map +0 -1
- package/dist/hooks/session-end.js +0 -60
- package/dist/hooks/session-end.js.map +0 -1
- package/dist/hooks/session-end.test.js +0 -52
- package/dist/hooks/stop.d.ts +0 -35
- package/dist/hooks/stop.d.ts.map +0 -1
- package/dist/hooks/stop.js +0 -136
- package/dist/hooks/stop.js.map +0 -1
- package/dist/hooks/transcript-active-task.test.js +0 -342
- package/dist/hooks/transcript.d.ts +0 -26
- package/dist/hooks/transcript.d.ts.map +0 -1
- package/dist/hooks/transcript.js +0 -266
- package/dist/hooks/transcript.js.map +0 -1
- package/dist/hooks/transcript.test.js +0 -103
- package/dist/hooks/user-prompt-submit.d.ts +0 -74
- package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
- package/dist/hooks/user-prompt-submit.js +0 -256
- package/dist/hooks/user-prompt-submit.js.map +0 -1
- package/dist/hooks/user-prompt-submit.test.js +0 -118
- package/dist/hooks/versioning-gate.d.ts +0 -101
- package/dist/hooks/versioning-gate.d.ts.map +0 -1
- package/dist/hooks/versioning-gate.js +0 -245
- package/dist/hooks/versioning-gate.js.map +0 -1
- package/dist/hooks/versioning-gate.test.js +0 -368
- package/dist/hooks/workflow-gate.d.ts +0 -64
- package/dist/hooks/workflow-gate.d.ts.map +0 -1
- package/dist/hooks/workflow-gate.js +0 -152
- package/dist/hooks/workflow-gate.js.map +0 -1
- package/dist/hooks/workflow-gate.test.js +0 -197
- package/dist/hooks-cli.d.ts +0 -25
- package/dist/hooks-cli.d.ts.map +0 -1
- package/dist/hooks-cli.js +0 -286
- package/dist/hooks-cli.js.map +0 -1
- package/dist/hooks-cli.test.js +0 -148
- package/dist/origin.d.ts +0 -16
- package/dist/origin.d.ts.map +0 -1
- package/dist/origin.js +0 -92
- package/dist/origin.js.map +0 -1
- package/dist/packs/seed_lessons_ingest.d.ts +0 -30
- package/dist/packs/seed_lessons_ingest.d.ts.map +0 -1
- package/dist/packs/seed_lessons_ingest.js +0 -107
- package/dist/packs/seed_lessons_ingest.js.map +0 -1
- package/dist/project-cli.d.ts +0 -7
- package/dist/project-cli.d.ts.map +0 -1
- package/dist/project-cli.js +0 -145
- package/dist/project-cli.js.map +0 -1
- package/dist/project.d.ts +0 -127
- package/dist/project.d.ts.map +0 -1
- package/dist/project.js +0 -281
- package/dist/project.js.map +0 -1
- package/dist/project.test.js +0 -287
- package/dist/rag/backends/loop_engine.d.ts +0 -61
- package/dist/rag/backends/loop_engine.d.ts.map +0 -1
- package/dist/rag/backends/loop_engine.js +0 -160
- package/dist/rag/backends/loop_engine.js.map +0 -1
- package/dist/recall.d.ts +0 -82
- package/dist/recall.d.ts.map +0 -1
- package/dist/recall.js +0 -81
- package/dist/recall.js.map +0 -1
- package/dist/runtime/agent_bridge/autospawn.d.ts +0 -131
- package/dist/runtime/agent_bridge/autospawn.d.ts.map +0 -1
- package/dist/runtime/agent_bridge/autospawn.js +0 -251
- package/dist/runtime/agent_bridge/autospawn.js.map +0 -1
- package/dist/runtime/chain_state.d.ts +0 -124
- package/dist/runtime/chain_state.d.ts.map +0 -1
- package/dist/runtime/chain_state.js +0 -189
- package/dist/runtime/chain_state.js.map +0 -1
- package/dist/runtime/hooks/permission_decision.d.ts +0 -34
- package/dist/runtime/hooks/permission_decision.d.ts.map +0 -1
- package/dist/runtime/hooks/permission_decision.js +0 -39
- package/dist/runtime/hooks/permission_decision.js.map +0 -1
- package/dist/runtime/workflow_fsm.d.ts +0 -21
- package/dist/runtime/workflow_fsm.d.ts.map +0 -1
- package/dist/runtime/workflow_fsm.js +0 -25
- package/dist/runtime/workflow_fsm.js.map +0 -1
- package/dist/runtime/workflow_map.d.ts +0 -26
- package/dist/runtime/workflow_map.d.ts.map +0 -1
- package/dist/runtime/workflow_map.js +0 -38
- package/dist/runtime/workflow_map.js.map +0 -1
- package/dist/scope.d.ts +0 -48
- package/dist/scope.d.ts.map +0 -1
- package/dist/scope.js +0 -111
- package/dist/scope.js.map +0 -1
- package/dist/setup/cli/topic_create_step.d.ts +0 -84
- package/dist/setup/cli/topic_create_step.d.ts.map +0 -1
- package/dist/setup/cli/topic_create_step.js +0 -213
- package/dist/setup/cli/topic_create_step.js.map +0 -1
- package/dist/system-export.d.ts +0 -65
- package/dist/system-export.d.ts.map +0 -1
- package/dist/system-export.js +0 -194
- package/dist/system-export.js.map +0 -1
- package/dist/utterance/classifier.d.ts +0 -53
- package/dist/utterance/classifier.d.ts.map +0 -1
- package/dist/utterance/classifier.js +0 -184
- package/dist/utterance/classifier.js.map +0 -1
- package/dist/utterance/classifier.test.js +0 -147
package/dist/codex/cli.js
DELETED
|
@@ -1,554 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `opensquid codex <subcommand>` — codex management CLI.
|
|
3
|
-
*
|
|
4
|
-
* Subcommands:
|
|
5
|
-
* install <path> — read codex.yaml at <path>, validate, copy into
|
|
6
|
-
* ~/.opensquid/codexes/<id>/
|
|
7
|
-
* list — list all installed codex ids
|
|
8
|
-
* remove <id> — uninstall a codex (filesystem only — engine
|
|
9
|
-
* seeded lessons are retired separately)
|
|
10
|
-
* doctor [<id>] — report install status; with id, show one codex
|
|
11
|
-
*
|
|
12
|
-
* Engine seeding integration (calling engine.lesson.create with
|
|
13
|
-
* authored_by: Pack(<id>)) happens at activation time via the
|
|
14
|
-
* orchestrator (O3), not here. This CLI is filesystem-only.
|
|
15
|
-
*
|
|
16
|
-
* Source kinds in v0.6:
|
|
17
|
-
* - local path (relative or absolute) — codex.yaml native format
|
|
18
|
-
* - local SKILL.md (file path or dir containing SKILL.md) — v0.6d
|
|
19
|
-
* auto-detected; converted via import-skill-md.ts then routed through
|
|
20
|
-
* the native install pipeline. Supports Anthropic / superpowers / ECC /
|
|
21
|
-
* Hermes flavors transparently.
|
|
22
|
-
* - git URL — deferred to O3 (clone-then-install)
|
|
23
|
-
* - http URL — deferred to O3
|
|
24
|
-
* - --from "<desc>" — deferred to O3 (LLM-generated)
|
|
25
|
-
*
|
|
26
|
-
* Detection precedence (loadCodexFromPath):
|
|
27
|
-
* 1. opts.source explicit override ("skill_md" | "native") wins
|
|
28
|
-
* 2. file ends in SKILL.md (case-insensitive) → skill_md
|
|
29
|
-
* 3. directory contains SKILL.md but no codex.yaml → skill_md
|
|
30
|
-
* 4. else → native (parse codex.yaml)
|
|
31
|
-
*/
|
|
32
|
-
import { promises as fs } from "node:fs";
|
|
33
|
-
import * as os from "node:os";
|
|
34
|
-
import * as path from "node:path";
|
|
35
|
-
import { appendPromotedLessonToClaudeMd } from "../claude-md.js";
|
|
36
|
-
import { OpenSquidEngine } from "../engine-client.js";
|
|
37
|
-
import { CodexStoreError, codexDir, codexesDir, getCodex, installCodex, listCodexes, removeCodex, resolveDataRoot, } from "./store.js";
|
|
38
|
-
import { convertSkillMdToCodex, SkillMdImportError } from "./import-skill-md.js";
|
|
39
|
-
import { parseCodexYaml } from "./parse.js";
|
|
40
|
-
import { stringify as stringifyYaml } from "yaml";
|
|
41
|
-
import { isCompositeCodex, isFocusedCodex } from "./types.js";
|
|
42
|
-
// ---------------------------------------------------------------------
|
|
43
|
-
// Errors
|
|
44
|
-
// ---------------------------------------------------------------------
|
|
45
|
-
export class CodexCliError extends Error {
|
|
46
|
-
hint;
|
|
47
|
-
constructor(message, hint) {
|
|
48
|
-
super(message);
|
|
49
|
-
this.hint = hint;
|
|
50
|
-
this.name = "CodexCliError";
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// ---------------------------------------------------------------------
|
|
54
|
-
// Source loaders
|
|
55
|
-
// ---------------------------------------------------------------------
|
|
56
|
-
/**
|
|
57
|
-
* Read + parse codex.yaml from a local directory or file path. v0.6d
|
|
58
|
-
* also auto-detects SKILL.md foreign format and converts it via
|
|
59
|
-
* import-skill-md.ts before returning. The downstream pipeline
|
|
60
|
-
* (`installCodex` + `copyCodexContent`) sees only the native shape.
|
|
61
|
-
*/
|
|
62
|
-
async function loadCodexFromPath(source, sourceOverride) {
|
|
63
|
-
const abs = path.resolve(source);
|
|
64
|
-
let stat;
|
|
65
|
-
try {
|
|
66
|
-
stat = await fs.stat(abs);
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
throw new CodexCliError(`source path not found: ${abs}`, "pass a directory containing codex.yaml or SKILL.md, or a path to codex.yaml / SKILL.md directly");
|
|
70
|
-
}
|
|
71
|
-
// ----- foreign-format detection (SKILL.md) -----
|
|
72
|
-
const detected = await detectSourceKind(abs, stat.isDirectory(), sourceOverride);
|
|
73
|
-
if (detected.kind === "skill_md") {
|
|
74
|
-
return loadCodexFromSkillMd(detected.skillMdPath);
|
|
75
|
-
}
|
|
76
|
-
// ----- native codex.yaml path (unchanged) -----
|
|
77
|
-
let manifestPath;
|
|
78
|
-
let sourceRoot;
|
|
79
|
-
if (stat.isDirectory()) {
|
|
80
|
-
manifestPath = path.join(abs, "codex.yaml");
|
|
81
|
-
sourceRoot = abs;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
manifestPath = abs;
|
|
85
|
-
sourceRoot = path.dirname(abs);
|
|
86
|
-
}
|
|
87
|
-
let content;
|
|
88
|
-
try {
|
|
89
|
-
content = await fs.readFile(manifestPath, "utf8");
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
throw new CodexCliError(`codex.yaml not found at ${manifestPath}`, "the source must contain codex.yaml at the root (or SKILL.md for foreign-format import)");
|
|
93
|
-
}
|
|
94
|
-
let codex;
|
|
95
|
-
try {
|
|
96
|
-
codex = parseCodexYaml(content);
|
|
97
|
-
}
|
|
98
|
-
catch (err) {
|
|
99
|
-
throw new CodexCliError(`codex.yaml validation failed: ${err instanceof Error ? err.message : String(err)}`, "check the manifest against opensquid v0.6 codex schema");
|
|
100
|
-
}
|
|
101
|
-
return { codex, sourceRoot };
|
|
102
|
-
}
|
|
103
|
-
async function detectSourceKind(abs, isDirectory, override) {
|
|
104
|
-
if (override === "native") {
|
|
105
|
-
return { kind: "native", skillMdPath: abs };
|
|
106
|
-
}
|
|
107
|
-
// File path: case-insensitive SKILL.md detection on the basename.
|
|
108
|
-
if (!isDirectory) {
|
|
109
|
-
const base = path.basename(abs).toLowerCase();
|
|
110
|
-
if (override === "skill_md" || base === "skill.md") {
|
|
111
|
-
return { kind: "skill_md", skillMdPath: abs };
|
|
112
|
-
}
|
|
113
|
-
return { kind: "native", skillMdPath: abs };
|
|
114
|
-
}
|
|
115
|
-
// Directory: prefer codex.yaml if present (native wins on collision —
|
|
116
|
-
// a directory with BOTH means the author already converted natively).
|
|
117
|
-
// Else look for SKILL.md / skill.md.
|
|
118
|
-
if (override !== "skill_md") {
|
|
119
|
-
const codexPath = path.join(abs, "codex.yaml");
|
|
120
|
-
try {
|
|
121
|
-
await fs.access(codexPath);
|
|
122
|
-
return { kind: "native", skillMdPath: abs };
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
// fall through to SKILL.md probe
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
for (const candidate of ["SKILL.md", "skill.md", "Skill.md"]) {
|
|
129
|
-
const probe = path.join(abs, candidate);
|
|
130
|
-
try {
|
|
131
|
-
await fs.access(probe);
|
|
132
|
-
return { kind: "skill_md", skillMdPath: probe };
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
// try next
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
// Neither — let downstream codex.yaml read produce the "not found" error.
|
|
139
|
-
return { kind: "native", skillMdPath: abs };
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Convert a SKILL.md file into the native codex install shape by writing
|
|
143
|
-
* the converted codex.yaml + lessons/<id>/lesson.md into a tmp dir, then
|
|
144
|
-
* returning that tmp dir as the sourceRoot so the unchanged install
|
|
145
|
-
* pipeline (`installCodex` + `copyCodexContent`) materializes it normally.
|
|
146
|
-
* The caller invokes the returned `cleanup` after install completes.
|
|
147
|
-
*/
|
|
148
|
-
async function loadCodexFromSkillMd(skillMdPath) {
|
|
149
|
-
let raw;
|
|
150
|
-
try {
|
|
151
|
-
raw = await fs.readFile(skillMdPath, "utf8");
|
|
152
|
-
}
|
|
153
|
-
catch (err) {
|
|
154
|
-
throw new CodexCliError(`failed to read SKILL.md at ${skillMdPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
155
|
-
}
|
|
156
|
-
let converted;
|
|
157
|
-
try {
|
|
158
|
-
converted = convertSkillMdToCodex(raw, { originalPath: skillMdPath });
|
|
159
|
-
}
|
|
160
|
-
catch (err) {
|
|
161
|
-
if (err instanceof SkillMdImportError) {
|
|
162
|
-
throw new CodexCliError(`SKILL.md import failed: ${err.message}`, err.hint);
|
|
163
|
-
}
|
|
164
|
-
throw err;
|
|
165
|
-
}
|
|
166
|
-
const tmpRoot = await fs.mkdtemp(path.join(os.tmpdir(), "opensquid-skill-import-"));
|
|
167
|
-
// v0.6d audit fix (H1): any failure between mkdtemp and the return
|
|
168
|
-
// would orphan tmpRoot forever. Wrap the materialize+revalidate block
|
|
169
|
-
// and rm tmpRoot on throw before rethrowing. Cleanup-on-success is
|
|
170
|
-
// still the caller's responsibility via the returned `cleanup` fn.
|
|
171
|
-
try {
|
|
172
|
-
// Materialize the codex.yaml + each lesson body in the same layout
|
|
173
|
-
// installCodex expects (codex.yaml at root, lessons/<id>/lesson.md).
|
|
174
|
-
const yamlOut = stringifyYaml(converted.codex);
|
|
175
|
-
await fs.writeFile(path.join(tmpRoot, "codex.yaml"), yamlOut, "utf8");
|
|
176
|
-
for (const lesson of converted.lessons) {
|
|
177
|
-
const bodyAbs = path.join(tmpRoot, lesson.bodyPath);
|
|
178
|
-
await fs.mkdir(path.dirname(bodyAbs), { recursive: true });
|
|
179
|
-
await fs.writeFile(bodyAbs, lesson.body, "utf8");
|
|
180
|
-
}
|
|
181
|
-
// Re-parse via parseCodexYaml so the downstream install path
|
|
182
|
-
// validates exactly what will land on disk — guards against drift
|
|
183
|
-
// between the in-memory shape and the YAML serializer's output.
|
|
184
|
-
const written = await fs.readFile(path.join(tmpRoot, "codex.yaml"), "utf8");
|
|
185
|
-
let codex;
|
|
186
|
-
try {
|
|
187
|
-
codex = parseCodexYaml(written);
|
|
188
|
-
}
|
|
189
|
-
catch (err) {
|
|
190
|
-
throw new CodexCliError(`converted SKILL.md failed validation: ${err instanceof Error ? err.message : String(err)}`, "this is a converter bug — please file an issue with the source SKILL.md attached");
|
|
191
|
-
}
|
|
192
|
-
const cleanup = async () => {
|
|
193
|
-
try {
|
|
194
|
-
await fs.rm(tmpRoot, { recursive: true, force: true });
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
// tmpdir cleanup is best-effort
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
return { codex, sourceRoot: tmpRoot, cleanup };
|
|
201
|
-
}
|
|
202
|
-
catch (err) {
|
|
203
|
-
try {
|
|
204
|
-
await fs.rm(tmpRoot, { recursive: true, force: true });
|
|
205
|
-
}
|
|
206
|
-
catch {
|
|
207
|
-
// best-effort
|
|
208
|
-
}
|
|
209
|
-
throw err;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Recursively copy a directory tree, preserving relative structure.
|
|
214
|
-
* Skips the source codex.yaml (we wrote a canonical version already).
|
|
215
|
-
* Used to bring lesson markdown bodies + companion files into the
|
|
216
|
-
* canonical codex storage directory.
|
|
217
|
-
*/
|
|
218
|
-
async function copyCodexContent(sourceRoot, destRoot) {
|
|
219
|
-
const entries = await fs.readdir(sourceRoot, { withFileTypes: true });
|
|
220
|
-
await fs.mkdir(destRoot, { recursive: true });
|
|
221
|
-
for (const entry of entries) {
|
|
222
|
-
// Skip the source manifest — installCodex already wrote a canonical one.
|
|
223
|
-
if (entry.name === "codex.yaml")
|
|
224
|
-
continue;
|
|
225
|
-
const src = path.join(sourceRoot, entry.name);
|
|
226
|
-
const dst = path.join(destRoot, entry.name);
|
|
227
|
-
if (entry.isDirectory()) {
|
|
228
|
-
await fs.cp(src, dst, { recursive: true });
|
|
229
|
-
}
|
|
230
|
-
else if (entry.isFile()) {
|
|
231
|
-
await fs.copyFile(src, dst);
|
|
232
|
-
}
|
|
233
|
-
// Symlinks / specials silently skipped — codexes shouldn't have them.
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
async function cmdInstall(args, opts) {
|
|
237
|
-
const source = args[0];
|
|
238
|
-
if (!source) {
|
|
239
|
-
throw new CodexCliError("usage: opensquid codex install <path> [--source skill_md|native]", "pass a directory containing codex.yaml or a SKILL.md file");
|
|
240
|
-
}
|
|
241
|
-
const { codex, sourceRoot, cleanup } = await loadCodexFromPath(source, opts.sourceKind);
|
|
242
|
-
try {
|
|
243
|
-
const { id, path: destDir } = await installCodex(codex, opts);
|
|
244
|
-
// Composite codexes have no companion content; skip the copy.
|
|
245
|
-
if (isFocusedCodex(codex)) {
|
|
246
|
-
await copyCodexContent(sourceRoot, destDir);
|
|
247
|
-
}
|
|
248
|
-
const provenance = isFocusedCodex(codex) && codex.source?.kind === "skill_md"
|
|
249
|
-
? ` (imported from SKILL.md/${codex.source.original_variant ?? "unknown"})`
|
|
250
|
-
: "";
|
|
251
|
-
console.log(`[opensquid codex install] installed ${id} v${codex.version} at ${destDir}${provenance}`);
|
|
252
|
-
// v0.4: seed lessons into the engine's lesson store so recall surfaces
|
|
253
|
-
// them. Composite codexes have no own lessons — the includes are
|
|
254
|
-
// independent installs (recursive install is a future enhancement).
|
|
255
|
-
if (isFocusedCodex(codex) && codex.seed_lessons && codex.seed_lessons.length > 0) {
|
|
256
|
-
if (opts.skipSeed) {
|
|
257
|
-
console.log(` [seed skipped] ${codex.seed_lessons.length} lesson(s) — pass --no-seed to skip`);
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
await seedLessonsIntoEngine(codex.seed_lessons, codex.id, destDir, opts);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
finally {
|
|
264
|
-
if (cleanup)
|
|
265
|
-
await cleanup();
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Iterate the codex's seed lessons and seed each into the engine's
|
|
270
|
-
* lesson store at `promoted` status via `lesson.create` with
|
|
271
|
-
* `authored_by: "pack"` + `seed_as_promoted: true`. The engine treats
|
|
272
|
-
* Pack provenance as user-equivalent (codex install = user authorship).
|
|
273
|
-
*/
|
|
274
|
-
/**
|
|
275
|
-
* Append a single seeded lesson's one-line summary to the user's
|
|
276
|
-
* CLAUDE.md `opensquid-rules` block. Exported for direct unit testing
|
|
277
|
-
* — covers the auto-publish behavior without spawning the real engine.
|
|
278
|
-
*
|
|
279
|
-
* Returns true if a new line was appended, false if it was an idempotent
|
|
280
|
-
* no-op (lesson id already present, or rules block missing). Failure is
|
|
281
|
-
* non-fatal and logged to stderr — CLAUDE.md is downstream display, not
|
|
282
|
-
* source of truth.
|
|
283
|
-
*/
|
|
284
|
-
export async function publishSeededLessonToClaudeMd(args, options = {}) {
|
|
285
|
-
if (!args.engineLessonId)
|
|
286
|
-
return false;
|
|
287
|
-
try {
|
|
288
|
-
const writeResult = await appendPromotedLessonToClaudeMd({
|
|
289
|
-
id: args.engineLessonId,
|
|
290
|
-
description: args.description,
|
|
291
|
-
promoted_at: args.createdAt,
|
|
292
|
-
}, { target: options.target });
|
|
293
|
-
return writeResult?.appended ?? false;
|
|
294
|
-
}
|
|
295
|
-
catch (err) {
|
|
296
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
297
|
-
console.error(` [claude-md publish failed] ${args.codexLessonId}: ${msg}`);
|
|
298
|
-
return false;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
async function seedLessonsIntoEngine(seedLessons, codexId, codexDestDir, opts = {}) {
|
|
302
|
-
const engine = new OpenSquidEngine();
|
|
303
|
-
let ok = 0;
|
|
304
|
-
let failed = 0;
|
|
305
|
-
let published = 0;
|
|
306
|
-
try {
|
|
307
|
-
for (const lesson of seedLessons) {
|
|
308
|
-
try {
|
|
309
|
-
const bodyPath = path.join(codexDestDir, lesson.body_path);
|
|
310
|
-
const body = await fs.readFile(bodyPath, "utf8");
|
|
311
|
-
const trigger = typeof lesson.trigger === "string"
|
|
312
|
-
? lesson.trigger
|
|
313
|
-
: (lesson.trigger.prescriptive_form ?? lesson.trigger.intent);
|
|
314
|
-
const result = await engine.createLesson({
|
|
315
|
-
description: `${trigger} (codex:${codexId})`,
|
|
316
|
-
body,
|
|
317
|
-
authored_by: "pack",
|
|
318
|
-
pack_id: codexId,
|
|
319
|
-
// v0.5/engine-v1.2: opaque per-pack lesson id so re-installing
|
|
320
|
-
// the same codex UPSERTs by (pack_id, external_id) instead of
|
|
321
|
-
// minting a new engine row each time. Preserves the engine
|
|
322
|
-
// lesson id across re-installs, which is what CLAUDE.md auto-
|
|
323
|
-
// publish dedupes on. Without this, re-install grew the
|
|
324
|
-
// CLAUDE.md rules block by N lines every refresh (#117).
|
|
325
|
-
external_id: lesson.id,
|
|
326
|
-
seed_as_promoted: true,
|
|
327
|
-
});
|
|
328
|
-
ok++;
|
|
329
|
-
// #116: auto-publish to CLAUDE.md so the promoted-lesson tier
|
|
330
|
-
// stays visible to the agent's system prompt without a recall
|
|
331
|
-
// round-trip. Mirrors the `lesson.promote` MCP tool's behavior.
|
|
332
|
-
if (!opts.skipClaudeMdPublish) {
|
|
333
|
-
const wasAppended = await publishSeededLessonToClaudeMd({
|
|
334
|
-
engineLessonId: result.id,
|
|
335
|
-
description: `${trigger} (codex:${codexId})`,
|
|
336
|
-
createdAt: result.created_at ??
|
|
337
|
-
new Date().toISOString(),
|
|
338
|
-
codexLessonId: lesson.id,
|
|
339
|
-
}, { target: opts.claudeMdPath });
|
|
340
|
-
if (wasAppended)
|
|
341
|
-
published++;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
catch (err) {
|
|
345
|
-
failed++;
|
|
346
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
347
|
-
console.error(` [seed failed] ${lesson.id}: ${msg}`);
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
finally {
|
|
352
|
-
engine.shutdown();
|
|
353
|
-
}
|
|
354
|
-
console.log(` [seeded] ${ok}/${seedLessons.length} lesson(s) into engine as promoted` +
|
|
355
|
-
(failed > 0 ? ` (${failed} failed)` : "") +
|
|
356
|
-
(published > 0 ? `; ${published} appended to CLAUDE.md` : ""));
|
|
357
|
-
}
|
|
358
|
-
async function cmdList(_args, opts) {
|
|
359
|
-
const ids = await listCodexes(opts);
|
|
360
|
-
if (ids.length === 0) {
|
|
361
|
-
console.log(`[opensquid codex list] no codexes installed at ${codexesDir(opts.rootDir)}`);
|
|
362
|
-
return;
|
|
363
|
-
}
|
|
364
|
-
console.log(`[opensquid codex list] ${ids.length} installed at ${codexesDir(opts.rootDir)}:`);
|
|
365
|
-
for (const id of ids) {
|
|
366
|
-
try {
|
|
367
|
-
const codex = await getCodex(id, opts);
|
|
368
|
-
const kindLabel = isCompositeCodex(codex) ? "composite" : "focused";
|
|
369
|
-
const foundation = isFocusedCodex(codex)
|
|
370
|
-
? summarizeFoundation(codex)
|
|
371
|
-
: `includes ${codex.includes?.length ?? 0}`;
|
|
372
|
-
console.log(` • ${id} v${codex.version} [${kindLabel}] ${foundation}`);
|
|
373
|
-
}
|
|
374
|
-
catch (err) {
|
|
375
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
376
|
-
console.log(` • ${id} [broken: ${msg}]`);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
async function cmdRemove(args, opts) {
|
|
381
|
-
const id = args[0];
|
|
382
|
-
if (!id) {
|
|
383
|
-
throw new CodexCliError("usage: opensquid codex remove <id>");
|
|
384
|
-
}
|
|
385
|
-
const removed = await removeCodex(id, opts);
|
|
386
|
-
if (removed) {
|
|
387
|
-
console.log(`[opensquid codex remove] removed ${id}`);
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
console.log(`[opensquid codex remove] ${id} was not installed — no-op`);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
/**
|
|
394
|
-
* v0.6: export an installed codex to a portable directory bundle.
|
|
395
|
-
*
|
|
396
|
-
* Output layout matches the install-source layout (codex.yaml at root +
|
|
397
|
-
* lessons/<id>/lesson.md tree), so `opensquid codex install <output>`
|
|
398
|
-
* round-trips cleanly. The bundle includes a `.opensquid-export.json`
|
|
399
|
-
* manifest with timestamp + opensquid version + source codex id for
|
|
400
|
-
* provenance — not load-bearing on import.
|
|
401
|
-
*/
|
|
402
|
-
async function cmdExport(args, opts) {
|
|
403
|
-
const id = args[0];
|
|
404
|
-
if (!id) {
|
|
405
|
-
throw new CodexCliError("usage: opensquid codex export <id> [--output <path>]", "pass the codex id (see `opensquid codex list`)");
|
|
406
|
-
}
|
|
407
|
-
// Validate the codex exists + load its parsed manifest.
|
|
408
|
-
let codex;
|
|
409
|
-
try {
|
|
410
|
-
codex = await getCodex(id, opts);
|
|
411
|
-
}
|
|
412
|
-
catch (err) {
|
|
413
|
-
if (err instanceof CodexStoreError && err.code === "NOT_FOUND") {
|
|
414
|
-
throw new CodexCliError(`codex '${id}' is not installed`, "see `opensquid codex list` for installed codexes");
|
|
415
|
-
}
|
|
416
|
-
throw err;
|
|
417
|
-
}
|
|
418
|
-
const sourceDir = codexDir(id, opts.rootDir);
|
|
419
|
-
const outputPath = opts.exportOutput ?? path.resolve(`${id}-v${codex.version}.codex`);
|
|
420
|
-
// Refuse to overwrite an existing path unless --force.
|
|
421
|
-
let outputExists = false;
|
|
422
|
-
try {
|
|
423
|
-
await fs.access(outputPath);
|
|
424
|
-
outputExists = true;
|
|
425
|
-
}
|
|
426
|
-
catch {
|
|
427
|
-
// doesn't exist, fine
|
|
428
|
-
}
|
|
429
|
-
if (outputExists && !opts.force) {
|
|
430
|
-
throw new CodexCliError(`output path already exists: ${outputPath}`, "pass --force to overwrite, or pick a different --output");
|
|
431
|
-
}
|
|
432
|
-
if (outputExists && opts.force) {
|
|
433
|
-
await fs.rm(outputPath, { recursive: true, force: true });
|
|
434
|
-
}
|
|
435
|
-
// Recursive copy of the canonical install dir.
|
|
436
|
-
await fs.mkdir(outputPath, { recursive: true });
|
|
437
|
-
await fs.cp(sourceDir, outputPath, { recursive: true });
|
|
438
|
-
// Write provenance manifest. Round-trip irrelevant — pure
|
|
439
|
-
// diagnostic. Importer is `opensquid codex install <output>` which
|
|
440
|
-
// ignores files outside codex.yaml + lessons/.
|
|
441
|
-
const exportManifest = {
|
|
442
|
-
exported_at: new Date().toISOString(),
|
|
443
|
-
exported_by: "opensquid codex export",
|
|
444
|
-
opensquid_version: "0.4.0",
|
|
445
|
-
source_codex_id: id,
|
|
446
|
-
source_codex_version: codex.version,
|
|
447
|
-
};
|
|
448
|
-
await fs.writeFile(path.join(outputPath, ".opensquid-export.json"), JSON.stringify(exportManifest, null, 2) + "\n", "utf8");
|
|
449
|
-
console.log(`[opensquid codex export] exported ${id} v${codex.version} → ${outputPath}`);
|
|
450
|
-
console.log(` re-import via: opensquid codex install ${outputPath}`);
|
|
451
|
-
}
|
|
452
|
-
async function cmdDoctor(args, opts) {
|
|
453
|
-
const root = resolveDataRoot(opts.rootDir);
|
|
454
|
-
const id = args[0];
|
|
455
|
-
if (id) {
|
|
456
|
-
try {
|
|
457
|
-
const codex = await getCodex(id, opts);
|
|
458
|
-
console.log(`[opensquid codex doctor] ${id}`);
|
|
459
|
-
console.log(` version: ${codex.version}`);
|
|
460
|
-
console.log(` kind: ${codex.kind ?? "focused"}`);
|
|
461
|
-
console.log(` location: ${codexDir(id, opts.rootDir)}`);
|
|
462
|
-
if (isFocusedCodex(codex)) {
|
|
463
|
-
console.log(` foundation: ${summarizeFoundation(codex)}`);
|
|
464
|
-
console.log(` detected_by: ${(codex.detected_by ?? []).length} signal(s)`);
|
|
465
|
-
console.log(` seed_lessons: ${(codex.seed_lessons ?? []).length}`);
|
|
466
|
-
console.log(` verify_gates: ${(codex.verify_gates ?? []).length}`);
|
|
467
|
-
}
|
|
468
|
-
return;
|
|
469
|
-
}
|
|
470
|
-
catch (err) {
|
|
471
|
-
if (err instanceof CodexStoreError && err.code === "NOT_FOUND") {
|
|
472
|
-
console.log(`[opensquid codex doctor] ${id} is not installed`);
|
|
473
|
-
return;
|
|
474
|
-
}
|
|
475
|
-
throw err;
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
const ids = await listCodexes(opts);
|
|
479
|
-
console.log(`[opensquid codex doctor] root: ${root}`);
|
|
480
|
-
console.log(` installed: ${ids.length}`);
|
|
481
|
-
for (const cid of ids) {
|
|
482
|
-
console.log(` • ${cid}`);
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
// ---------------------------------------------------------------------
|
|
486
|
-
// Helpers
|
|
487
|
-
// ---------------------------------------------------------------------
|
|
488
|
-
function summarizeFoundation(codex) {
|
|
489
|
-
if (!isFocusedCodex(codex) || !codex.foundation)
|
|
490
|
-
return "(none)";
|
|
491
|
-
const parts = [];
|
|
492
|
-
const f = codex.foundation;
|
|
493
|
-
if (f.tools && f.tools.length > 0) {
|
|
494
|
-
parts.push(`tools=[${f.tools.map((t) => t.name).join(",")}]`);
|
|
495
|
-
}
|
|
496
|
-
if (f.domains && f.domains.length > 0) {
|
|
497
|
-
parts.push(`domains=[${f.domains.join(",")}]`);
|
|
498
|
-
}
|
|
499
|
-
if (f.methodologies && f.methodologies.length > 0) {
|
|
500
|
-
parts.push(`methodologies=[${f.methodologies.join(",")}]`);
|
|
501
|
-
}
|
|
502
|
-
return parts.length === 0 ? "(empty)" : parts.join(" ");
|
|
503
|
-
}
|
|
504
|
-
function parseFlags(argv) {
|
|
505
|
-
const args = [];
|
|
506
|
-
const opts = {};
|
|
507
|
-
for (let i = 0; i < argv.length; i++) {
|
|
508
|
-
const a = argv[i];
|
|
509
|
-
if (a === "--force") {
|
|
510
|
-
opts.force = true;
|
|
511
|
-
}
|
|
512
|
-
else if (a === "--no-seed") {
|
|
513
|
-
opts.skipSeed = true;
|
|
514
|
-
}
|
|
515
|
-
else if (a === "--root" && argv[i + 1]) {
|
|
516
|
-
opts.rootDir = argv[++i];
|
|
517
|
-
}
|
|
518
|
-
else if ((a === "--output" || a === "-o") && argv[i + 1]) {
|
|
519
|
-
opts.exportOutput = argv[++i];
|
|
520
|
-
}
|
|
521
|
-
else if (a === "--source" && argv[i + 1]) {
|
|
522
|
-
const v = argv[++i];
|
|
523
|
-
if (v !== "skill_md" && v !== "native") {
|
|
524
|
-
throw new CodexCliError(`--source must be 'skill_md' or 'native', got '${v}'`, "omit --source for auto-detection (codex.yaml → native, SKILL.md → skill_md)");
|
|
525
|
-
}
|
|
526
|
-
opts.sourceKind = v;
|
|
527
|
-
}
|
|
528
|
-
else {
|
|
529
|
-
args.push(a);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
return { args, opts };
|
|
533
|
-
}
|
|
534
|
-
export async function runCodexCli(cmd, argv) {
|
|
535
|
-
const { args, opts } = parseFlags(argv);
|
|
536
|
-
switch (cmd) {
|
|
537
|
-
case "install":
|
|
538
|
-
await cmdInstall(args, opts);
|
|
539
|
-
return;
|
|
540
|
-
case "list":
|
|
541
|
-
await cmdList(args, opts);
|
|
542
|
-
return;
|
|
543
|
-
case "remove":
|
|
544
|
-
await cmdRemove(args, opts);
|
|
545
|
-
return;
|
|
546
|
-
case "doctor":
|
|
547
|
-
await cmdDoctor(args, opts);
|
|
548
|
-
return;
|
|
549
|
-
case "export":
|
|
550
|
-
await cmdExport(args, opts);
|
|
551
|
-
return;
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/codex/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src.legacy/codex/cli.ts"],"names":[],"mappings":"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"}
|