@kya-os/cli 1.8.1 → 1.8.3
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/dist/commands/agent.d.ts +35 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +321 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/build.js +2 -2
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.js +3 -3
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/checkpoint-init.d.ts +1 -1
- package/dist/commands/checkpoint-init.d.ts.map +1 -1
- package/dist/commands/checkpoint-init.js +8 -41
- package/dist/commands/checkpoint-init.js.map +1 -1
- package/dist/commands/claim.js +2 -2
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/dco.d.ts +59 -0
- package/dist/commands/dco.d.ts.map +1 -1
- package/dist/commands/dco.js +280 -5
- package/dist/commands/dco.js.map +1 -1
- package/dist/commands/dev.js +1 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +18 -24
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/env.js +6 -6
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/identity.js +3 -3
- package/dist/commands/identity.js.map +1 -1
- package/dist/commands/init-stages.d.ts +141 -0
- package/dist/commands/init-stages.d.ts.map +1 -0
- package/dist/commands/init-stages.js +684 -0
- package/dist/commands/init-stages.js.map +1 -0
- package/dist/commands/init.d.ts +46 -16
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +229 -279
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/orchestrator.d.ts +18 -0
- package/dist/commands/orchestrator.d.ts.map +1 -0
- package/dist/commands/orchestrator.js +251 -0
- package/dist/commands/orchestrator.js.map +1 -0
- package/dist/commands/register.d.ts +1 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +35 -7
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/review.d.ts +48 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +220 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/rotate.js +4 -4
- package/dist/commands/rotate.js.map +1 -1
- package/dist/commands/score.d.ts +15 -0
- package/dist/commands/score.d.ts.map +1 -0
- package/dist/commands/score.js +471 -0
- package/dist/commands/score.js.map +1 -0
- package/dist/commands/start.js +3 -3
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/verify.js +6 -6
- package/dist/commands/verify.js.map +1 -1
- package/dist/dco.d.ts +4 -0
- package/dist/dco.d.ts.map +1 -0
- package/dist/dco.js +23 -0
- package/dist/dco.js.map +1 -0
- package/dist/index.js +52 -9
- package/dist/orchestrator/daemon.d.ts +137 -0
- package/dist/orchestrator/daemon.d.ts.map +1 -0
- package/dist/orchestrator/daemon.js +242 -0
- package/dist/orchestrator/daemon.js.map +1 -0
- package/dist/orchestrator/db/dispatches.d.ts +108 -0
- package/dist/orchestrator/db/dispatches.d.ts.map +1 -0
- package/dist/orchestrator/db/dispatches.js +122 -0
- package/dist/orchestrator/db/dispatches.js.map +1 -0
- package/dist/orchestrator/db/index.d.ts +50 -0
- package/dist/orchestrator/db/index.d.ts.map +1 -0
- package/dist/orchestrator/db/index.js +116 -0
- package/dist/orchestrator/db/index.js.map +1 -0
- package/dist/orchestrator/db/journal.d.ts +93 -0
- package/dist/orchestrator/db/journal.d.ts.map +1 -0
- package/dist/orchestrator/db/journal.js +91 -0
- package/dist/orchestrator/db/journal.js.map +1 -0
- package/dist/orchestrator/db/liveness.d.ts +97 -0
- package/dist/orchestrator/db/liveness.d.ts.map +1 -0
- package/dist/orchestrator/db/liveness.js +105 -0
- package/dist/orchestrator/db/liveness.js.map +1 -0
- package/dist/orchestrator/db/mission.d.ts +78 -0
- package/dist/orchestrator/db/mission.d.ts.map +1 -0
- package/dist/orchestrator/db/mission.js +99 -0
- package/dist/orchestrator/db/mission.js.map +1 -0
- package/dist/orchestrator/db/schema.d.ts +14 -0
- package/dist/orchestrator/db/schema.d.ts.map +1 -0
- package/dist/orchestrator/db/schema.js +169 -0
- package/dist/orchestrator/db/schema.js.map +1 -0
- package/dist/orchestrator/db/tickets.d.ts +147 -0
- package/dist/orchestrator/db/tickets.d.ts.map +1 -0
- package/dist/orchestrator/db/tickets.js +238 -0
- package/dist/orchestrator/db/tickets.js.map +1 -0
- package/dist/orchestrator/db/verdicts.d.ts +187 -0
- package/dist/orchestrator/db/verdicts.d.ts.map +1 -0
- package/dist/orchestrator/db/verdicts.js +197 -0
- package/dist/orchestrator/db/verdicts.js.map +1 -0
- package/dist/orchestrator/events.d.ts +69 -0
- package/dist/orchestrator/events.d.ts.map +1 -0
- package/dist/orchestrator/events.js +20 -0
- package/dist/orchestrator/events.js.map +1 -0
- package/dist/orchestrator/github-credential-anchor-sender.d.ts +159 -0
- package/dist/orchestrator/github-credential-anchor-sender.d.ts.map +1 -0
- package/dist/orchestrator/github-credential-anchor-sender.js +313 -0
- package/dist/orchestrator/github-credential-anchor-sender.js.map +1 -0
- package/dist/orchestrator/hub-dispatch.d.ts +120 -0
- package/dist/orchestrator/hub-dispatch.d.ts.map +1 -0
- package/dist/orchestrator/hub-dispatch.js +257 -0
- package/dist/orchestrator/hub-dispatch.js.map +1 -0
- package/dist/orchestrator/hub-observer.d.ts +201 -0
- package/dist/orchestrator/hub-observer.d.ts.map +1 -0
- package/dist/orchestrator/hub-observer.js +474 -0
- package/dist/orchestrator/hub-observer.js.map +1 -0
- package/dist/orchestrator/journal-writer.d.ts +80 -0
- package/dist/orchestrator/journal-writer.d.ts.map +1 -0
- package/dist/orchestrator/journal-writer.js +113 -0
- package/dist/orchestrator/journal-writer.js.map +1 -0
- package/dist/orchestrator/mcp/server.d.ts +136 -0
- package/dist/orchestrator/mcp/server.d.ts.map +1 -0
- package/dist/orchestrator/mcp/server.js +582 -0
- package/dist/orchestrator/mcp/server.js.map +1 -0
- package/dist/orchestrator/mcp/stdio.d.ts +22 -0
- package/dist/orchestrator/mcp/stdio.d.ts.map +1 -0
- package/dist/orchestrator/mcp/stdio.js +51 -0
- package/dist/orchestrator/mcp/stdio.js.map +1 -0
- package/dist/orchestrator/review.d.ts +131 -0
- package/dist/orchestrator/review.d.ts.map +1 -0
- package/dist/orchestrator/review.js +322 -0
- package/dist/orchestrator/review.js.map +1 -0
- package/dist/tui/app.d.ts +33 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +71 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/components.d.ts +110 -0
- package/dist/tui/components.d.ts.map +1 -0
- package/dist/tui/components.js +118 -0
- package/dist/tui/components.js.map +1 -0
- package/dist/tui/index.d.ts +30 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +95 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/keymap.d.ts +33 -0
- package/dist/tui/keymap.d.ts.map +1 -0
- package/dist/tui/keymap.js +49 -0
- package/dist/tui/keymap.js.map +1 -0
- package/dist/tui/nav.d.ts +29 -0
- package/dist/tui/nav.d.ts.map +1 -0
- package/dist/tui/nav.js +39 -0
- package/dist/tui/nav.js.map +1 -0
- package/dist/tui/sanitize.d.ts +25 -0
- package/dist/tui/sanitize.d.ts.map +1 -0
- package/dist/tui/sanitize.js +36 -0
- package/dist/tui/sanitize.js.map +1 -0
- package/dist/tui/theme.d.ts +32 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +63 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/views/agents.d.ts +67 -0
- package/dist/tui/views/agents.d.ts.map +1 -0
- package/dist/tui/views/agents.js +231 -0
- package/dist/tui/views/agents.js.map +1 -0
- package/dist/tui/views/index.d.ts +93 -0
- package/dist/tui/views/index.d.ts.map +1 -0
- package/dist/tui/views/index.js +150 -0
- package/dist/tui/views/index.js.map +1 -0
- package/dist/tui/views/registry.d.ts +22 -0
- package/dist/tui/views/registry.d.ts.map +1 -0
- package/dist/tui/views/registry.js +110 -0
- package/dist/tui/views/registry.js.map +1 -0
- package/dist/utils/agent/backoff.d.ts +31 -0
- package/dist/utils/agent/backoff.d.ts.map +1 -0
- package/dist/utils/agent/backoff.js +51 -0
- package/dist/utils/agent/backoff.js.map +1 -0
- package/dist/utils/agent/markers.d.ts +87 -0
- package/dist/utils/agent/markers.d.ts.map +1 -0
- package/dist/utils/agent/markers.js +147 -0
- package/dist/utils/agent/markers.js.map +1 -0
- package/dist/utils/agent/review.d.ts +67 -0
- package/dist/utils/agent/review.d.ts.map +1 -0
- package/dist/utils/agent/review.js +305 -0
- package/dist/utils/agent/review.js.map +1 -0
- package/dist/utils/agent/spawn-agent.d.ts +117 -0
- package/dist/utils/agent/spawn-agent.d.ts.map +1 -0
- package/dist/utils/agent/spawn-agent.js +177 -0
- package/dist/utils/agent/spawn-agent.js.map +1 -0
- package/dist/utils/agent/task.d.ts +101 -0
- package/dist/utils/agent/task.d.ts.map +1 -0
- package/dist/utils/agent/task.js +357 -0
- package/dist/utils/agent/task.js.map +1 -0
- package/dist/utils/agent/verify.d.ts +47 -0
- package/dist/utils/agent/verify.d.ts.map +1 -0
- package/dist/utils/agent/verify.js +144 -0
- package/dist/utils/agent/verify.js.map +1 -0
- package/dist/utils/agent-detector.d.ts +48 -0
- package/dist/utils/agent-detector.d.ts.map +1 -0
- package/dist/utils/agent-detector.js +74 -0
- package/dist/utils/agent-detector.js.map +1 -0
- package/dist/utils/agent-profile-stage.d.ts +70 -0
- package/dist/utils/agent-profile-stage.d.ts.map +1 -0
- package/dist/utils/agent-profile-stage.js +153 -0
- package/dist/utils/agent-profile-stage.js.map +1 -0
- package/dist/utils/agent-profiles.d.ts +27 -0
- package/dist/utils/agent-profiles.d.ts.map +1 -0
- package/dist/utils/agent-profiles.js +61 -0
- package/dist/utils/agent-profiles.js.map +1 -0
- package/dist/utils/checkpoint-api.d.ts +1 -1
- package/dist/utils/checkpoint-api.js +1 -1
- package/dist/utils/checkpoint-env.d.ts +1 -1
- package/dist/utils/checkpoint-env.js +2 -2
- package/dist/utils/checkpoint-env.js.map +1 -1
- package/dist/utils/checkpoint-scaffold.d.ts +1 -1
- package/dist/utils/checkpoint-scaffold.js +1 -1
- package/dist/utils/cli-kit/browser.d.ts +24 -0
- package/dist/utils/cli-kit/browser.d.ts.map +1 -0
- package/dist/utils/cli-kit/browser.js +58 -0
- package/dist/utils/cli-kit/browser.js.map +1 -0
- package/dist/utils/cli-kit/claim-polling.d.ts +18 -0
- package/dist/utils/cli-kit/claim-polling.d.ts.map +1 -0
- package/dist/utils/{claim-polling.js → cli-kit/claim-polling.js} +19 -26
- package/dist/utils/cli-kit/claim-polling.js.map +1 -0
- package/dist/utils/cli-kit/diagnostics.d.ts +9 -0
- package/dist/utils/cli-kit/diagnostics.d.ts.map +1 -0
- package/dist/utils/cli-kit/diagnostics.js +11 -0
- package/dist/utils/cli-kit/diagnostics.js.map +1 -0
- package/dist/utils/cli-kit/fs-safe.d.ts +14 -0
- package/dist/utils/cli-kit/fs-safe.d.ts.map +1 -0
- package/dist/utils/cli-kit/fs-safe.js +20 -0
- package/dist/utils/cli-kit/fs-safe.js.map +1 -0
- package/dist/utils/cli-kit/index.d.ts +15 -0
- package/dist/utils/cli-kit/index.d.ts.map +1 -0
- package/dist/utils/cli-kit/index.js +10 -0
- package/dist/utils/cli-kit/index.js.map +1 -0
- package/dist/utils/cli-kit/json-file.d.ts +21 -0
- package/dist/utils/cli-kit/json-file.d.ts.map +1 -0
- package/dist/utils/cli-kit/json-file.js +51 -0
- package/dist/utils/cli-kit/json-file.js.map +1 -0
- package/dist/utils/cli-kit/marker-block.d.ts +26 -0
- package/dist/utils/cli-kit/marker-block.d.ts.map +1 -0
- package/dist/utils/cli-kit/marker-block.js +61 -0
- package/dist/utils/cli-kit/marker-block.js.map +1 -0
- package/dist/utils/cli-kit/paths.d.ts +15 -0
- package/dist/utils/cli-kit/paths.d.ts.map +1 -0
- package/dist/utils/cli-kit/paths.js +21 -0
- package/dist/utils/cli-kit/paths.js.map +1 -0
- package/dist/utils/cli-kit/secure-storage.d.ts +14 -0
- package/dist/utils/cli-kit/secure-storage.d.ts.map +1 -0
- package/dist/utils/cli-kit/secure-storage.js +20 -0
- package/dist/utils/cli-kit/secure-storage.js.map +1 -0
- package/dist/utils/cli-kit/step-report.d.ts +16 -0
- package/dist/utils/cli-kit/step-report.d.ts.map +1 -0
- package/dist/utils/cli-kit/step-report.js +36 -0
- package/dist/utils/cli-kit/step-report.js.map +1 -0
- package/dist/utils/dco/agent-metadata.d.ts +1 -1
- package/dist/utils/dco/agent-metadata.js +1 -1
- package/dist/utils/dco/agent-metadata.js.map +1 -1
- package/dist/utils/dco/claude-config.d.ts +18 -14
- package/dist/utils/dco/claude-config.d.ts.map +1 -1
- package/dist/utils/dco/claude-config.js +31 -97
- package/dist/utils/dco/claude-config.js.map +1 -1
- package/dist/utils/dco/dispatch.d.ts +134 -0
- package/dist/utils/dco/dispatch.d.ts.map +1 -0
- package/dist/utils/dco/dispatch.js +399 -0
- package/dist/utils/dco/dispatch.js.map +1 -0
- package/dist/utils/dco/fix.d.ts +122 -0
- package/dist/utils/dco/fix.d.ts.map +1 -0
- package/dist/utils/dco/fix.js +560 -0
- package/dist/utils/dco/fix.js.map +1 -0
- package/dist/utils/dco/git-config.d.ts.map +1 -1
- package/dist/utils/dco/git-config.js +5 -3
- package/dist/utils/dco/git-config.js.map +1 -1
- package/dist/utils/dco/github.d.ts +101 -0
- package/dist/utils/dco/github.d.ts.map +1 -1
- package/dist/utils/dco/github.js +133 -0
- package/dist/utils/dco/github.js.map +1 -1
- package/dist/utils/dco/paths.d.ts +1 -8
- package/dist/utils/dco/paths.d.ts.map +1 -1
- package/dist/utils/dco/paths.js +3 -12
- package/dist/utils/dco/paths.js.map +1 -1
- package/dist/utils/dco/render.d.ts +1 -1
- package/dist/utils/dco/render.d.ts.map +1 -1
- package/dist/utils/dco/render.js +4 -21
- package/dist/utils/dco/render.js.map +1 -1
- package/dist/utils/dco/resolve-agent.d.ts +54 -0
- package/dist/utils/dco/resolve-agent.d.ts.map +1 -0
- package/dist/utils/dco/resolve-agent.js +164 -0
- package/dist/utils/dco/resolve-agent.js.map +1 -0
- package/dist/utils/dco/setup.d.ts +10 -7
- package/dist/utils/dco/setup.d.ts.map +1 -1
- package/dist/utils/dco/setup.js +264 -200
- package/dist/utils/dco/setup.js.map +1 -1
- package/dist/utils/dco/signing-key-writer.d.ts +40 -0
- package/dist/utils/dco/signing-key-writer.d.ts.map +1 -0
- package/dist/utils/dco/signing-key-writer.js +76 -0
- package/dist/utils/dco/signing-key-writer.js.map +1 -0
- package/dist/utils/dco/ssh-key.d.ts +50 -0
- package/dist/utils/dco/ssh-key.d.ts.map +1 -1
- package/dist/utils/dco/ssh-key.js +129 -8
- package/dist/utils/dco/ssh-key.js.map +1 -1
- package/dist/utils/dco/status.d.ts +1 -1
- package/dist/utils/dco/status.d.ts.map +1 -1
- package/dist/utils/dco/status.js +3 -3
- package/dist/utils/dco/status.js.map +1 -1
- package/dist/utils/dco/verify.d.ts +170 -0
- package/dist/utils/dco/verify.d.ts.map +1 -0
- package/dist/utils/dco/verify.js +550 -0
- package/dist/utils/dco/verify.js.map +1 -0
- package/dist/utils/dependency-installer.d.ts +37 -0
- package/dist/utils/dependency-installer.d.ts.map +1 -0
- package/dist/utils/dependency-installer.js +32 -0
- package/dist/utils/dependency-installer.js.map +1 -0
- package/dist/utils/github-credential-stage.d.ts +87 -0
- package/dist/utils/github-credential-stage.d.ts.map +1 -0
- package/dist/utils/github-credential-stage.js +168 -0
- package/dist/utils/github-credential-stage.js.map +1 -0
- package/dist/utils/github-credential.d.ts +160 -0
- package/dist/utils/github-credential.d.ts.map +1 -0
- package/dist/utils/github-credential.js +308 -0
- package/dist/utils/github-credential.js.map +1 -0
- package/dist/utils/gitignore.d.ts +17 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +40 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/hub-config.d.ts +21 -0
- package/dist/utils/hub-config.d.ts.map +1 -0
- package/dist/utils/hub-config.js +28 -0
- package/dist/utils/hub-config.js.map +1 -0
- package/dist/utils/identity-heal.d.ts +16 -0
- package/dist/utils/identity-heal.d.ts.map +1 -0
- package/dist/utils/identity-heal.js +37 -0
- package/dist/utils/identity-heal.js.map +1 -0
- package/dist/utils/init/pipeline.d.ts +74 -0
- package/dist/utils/init/pipeline.d.ts.map +1 -0
- package/dist/utils/init/pipeline.js +96 -0
- package/dist/utils/init/pipeline.js.map +1 -0
- package/dist/utils/poll.d.ts +15 -1
- package/dist/utils/poll.d.ts.map +1 -1
- package/dist/utils/poll.js +6 -3
- package/dist/utils/poll.js.map +1 -1
- package/dist/utils/register-agent-identity.d.ts +67 -0
- package/dist/utils/register-agent-identity.d.ts.map +1 -0
- package/dist/utils/register-agent-identity.js +34 -0
- package/dist/utils/register-agent-identity.js.map +1 -0
- package/dist/utils/review/did-web-key.d.ts +34 -0
- package/dist/utils/review/did-web-key.d.ts.map +1 -0
- package/dist/utils/review/did-web-key.js +104 -0
- package/dist/utils/review/did-web-key.js.map +1 -0
- package/dist/utils/review/load-registry.d.ts +33 -0
- package/dist/utils/review/load-registry.d.ts.map +1 -0
- package/dist/utils/review/load-registry.js +62 -0
- package/dist/utils/review/load-registry.js.map +1 -0
- package/dist/utils/review/verdict-verify.d.ts +43 -0
- package/dist/utils/review/verdict-verify.d.ts.map +1 -0
- package/dist/utils/review/verdict-verify.js +53 -0
- package/dist/utils/review/verdict-verify.js.map +1 -0
- package/dist/utils/review-registry-writer.d.ts +52 -0
- package/dist/utils/review-registry-writer.d.ts.map +1 -0
- package/dist/utils/review-registry-writer.js +79 -0
- package/dist/utils/review-registry-writer.js.map +1 -0
- package/dist/utils/should-install-dependency.d.ts +17 -0
- package/dist/utils/should-install-dependency.d.ts.map +1 -0
- package/dist/utils/should-install-dependency.js +25 -0
- package/dist/utils/should-install-dependency.js.map +1 -0
- package/dist/utils/tool-readiness.d.ts +57 -0
- package/dist/utils/tool-readiness.d.ts.map +1 -0
- package/dist/utils/tool-readiness.js +114 -0
- package/dist/utils/tool-readiness.js.map +1 -0
- package/dist/utils/which.d.ts +2 -0
- package/dist/utils/which.d.ts.map +1 -0
- package/dist/utils/which.js +22 -0
- package/dist/utils/which.js.map +1 -0
- package/dist/version.d.ts +15 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +29 -0
- package/dist/version.js.map +1 -0
- package/package.json +19 -6
- package/dist/utils/claim-polling.d.ts +0 -21
- package/dist/utils/claim-polling.d.ts.map +0 -1
- package/dist/utils/claim-polling.js.map +0 -1
- package/dist/utils/dco/fs-safe.d.ts +0 -14
- package/dist/utils/dco/fs-safe.d.ts.map +0 -1
- package/dist/utils/dco/fs-safe.js +0 -20
- package/dist/utils/dco/fs-safe.js.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import ora from "ora";
|
|
3
3
|
/**
|
|
4
|
-
* Poll
|
|
4
|
+
* Poll a claim-status endpoint until claimed, timed out, or interrupted.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Endpoint-agnostic: `endpoint` is the base URL and `statusPath` builds the
|
|
7
|
+
* per-check path from it, so a caller can point this at knowthat.ai's
|
|
8
|
+
* `/api/agents/:slug` today or a Checkpoint `/api/v1/cli/claim-status`
|
|
9
|
+
* tomorrow without forking the polling logic. A response is "claimed" when
|
|
10
|
+
* `isClaimed` returns true for its parsed JSON body.
|
|
8
11
|
*
|
|
9
|
-
*
|
|
10
|
-
* @param did - The agent's DID
|
|
11
|
-
* @param endpoint - API endpoint URL (default: https://knowthat.ai)
|
|
12
|
-
* @param options - Polling options
|
|
12
|
+
* Returns true when claimed, false on timeout or user interrupt (Ctrl+C).
|
|
13
13
|
*/
|
|
14
|
-
export async function pollForClaimStatus(
|
|
14
|
+
export async function pollForClaimStatus(statusUrl, isClaimed, options = {}) {
|
|
15
15
|
const { verbose = false, maxAttempts = 60, // 5 minutes at 5 second intervals
|
|
16
16
|
pollInterval = 5000, // 5 seconds
|
|
17
17
|
} = options;
|
|
@@ -26,12 +26,11 @@ export async function pollForClaimStatus(agentName, did, endpoint = "https://kno
|
|
|
26
26
|
skipPolling = true;
|
|
27
27
|
spinner.warn(chalk.yellow("⏭️ Skipping claim check..."));
|
|
28
28
|
};
|
|
29
|
-
process.on(
|
|
29
|
+
process.on("SIGINT", handleInterrupt);
|
|
30
30
|
try {
|
|
31
31
|
while (attempts < maxAttempts && !skipPolling) {
|
|
32
32
|
try {
|
|
33
|
-
const
|
|
34
|
-
const response = await fetch(statusCheckUrl.toString(), {
|
|
33
|
+
const response = await fetch(statusUrl, {
|
|
35
34
|
method: "GET",
|
|
36
35
|
headers: {
|
|
37
36
|
"User-Agent": "kya-os-cli",
|
|
@@ -41,25 +40,19 @@ export async function pollForClaimStatus(agentName, did, endpoint = "https://kno
|
|
|
41
40
|
if (response.ok) {
|
|
42
41
|
const data = await response.json();
|
|
43
42
|
if (verbose) {
|
|
44
|
-
console.log(chalk.gray(`\n[DEBUG]
|
|
43
|
+
console.log(chalk.gray(`\n[DEBUG] Claim status:`));
|
|
45
44
|
console.log(chalk.gray(JSON.stringify(data, null, 2)));
|
|
46
45
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
(
|
|
50
|
-
data.status === 'active' ||
|
|
51
|
-
data.owner ||
|
|
52
|
-
data.claimedAt ||
|
|
53
|
-
data.isDraft === false)) {
|
|
54
|
-
spinner.succeed(chalk.green("✅ Agent claimed successfully!"));
|
|
55
|
-
process.removeListener('SIGINT', handleInterrupt);
|
|
46
|
+
if (isClaimed(data)) {
|
|
47
|
+
spinner.succeed(chalk.green("✅ Claimed successfully!"));
|
|
48
|
+
process.removeListener("SIGINT", handleInterrupt);
|
|
56
49
|
return true;
|
|
57
50
|
}
|
|
58
51
|
}
|
|
59
52
|
else if (response.status === 404) {
|
|
60
|
-
//
|
|
53
|
+
// Not found yet - might not be indexed yet, continue polling
|
|
61
54
|
if (verbose) {
|
|
62
|
-
console.log(chalk.gray(`\n[DEBUG]
|
|
55
|
+
console.log(chalk.gray(`\n[DEBUG] Not found yet (404), continuing...`));
|
|
63
56
|
}
|
|
64
57
|
}
|
|
65
58
|
}
|
|
@@ -79,17 +72,17 @@ export async function pollForClaimStatus(agentName, did, endpoint = "https://kno
|
|
|
79
72
|
.toString()
|
|
80
73
|
.padStart(2, "0")} remaining)`;
|
|
81
74
|
}
|
|
82
|
-
process.removeListener(
|
|
75
|
+
process.removeListener("SIGINT", handleInterrupt);
|
|
83
76
|
if (skipPolling) {
|
|
84
77
|
console.log(chalk.gray("\n You can complete the claim process later."));
|
|
85
78
|
return false;
|
|
86
79
|
}
|
|
87
80
|
spinner.warn(chalk.yellow("⏱️ Claim check timed out"));
|
|
88
|
-
console.log(chalk.gray("\n Don't worry! You can still
|
|
81
|
+
console.log(chalk.gray("\n Don't worry! You can still complete the claim."));
|
|
89
82
|
return false;
|
|
90
83
|
}
|
|
91
84
|
catch (error) {
|
|
92
|
-
process.removeListener(
|
|
85
|
+
process.removeListener("SIGINT", handleInterrupt);
|
|
93
86
|
spinner.fail("Claim polling failed");
|
|
94
87
|
throw error;
|
|
95
88
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-polling.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/claim-polling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run a named set of async checks in parallel and collect their results
|
|
3
|
+
* under the same keys, e.g. `doctor`-style commands that report several
|
|
4
|
+
* independent health checks (packages, connectivity, config, ...) at once.
|
|
5
|
+
*/
|
|
6
|
+
export declare function runDiagnosticChecks<T extends Record<string, unknown>>(checks: {
|
|
7
|
+
[K in keyof T]: () => Promise<T[K]>;
|
|
8
|
+
}): Promise<T>;
|
|
9
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,MAAM,EAAE;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC9C,OAAO,CAAC,CAAC,CAAC,CAIZ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run a named set of async checks in parallel and collect their results
|
|
3
|
+
* under the same keys, e.g. `doctor`-style commands that report several
|
|
4
|
+
* independent health checks (packages, connectivity, config, ...) at once.
|
|
5
|
+
*/
|
|
6
|
+
export async function runDiagnosticChecks(checks) {
|
|
7
|
+
const keys = Object.keys(checks);
|
|
8
|
+
const values = await Promise.all(keys.map((key) => checks[key]()));
|
|
9
|
+
return Object.fromEntries(keys.map((key, i) => [key, values[i]]));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA+C;IAE/C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAgB,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAM,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic, symlink-safe file replace.
|
|
3
|
+
*
|
|
4
|
+
* The destination and its temp sibling may live in an untrusted working
|
|
5
|
+
* tree (e.g. a cloned repo). A tracked symlink planted at the predictable
|
|
6
|
+
* `<path>.mcpi-tmp` sibling would otherwise make a plain writeFileSync
|
|
7
|
+
* follow it and clobber an arbitrary file the caller can write. So: unlink
|
|
8
|
+
* any pre-existing temp (rmSync removes the link itself, never its
|
|
9
|
+
* target), then create it with O_EXCL (`wx`) so a planted or racing
|
|
10
|
+
* symlink makes the write fail closed instead of being followed.
|
|
11
|
+
* renameSync replaces the destination without following a symlink there.
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeFileAtomicSafe(path: string, content: string, mode?: number): void;
|
|
14
|
+
//# sourceMappingURL=fs-safe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-safe.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/fs-safe.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,SAAQ,GACX,IAAI,CAKN"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { renameSync, rmSync, writeFileSync } from "fs";
|
|
2
|
+
/**
|
|
3
|
+
* Atomic, symlink-safe file replace.
|
|
4
|
+
*
|
|
5
|
+
* The destination and its temp sibling may live in an untrusted working
|
|
6
|
+
* tree (e.g. a cloned repo). A tracked symlink planted at the predictable
|
|
7
|
+
* `<path>.mcpi-tmp` sibling would otherwise make a plain writeFileSync
|
|
8
|
+
* follow it and clobber an arbitrary file the caller can write. So: unlink
|
|
9
|
+
* any pre-existing temp (rmSync removes the link itself, never its
|
|
10
|
+
* target), then create it with O_EXCL (`wx`) so a planted or racing
|
|
11
|
+
* symlink makes the write fail closed instead of being followed.
|
|
12
|
+
* renameSync replaces the destination without following a symlink there.
|
|
13
|
+
*/
|
|
14
|
+
export function writeFileAtomicSafe(path, content, mode = 0o644) {
|
|
15
|
+
const tempPath = `${path}.mcpi-tmp`;
|
|
16
|
+
rmSync(tempPath, { force: true });
|
|
17
|
+
writeFileSync(tempPath, content, { flag: "wx", mode });
|
|
18
|
+
renameSync(tempPath, path);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=fs-safe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-safe.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/fs-safe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,OAAe,EACf,IAAI,GAAG,KAAK;IAEZ,MAAM,QAAQ,GAAG,GAAG,IAAI,WAAW,CAAC;IACpC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { writeFileAtomicSafe } from "./fs-safe.js";
|
|
2
|
+
export { upsertMarkerBlock } from "./marker-block.js";
|
|
3
|
+
export type { UpsertResult } from "./marker-block.js";
|
|
4
|
+
export { mergeJsonFile } from "./json-file.js";
|
|
5
|
+
export type { MergeJsonResult } from "./json-file.js";
|
|
6
|
+
export { renderSteps, statusLabel } from "./step-report.js";
|
|
7
|
+
export type { StepStatus, StepResult } from "./step-report.js";
|
|
8
|
+
export { SLUG_PATTERN, isValidSlug, stateDir } from "./paths.js";
|
|
9
|
+
export { ensureSecureDir, writeSecureFile } from "./secure-storage.js";
|
|
10
|
+
export { pollForClaimStatus } from "./claim-polling.js";
|
|
11
|
+
export type { ClaimPollingOptions } from "./claim-polling.js";
|
|
12
|
+
export { openUrlInBrowser } from "./browser.js";
|
|
13
|
+
export type { OpenUrlInBrowserOptions, OpenUrlInBrowserResult, } from "./browser.js";
|
|
14
|
+
export { runDiagnosticChecks } from "./diagnostics.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { writeFileAtomicSafe } from "./fs-safe.js";
|
|
2
|
+
export { upsertMarkerBlock } from "./marker-block.js";
|
|
3
|
+
export { mergeJsonFile } from "./json-file.js";
|
|
4
|
+
export { renderSteps, statusLabel } from "./step-report.js";
|
|
5
|
+
export { SLUG_PATTERN, isValidSlug, stateDir } from "./paths.js";
|
|
6
|
+
export { ensureSecureDir, writeSecureFile } from "./secure-storage.js";
|
|
7
|
+
export { pollForClaimStatus } from "./claim-polling.js";
|
|
8
|
+
export { openUrlInBrowser } from "./browser.js";
|
|
9
|
+
export { runDiagnosticChecks } from "./diagnostics.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type MergeJsonResult = "created" | "updated" | "unchanged" | "skipped-invalid" | "would-change";
|
|
2
|
+
/**
|
|
3
|
+
* Merge `patch` into a JSON file at `path`, preserving every other key.
|
|
4
|
+
*
|
|
5
|
+
* A file we cannot parse (or that doesn't hold a plain object) is left
|
|
6
|
+
* untouched and reported "skipped-invalid": clobbering a caller's existing
|
|
7
|
+
* config is worse than leaving the patch unapplied. Already-applied patches
|
|
8
|
+
* report "unchanged" without writing.
|
|
9
|
+
*
|
|
10
|
+
* `path` is used as given, with no containment check against a base
|
|
11
|
+
* directory (unlike `upsertMarkerBlock`, this function takes a fully
|
|
12
|
+
* resolved path, not a `cwd` + relative segment) — resolving it safely is
|
|
13
|
+
* the caller's responsibility.
|
|
14
|
+
*/
|
|
15
|
+
export declare function mergeJsonFile(path: string, patch: Record<string, unknown>, options?: {
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
}): {
|
|
18
|
+
result: MergeJsonResult;
|
|
19
|
+
path: string;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=json-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-file.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/json-file.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,SAAS,GACT,WAAW,GACX,iBAAiB,GACjB,cAAc,CAAC;AAEnB;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAoC3C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync } from "fs";
|
|
2
|
+
import { dirname } from "path";
|
|
3
|
+
import { writeFileAtomicSafe } from "./fs-safe.js";
|
|
4
|
+
/**
|
|
5
|
+
* Merge `patch` into a JSON file at `path`, preserving every other key.
|
|
6
|
+
*
|
|
7
|
+
* A file we cannot parse (or that doesn't hold a plain object) is left
|
|
8
|
+
* untouched and reported "skipped-invalid": clobbering a caller's existing
|
|
9
|
+
* config is worse than leaving the patch unapplied. Already-applied patches
|
|
10
|
+
* report "unchanged" without writing.
|
|
11
|
+
*
|
|
12
|
+
* `path` is used as given, with no containment check against a base
|
|
13
|
+
* directory (unlike `upsertMarkerBlock`, this function takes a fully
|
|
14
|
+
* resolved path, not a `cwd` + relative segment) — resolving it safely is
|
|
15
|
+
* the caller's responsibility.
|
|
16
|
+
*/
|
|
17
|
+
export function mergeJsonFile(path, patch, options = {}) {
|
|
18
|
+
if (existsSync(path)) {
|
|
19
|
+
let settings;
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
22
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
23
|
+
return { result: "skipped-invalid", path };
|
|
24
|
+
}
|
|
25
|
+
settings = parsed;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return { result: "skipped-invalid", path };
|
|
29
|
+
}
|
|
30
|
+
const alreadyApplied = Object.entries(patch).every(([key, value]) => settings[key] === value);
|
|
31
|
+
if (alreadyApplied) {
|
|
32
|
+
return { result: "unchanged", path };
|
|
33
|
+
}
|
|
34
|
+
if (options.dryRun) {
|
|
35
|
+
return { result: "would-change", path };
|
|
36
|
+
}
|
|
37
|
+
Object.assign(settings, patch);
|
|
38
|
+
writeFileAtomicSafe(path, JSON.stringify(settings, null, 2) + "\n");
|
|
39
|
+
return { result: "updated", path };
|
|
40
|
+
}
|
|
41
|
+
if (options.dryRun) {
|
|
42
|
+
return { result: "would-change", path };
|
|
43
|
+
}
|
|
44
|
+
const dir = dirname(path);
|
|
45
|
+
if (!existsSync(dir)) {
|
|
46
|
+
mkdirSync(dir, { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
writeFileAtomicSafe(path, JSON.stringify(patch, null, 2) + "\n");
|
|
49
|
+
return { result: "created", path };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=json-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-file.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/json-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AASnD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,KAA8B,EAC9B,UAAgC,EAAE;IAElC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,QAAiC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;YAC7C,CAAC;YACD,QAAQ,GAAG,MAAiC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAChD,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAC1C,CAAC;QACF,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/B,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type UpsertResult = "created" | "updated" | "unchanged" | "would-change";
|
|
2
|
+
/**
|
|
3
|
+
* Insert or replace a delimited block in a file, generalized over the
|
|
4
|
+
* target file, the start/end markers, and the block content — so a
|
|
5
|
+
* consumer can manage its own marker pair (e.g. `<!-- mcpi:dco:start -->`)
|
|
6
|
+
* in its own target file (e.g. `CLAUDE.md`) without duplicating this
|
|
7
|
+
* splice/append logic.
|
|
8
|
+
*
|
|
9
|
+
* Creates the file with just the block when missing, replaces an existing
|
|
10
|
+
* managed block in place, or appends with a blank-line separator when no
|
|
11
|
+
* managed block exists yet. A no-op write (content already matches) is
|
|
12
|
+
* reported as "unchanged" rather than touching the file.
|
|
13
|
+
*
|
|
14
|
+
* `relativePath` must never carry attacker- or config-file-influenced
|
|
15
|
+
* segments without validation upstream: it's resolved against `cwd` and
|
|
16
|
+
* rejected if it would escape it (e.g. `../../.ssh/authorized_keys`),
|
|
17
|
+
* but a crafted value that stays inside `cwd` (e.g. overwriting an
|
|
18
|
+
* unrelated tracked file) is still the caller's responsibility to guard.
|
|
19
|
+
*/
|
|
20
|
+
export declare function upsertMarkerBlock(cwd: string, relativePath: string, startMarker: string, endMarker: string, block: string, options?: {
|
|
21
|
+
dryRun?: boolean;
|
|
22
|
+
}): {
|
|
23
|
+
result: UpsertResult;
|
|
24
|
+
path: string;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=marker-block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marker-block.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/marker-block.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,CAAC;AAEhF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA2CxC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync } from "fs";
|
|
2
|
+
import { dirname, resolve, sep } from "path";
|
|
3
|
+
import { writeFileAtomicSafe } from "./fs-safe.js";
|
|
4
|
+
/**
|
|
5
|
+
* Insert or replace a delimited block in a file, generalized over the
|
|
6
|
+
* target file, the start/end markers, and the block content — so a
|
|
7
|
+
* consumer can manage its own marker pair (e.g. `<!-- mcpi:dco:start -->`)
|
|
8
|
+
* in its own target file (e.g. `CLAUDE.md`) without duplicating this
|
|
9
|
+
* splice/append logic.
|
|
10
|
+
*
|
|
11
|
+
* Creates the file with just the block when missing, replaces an existing
|
|
12
|
+
* managed block in place, or appends with a blank-line separator when no
|
|
13
|
+
* managed block exists yet. A no-op write (content already matches) is
|
|
14
|
+
* reported as "unchanged" rather than touching the file.
|
|
15
|
+
*
|
|
16
|
+
* `relativePath` must never carry attacker- or config-file-influenced
|
|
17
|
+
* segments without validation upstream: it's resolved against `cwd` and
|
|
18
|
+
* rejected if it would escape it (e.g. `../../.ssh/authorized_keys`),
|
|
19
|
+
* but a crafted value that stays inside `cwd` (e.g. overwriting an
|
|
20
|
+
* unrelated tracked file) is still the caller's responsibility to guard.
|
|
21
|
+
*/
|
|
22
|
+
export function upsertMarkerBlock(cwd, relativePath, startMarker, endMarker, block, options = {}) {
|
|
23
|
+
const resolvedCwd = resolve(cwd);
|
|
24
|
+
const path = resolve(resolvedCwd, relativePath);
|
|
25
|
+
if (path !== resolvedCwd && !path.startsWith(resolvedCwd + sep)) {
|
|
26
|
+
throw new Error(`Invalid relativePath "${relativePath}": resolves outside cwd "${cwd}"`);
|
|
27
|
+
}
|
|
28
|
+
if (!existsSync(path)) {
|
|
29
|
+
if (options.dryRun) {
|
|
30
|
+
return { result: "would-change", path };
|
|
31
|
+
}
|
|
32
|
+
const dir = dirname(path);
|
|
33
|
+
if (!existsSync(dir)) {
|
|
34
|
+
mkdirSync(dir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
writeFileAtomicSafe(path, block + "\n");
|
|
37
|
+
return { result: "created", path };
|
|
38
|
+
}
|
|
39
|
+
const existing = readFileSync(path, "utf-8");
|
|
40
|
+
const startIdx = existing.indexOf(startMarker);
|
|
41
|
+
const endIdx = existing.indexOf(endMarker);
|
|
42
|
+
let next;
|
|
43
|
+
if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
|
|
44
|
+
const before = existing.slice(0, startIdx);
|
|
45
|
+
const after = existing.slice(endIdx + endMarker.length);
|
|
46
|
+
next = before + block + after;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const separator = existing.endsWith("\n") ? "\n" : "\n\n";
|
|
50
|
+
next = existing + separator + block + "\n";
|
|
51
|
+
}
|
|
52
|
+
if (next === existing) {
|
|
53
|
+
return { result: "unchanged", path };
|
|
54
|
+
}
|
|
55
|
+
if (options.dryRun) {
|
|
56
|
+
return { result: "would-change", path };
|
|
57
|
+
}
|
|
58
|
+
writeFileAtomicSafe(path, next);
|
|
59
|
+
return { result: "updated", path };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=marker-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marker-block.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/marker-block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,YAAoB,EACpB,WAAmB,EACnB,SAAiB,EACjB,KAAa,EACb,UAAgC,EAAE;IAElC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAChD,IAAI,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,yBAAyB,YAAY,4BAA4B,GAAG,GAAG,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,mBAAmB,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,IAAY,CAAC;IACjB,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slugs are often sourced from a file or env var an untrusted cloned repo
|
|
3
|
+
* can influence, and become a path segment under a state directory, so
|
|
4
|
+
* every source must pass this same shape check.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SLUG_PATTERN: RegExp;
|
|
7
|
+
export declare function isValidSlug(slug: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Absolute path to a namespaced state directory under the user's home,
|
|
10
|
+
* e.g. `stateDir("mcpi", "keys")` -> `~/.mcpi/keys`. Each CLI (mcpi,
|
|
11
|
+
* kya-id, ...) picks its own namespace so their on-disk state never
|
|
12
|
+
* collides.
|
|
13
|
+
*/
|
|
14
|
+
export declare function stateDir(namespace: string, ...segments: string[]): string;
|
|
15
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/paths.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAyB,CAAC;AAEnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEzE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { homedir } from "os";
|
|
2
|
+
import { join, resolve } from "path";
|
|
3
|
+
/**
|
|
4
|
+
* Slugs are often sourced from a file or env var an untrusted cloned repo
|
|
5
|
+
* can influence, and become a path segment under a state directory, so
|
|
6
|
+
* every source must pass this same shape check.
|
|
7
|
+
*/
|
|
8
|
+
export const SLUG_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
|
|
9
|
+
export function isValidSlug(slug) {
|
|
10
|
+
return SLUG_PATTERN.test(slug);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Absolute path to a namespaced state directory under the user's home,
|
|
14
|
+
* e.g. `stateDir("mcpi", "keys")` -> `~/.mcpi/keys`. Each CLI (mcpi,
|
|
15
|
+
* kya-id, ...) picks its own namespace so their on-disk state never
|
|
16
|
+
* collides.
|
|
17
|
+
*/
|
|
18
|
+
export function stateDir(namespace, ...segments) {
|
|
19
|
+
return resolve(join(homedir(), `.${namespace}`, ...segments));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAEnD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAiB,EAAE,GAAG,QAAkB;IAC/D,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,SAAS,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create (or reuse) a directory with 0700 permissions, recursively.
|
|
3
|
+
*/
|
|
4
|
+
export declare function ensureSecureDir(path: string, mode?: number): void;
|
|
5
|
+
/**
|
|
6
|
+
* Write credential/key material with 0600 permissions.
|
|
7
|
+
*
|
|
8
|
+
* The mode is set on write to avoid any window where the file exists with
|
|
9
|
+
* looser permissions, then re-asserted with chmod: the write-time mode
|
|
10
|
+
* option is ignored when the file already exists, so a pre-existing file
|
|
11
|
+
* with looser permissions would otherwise keep them.
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeSecureFile(path: string, content: string, mode?: number): void;
|
|
14
|
+
//# sourceMappingURL=secure-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/secure-storage.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAQ,GAAG,IAAI,CAEhE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,SAAQ,GACX,IAAI,CAGN"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync, writeFileSync } from "fs";
|
|
2
|
+
/**
|
|
3
|
+
* Create (or reuse) a directory with 0700 permissions, recursively.
|
|
4
|
+
*/
|
|
5
|
+
export function ensureSecureDir(path, mode = 0o700) {
|
|
6
|
+
mkdirSync(path, { recursive: true, mode });
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Write credential/key material with 0600 permissions.
|
|
10
|
+
*
|
|
11
|
+
* The mode is set on write to avoid any window where the file exists with
|
|
12
|
+
* looser permissions, then re-asserted with chmod: the write-time mode
|
|
13
|
+
* option is ignored when the file already exists, so a pre-existing file
|
|
14
|
+
* with looser permissions would otherwise keep them.
|
|
15
|
+
*/
|
|
16
|
+
export function writeSecureFile(path, content, mode = 0o600) {
|
|
17
|
+
writeFileSync(path, content, { mode });
|
|
18
|
+
chmodSync(path, mode);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=secure-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-storage.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/secure-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAEzD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAI,GAAG,KAAK;IACxD,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,OAAe,EACf,IAAI,GAAG,KAAK;IAEZ,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type StepStatus = "done" | "skipped" | "failed" | "action-required" | "would-change";
|
|
2
|
+
export interface StepResult {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
status: StepStatus;
|
|
6
|
+
detail?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function statusLabel(status: StepStatus): string;
|
|
9
|
+
/**
|
|
10
|
+
* Render a step-report list as aligned `title status` lines, with a
|
|
11
|
+
* detail line under any step that isn't "done" or "skipped". Returns
|
|
12
|
+
* lines rather than printing them, so a consumer composes its own
|
|
13
|
+
* header/footer around the shared body.
|
|
14
|
+
*/
|
|
15
|
+
export declare function renderSteps(steps: StepResult[]): string[];
|
|
16
|
+
//# sourceMappingURL=step-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-report.d.ts","sourceRoot":"","sources":["../../../src/utils/cli-kit/step-report.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,SAAS,GACT,QAAQ,GACR,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAatD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAazD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
export function statusLabel(status) {
|
|
3
|
+
switch (status) {
|
|
4
|
+
case "done":
|
|
5
|
+
return chalk.green("done");
|
|
6
|
+
case "skipped":
|
|
7
|
+
return chalk.gray("skipped");
|
|
8
|
+
case "would-change":
|
|
9
|
+
return chalk.cyan("would change");
|
|
10
|
+
case "action-required":
|
|
11
|
+
return chalk.yellow("action required");
|
|
12
|
+
case "failed":
|
|
13
|
+
return chalk.red("failed");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Render a step-report list as aligned `title status` lines, with a
|
|
18
|
+
* detail line under any step that isn't "done" or "skipped". Returns
|
|
19
|
+
* lines rather than printing them, so a consumer composes its own
|
|
20
|
+
* header/footer around the shared body.
|
|
21
|
+
*/
|
|
22
|
+
export function renderSteps(steps) {
|
|
23
|
+
if (steps.length === 0) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const width = Math.max(...steps.map((s) => s.title.length));
|
|
27
|
+
const lines = [];
|
|
28
|
+
for (const step of steps) {
|
|
29
|
+
lines.push(` ${step.title.padEnd(width)} ${statusLabel(step.status)}`);
|
|
30
|
+
if (step.detail && step.status !== "done" && step.status !== "skipped") {
|
|
31
|
+
lines.push(` ${" ".repeat(width)} ${chalk.gray(step.detail)}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return lines;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=step-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-report.js","sourceRoot":"","sources":["../../../src/utils/cli-kit/step-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC5C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACzC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Persistent agent metadata written at registration time so later commands
|
|
3
|
-
* (notably `
|
|
3
|
+
* (notably `dco setup`) know the agent's public name, slug, and URL
|
|
4
4
|
* without another API round trip. Lives next to identity.json but contains
|
|
5
5
|
* no key material (claimUrl may embed a short-lived claim capability; the
|
|
6
6
|
* whole .mcpi directory is gitignored).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
|
-
import { writeFileAtomicSafe } from "
|
|
3
|
+
import { writeFileAtomicSafe } from "../cli-kit/index.js";
|
|
4
4
|
const AGENT_METADATA_FILE = "agent.json";
|
|
5
5
|
function agentMetadataPath(cwd) {
|
|
6
6
|
return join(cwd, ".mcpi", AGENT_METADATA_FILE);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-metadata.js","sourceRoot":"","sources":["../../../src/utils/dco/agent-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"agent-metadata.js","sourceRoot":"","sources":["../../../src/utils/dco/agent-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAmB1D,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAEzC,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAuB,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,IAAmB;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAkB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACvC,MAAkC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnD,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,mBAAmB,CACjB,iBAAiB,CAAC,GAAG,CAAC,EACtB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACvC,CAAC;AACJ,CAAC"}
|