@quantiya/codevibe-codex-plugin 2.0.6 → 2.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -23
- package/dist/server.js +21 -21
- package/hooks/common.sh +506 -19
- package/{bin/codevibe-codex → libexec/companion-launcher} +37 -76
- package/node_modules/@quantiya/codevibe-core/README.md +7 -5
- package/node_modules/@quantiya/codevibe-core/dist/agy-cli-contract.d.ts +14 -0
- package/node_modules/@quantiya/codevibe-core/dist/appsync/appsync-client.d.ts +229 -61
- package/node_modules/@quantiya/codevibe-core/dist/appsync/event-throttle.d.ts +33 -0
- package/node_modules/@quantiya/codevibe-core/dist/appsync/index.d.ts +3 -2
- package/node_modules/@quantiya/codevibe-core/dist/appsync/queries.d.ts +6 -2
- package/node_modules/@quantiya/codevibe-core/dist/auth/auth-telemetry.d.ts +26 -0
- package/node_modules/@quantiya/codevibe-core/dist/auth/keychain-cli.d.ts +6 -0
- package/node_modules/@quantiya/codevibe-core/dist/auth/vendor-key-cli.d.ts +49 -0
- package/node_modules/@quantiya/codevibe-core/dist/companion-mode/index.d.ts +50 -22
- package/node_modules/@quantiya/codevibe-core/dist/companion-mode/persist-preference.d.ts +1 -5
- package/node_modules/@quantiya/codevibe-core/dist/companion-mode/resolve-agent.d.ts +5 -4
- package/node_modules/@quantiya/codevibe-core/dist/config/config.d.ts +0 -5
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/__tests__/oauth-refresh.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/__tests__/upstream-result-helpers.d.ts +21 -0
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/broker.d.ts +196 -12
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/chatgpt-config.d.ts +40 -0
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/index.d.ts +4 -1
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/oauth-account-lock.d.ts +150 -0
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/oauth-refresh.d.ts +72 -0
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/types.d.ts +165 -17
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/upstream-client.d.ts +3 -2
- package/node_modules/@quantiya/codevibe-core/dist/credential-broker/vendor-key-store.d.ts +32 -1
- package/node_modules/@quantiya/codevibe-core/dist/crypto/__tests__/encrypt-for-emit.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/crypto/__tests__/open-prompt-id.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/crypto/encrypt-for-emit.d.ts +39 -0
- package/node_modules/@quantiya/codevibe-core/dist/crypto/index.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/dist/crypto/open-prompt-id.d.ts +36 -0
- package/node_modules/@quantiya/codevibe-core/dist/daemon/__tests__/process-guards.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/daemon/index.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/daemon/process-guards.d.ts +38 -0
- package/node_modules/@quantiya/codevibe-core/dist/e1/__tests__/prompt-raise.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/e1/index.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/e1/prompt-raise.d.ts +65 -0
- package/node_modules/@quantiya/codevibe-core/dist/index.d.ts +20 -2
- package/node_modules/@quantiya/codevibe-core/dist/index.js +4543 -288
- package/node_modules/@quantiya/codevibe-core/dist/keychain/__tests__/keychain-manager.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/keychain/__tests__/keychain-migrate.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/keychain/keychain-backend.d.ts +105 -0
- package/node_modules/@quantiya/codevibe-core/dist/keychain/keychain-manager.d.ts +40 -5
- package/node_modules/@quantiya/codevibe-core/dist/keychain/keychain-migrate.d.ts +46 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/anchored-fs.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/bounded-directory.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/bounded-output.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/durable-directory.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/hosted-class-a-sink.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/process-identity.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/process-tree.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/publication-authority-capability.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/reviewer-rationale-flag.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/snapshot-merge.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/workspace-authority-fixture.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/workspace-authority.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/__tests__/workspace-materializer.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/agentic-disposable-repo.d.ts +23 -6
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/agentic-resolve.d.ts +16 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/anchored-fs.d.ts +243 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/bounded-directory.d.ts +64 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/bounded-helper.d.ts +22 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/bounded-output.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/class-a-emit.d.ts +13 -1
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/class-a-sign.d.ts +15 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/durable-directory.d.ts +25 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/durable-store.d.ts +217 -25
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/group-decision-outcome.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/hosted-class-a-sink.d.ts +27 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/implementor-argv.d.ts +89 -7
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/index.d.ts +3 -2
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/local-executor-impl.d.ts +177 -76
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/merge-conflict-resolve.d.ts +19 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/process-identity.d.ts +16 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/process-tree.d.ts +123 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/revert-reconcile.d.ts +16 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/revert-runner.d.ts +14 -1
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/reviewer-rationale-flag.d.ts +10 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/snapshot-merge.d.ts +124 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/task-group-types.d.ts +7 -6
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/team-execution-flag.d.ts +2 -2
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/track-registry.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/types.d.ts +34 -2
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/build.d.ts +5 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/deploy-preflight.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/diff-sanity.d.ts +12 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/hostile-grep.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/lint.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/shell-runner.d.ts +5 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/source-traceability.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/tests.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-gates/typecheck.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/verification-runner.d.ts +6 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/workspace-authority.d.ts +45 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/workspace-materializer.d.ts +27 -0
- package/node_modules/@quantiya/codevibe-core/dist/local-executor/workspace-shadow.d.ts +378 -85
- package/node_modules/@quantiya/codevibe-core/dist/local-model/manager.d.ts +1 -1
- package/node_modules/@quantiya/codevibe-core/dist/local-model/ollama.d.ts +40 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/__tests__/detect-agents.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/detect-agents.d.ts +10 -30
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/index.d.ts +1 -2
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/a1a-planner-offers.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/a6-cli-surface.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/advisory-attachment-journal.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/advisory-attachments-dir-race.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/advisory-multi-mention-panel.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/advisory-panel-attachments.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/advisory-quota-stdout-result.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/agent-turn-context-batch.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/bounded-shutdown.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/brainstorm-quorum-wiring.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/brainstorm-quorum.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/cli-team-session-key.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/command-intent.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/context-compaction.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/context-items-hosted-sync.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/context-items-wiring.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/context-items.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/cp8-full-team-events.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/cp8-team-decomposed-zk.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/explicit-tty-exit.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/mention-suggest.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/planner-offer-e1.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/route-browse-summarize-recovery.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/__tests__/workspace-shutdown.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/advisory-attachment-journal.d.ts +165 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/attachments.d.ts +53 -8
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/bounded-shutdown.d.ts +22 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/brainstorm-quorum.d.ts +118 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/cli.d.ts +97 -70
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/cli.js +51847 -33465
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/command-intent.d.ts +56 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/components/InputBar.d.ts +6 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/components/OrchestrationApp.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/context-compaction.d.ts +264 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/context-items-hosted-sync.d.ts +19 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/context-items.d.ts +408 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/context-store.d.ts +162 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/declared-test-runner.d.ts +21 -2
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/emit-shell-event.d.ts +41 -13
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/explicit-tty-exit.d.ts +17 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/gate-decision-submit.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/gate-prompts.d.ts +78 -3
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/index.d.ts +309 -37
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/mention-suggest.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/mode-selection.d.ts +4 -22
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/planner-offer-e1.d.ts +97 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/quorum-loop.d.ts +603 -77
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/reducer.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/task-progress.d.ts +17 -4
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/team-decompose.d.ts +47 -29
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/types.d.ts +103 -6
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/workspace-shutdown.d.ts +27 -0
- package/node_modules/@quantiya/codevibe-core/dist/planner/index.d.ts +1 -1
- package/node_modules/@quantiya/codevibe-core/dist/planner/local-advisory.d.ts +12 -0
- package/node_modules/@quantiya/codevibe-core/dist/planner/local-gemma.d.ts +27 -0
- package/node_modules/@quantiya/codevibe-core/dist/planner/types.d.ts +7 -0
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/index.d.ts +0 -2
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/output-parser.d.ts +19 -0
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/provider.d.ts +9 -6
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/providers/antigravity.d.ts +2 -3
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/registry.d.ts +9 -4
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/token-usage.d.ts +10 -0
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/types.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/verdict-classifier.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/__tests__/device-registration-lease.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/__tests__/pending-session-create.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/__tests__/session-rekey-fingerprint.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/__tests__/session-resume-key-reconciliation.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/__tests__/session-resume-pending-first.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/device-key-watcher.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/index.d.ts +4 -2
- package/node_modules/@quantiya/codevibe-core/dist/session/pending-session-create.d.ts +61 -0
- package/node_modules/@quantiya/codevibe-core/dist/session/register-device-key.d.ts +11 -1
- package/node_modules/@quantiya/codevibe-core/dist/session/session-rekey.d.ts +8 -8
- package/node_modules/@quantiya/codevibe-core/dist/session/session-resume.d.ts +21 -1
- package/node_modules/@quantiya/codevibe-core/dist/substrate/command-runner.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/substrate/docker.d.ts +14 -32
- package/node_modules/@quantiya/codevibe-core/dist/substrate/index.d.ts +0 -1
- package/node_modules/@quantiya/codevibe-core/dist/substrate/sandbox-exec.d.ts +17 -16
- package/node_modules/@quantiya/codevibe-core/dist/substrate/types.d.ts +39 -5
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/__tests__/reviewer-credential-preflight.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/apikey-bootstrap.d.ts +24 -1
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/engage-substrate.d.ts +20 -0
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/index.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/reviewer-credential-preflight.d.ts +50 -0
- package/node_modules/@quantiya/codevibe-core/dist/substrate-launch/sanitized-env.d.ts +5 -5
- package/node_modules/@quantiya/codevibe-core/dist/test-publication-authority-setup.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/consolidator.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/digest.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/flock-rollout-lock.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/ledger.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/outbox.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/replay-cursor.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/session-map.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/__tests__/socket-rollout-lock.test.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/atomic-file.d.ts +27 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/consolidator.d.ts +253 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/digest.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/flock-rollout-lock.d.ts +68 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/index.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/ledger.d.ts +274 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/outbox.d.ts +60 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/replay-cursor.d.ts +190 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/session-map.d.ts +133 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/socket-rollout-lock.d.ts +57 -0
- package/node_modules/@quantiya/codevibe-core/dist/tool-activity/types.d.ts +368 -0
- package/node_modules/@quantiya/codevibe-core/dist/types/encryption.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/dist/types/events.d.ts +29 -4
- package/node_modules/@quantiya/codevibe-core/dist/types/session.d.ts +32 -2
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/README.md +207 -163
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/index.d.ts +15 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/index.js +31 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/max.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/max.js +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/md5.js +13 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/native.d.ts +6 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/native.js +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/nil.js +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/package.json +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/parse.js +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/regex.js +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/rng.js +13 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/sha1.js +13 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/stringify.js +39 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/types.d.ts +21 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/types.js +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v1.js +87 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v3.js +14 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v35.js +44 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v4.js +29 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v5.js +14 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v6.js +22 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/v7.js +69 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/validate.js +7 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/version.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs/version.js +10 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/index.js +31 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/max.js +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/native.js +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/package.json +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/types.js +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v35.js +44 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v6.js +22 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/cjs-browser/version.js +10 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/bin/uuid +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/index.d.ts +15 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/{esm-node → esm}/index.js +9 -4
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/max.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/max.js +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/md5.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/md5.js +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/native.d.ts +6 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/native.js +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/nil.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/nil.js +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/parse.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/parse.js +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/regex.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/regex.js +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/rng.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/rng.js +10 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/sha1.js +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/stringify.js +35 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/types.d.ts +21 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/types.js +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v1.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v1.js +83 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v3.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v3.js +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v35.d.ts +7 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v35.js +39 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v4.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v4.js +27 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v5.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v5.js +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v6.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v6.js +20 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v7.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/v7.js +65 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/validate.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/validate.js +5 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/version.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm/version.js +8 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/index.js +9 -4
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/max.js +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/md5.js +113 -193
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/native.js +1 -3
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/nil.js +1 -1
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/parse.js +6 -32
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/regex.js +1 -1
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/rng.js +6 -13
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/sha1.js +62 -88
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/stringify.js +27 -25
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/types.js +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v1.js +78 -90
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v3.js +8 -3
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v35.js +30 -57
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v4.js +21 -23
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v5.js +8 -3
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v6.js +20 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/v7.js +65 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/validate.js +2 -4
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-browser/version.js +5 -8
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/package.json +73 -76
- package/node_modules/@quantiya/codevibe-core/package.json +7 -6
- package/node_modules/fs-ext/.eslintrc +53 -0
- package/node_modules/fs-ext/.github/workflows/node.js.yml +31 -0
- package/node_modules/fs-ext/.travis.yml +25 -0
- package/node_modules/fs-ext/LICENSE.txt +18 -0
- package/node_modules/fs-ext/README.md +130 -0
- package/node_modules/fs-ext/appveyor.yml +20 -0
- package/node_modules/fs-ext/binding.gyp +11 -0
- package/node_modules/fs-ext/build/Makefile +347 -0
- package/node_modules/fs-ext/build/Release/.deps/Release/fs_ext.node.d +1 -0
- package/node_modules/fs-ext/build/Release/.deps/Release/obj.target/fs_ext/fs-ext.o.d +165 -0
- package/node_modules/fs-ext/build/Release/fs_ext.node +0 -0
- package/node_modules/fs-ext/build/Release/obj.target/fs_ext/fs-ext.o +0 -0
- package/node_modules/fs-ext/build/binding.Makefile +6 -0
- package/node_modules/fs-ext/build/config.gypi +504 -0
- package/node_modules/fs-ext/build/fs_ext.target.mk +183 -0
- package/node_modules/fs-ext/build/gyp-mac-tool +768 -0
- package/node_modules/fs-ext/example.js +57 -0
- package/node_modules/fs-ext/fs-ext.cc +622 -0
- package/node_modules/fs-ext/fs-ext.js +131 -0
- package/node_modules/fs-ext/package.json +42 -0
- package/node_modules/fs-ext/run_tests.js +17 -0
- package/node_modules/fs-ext/tests/test-fs-fcntl.js +350 -0
- package/node_modules/fs-ext/tests/test-fs-flock.js +452 -0
- package/node_modules/fs-ext/tests/test-fs-flock_stress.js +239 -0
- package/node_modules/fs-ext/tests/test-fs-seek.js +607 -0
- package/node_modules/fs-ext/tests/test-fs-seek_stress.js +313 -0
- package/node_modules/fs-ext/tests/test-fs-statvfs.js +15 -0
- package/node_modules/fs-ext/tests/worker-test.js +56 -0
- package/node_modules/fs-ext/wscript +15 -0
- package/node_modules/nan/.github/workflows/ci.yml +46 -0
- package/node_modules/nan/.pre-commit-config.yaml +8 -0
- package/node_modules/nan/CHANGELOG.md +605 -0
- package/node_modules/nan/CMakeLists.txt +138 -0
- package/node_modules/nan/LICENSE.md +9 -0
- package/node_modules/nan/README.md +457 -0
- package/node_modules/nan/doc/asyncworker.md +146 -0
- package/node_modules/nan/doc/buffers.md +54 -0
- package/node_modules/nan/doc/callback.md +76 -0
- package/node_modules/nan/doc/converters.md +41 -0
- package/node_modules/nan/doc/errors.md +226 -0
- package/node_modules/nan/doc/json.md +62 -0
- package/node_modules/nan/doc/maybe_types.md +583 -0
- package/node_modules/nan/doc/methods.md +689 -0
- package/node_modules/nan/doc/new.md +147 -0
- package/node_modules/nan/doc/node_misc.md +123 -0
- package/node_modules/nan/doc/object_wrappers.md +263 -0
- package/node_modules/nan/doc/persistent.md +296 -0
- package/node_modules/nan/doc/scopes.md +73 -0
- package/node_modules/nan/doc/script.md +58 -0
- package/node_modules/nan/doc/string_bytes.md +81 -0
- package/node_modules/nan/doc/v8_internals.md +211 -0
- package/node_modules/nan/doc/v8_misc.md +85 -0
- package/node_modules/nan/include_dirs.js +1 -0
- package/node_modules/nan/nan.h +3202 -0
- package/node_modules/nan/nan_callbacks.h +141 -0
- package/node_modules/nan/nan_callbacks_12_inl.h +730 -0
- package/node_modules/nan/nan_callbacks_pre_12_inl.h +528 -0
- package/node_modules/nan/nan_converters.h +72 -0
- package/node_modules/nan/nan_converters_43_inl.h +68 -0
- package/node_modules/nan/nan_converters_pre_43_inl.h +42 -0
- package/node_modules/nan/nan_define_own_property_helper.h +29 -0
- package/node_modules/nan/nan_implementation_12_inl.h +446 -0
- package/node_modules/nan/nan_implementation_pre_12_inl.h +263 -0
- package/node_modules/nan/nan_json.h +166 -0
- package/node_modules/nan/nan_maybe_43_inl.h +360 -0
- package/node_modules/nan/nan_maybe_pre_43_inl.h +268 -0
- package/node_modules/nan/nan_new.h +340 -0
- package/node_modules/nan/nan_object_wrap.h +156 -0
- package/node_modules/nan/nan_persistent_12_inl.h +132 -0
- package/node_modules/nan/nan_persistent_pre_12_inl.h +242 -0
- package/node_modules/nan/nan_private.h +73 -0
- package/node_modules/nan/nan_scriptorigin.h +97 -0
- package/node_modules/nan/nan_string_bytes.h +305 -0
- package/node_modules/nan/nan_typedarray_contents.h +96 -0
- package/node_modules/nan/nan_weak.h +453 -0
- package/node_modules/nan/package.json +38 -0
- package/node_modules/nan/tools/1to2.js +412 -0
- package/node_modules/nan/tools/README.md +14 -0
- package/node_modules/nan/tools/package.json +19 -0
- package/package.json +5 -5
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/orchestration-cli.d.ts +0 -12
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-bootstrap.d.ts +0 -146
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-failure-recourse.d.ts +0 -23
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-save.d.ts +0 -47
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-seat-picker.d.ts +0 -72
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-telemetry.d.ts +0 -54
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-test-agents.d.ts +0 -108
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-types.d.ts +0 -146
- package/node_modules/@quantiya/codevibe-core/dist/orchestration/setup-wizard.d.ts +0 -57
- package/node_modules/@quantiya/codevibe-core/dist/orchestration-shell/cohort-flag.d.ts +0 -16
- package/node_modules/@quantiya/codevibe-core/dist/reviewer/providers/gemini.d.ts +0 -109
- package/node_modules/@quantiya/codevibe-core/dist/substrate/git-proxy.d.ts +0 -35
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/CHANGELOG.md +0 -274
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/CONTRIBUTING.md +0 -18
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/bin/uuid +0 -2
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/index.js +0 -79
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/md5.js +0 -223
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/native.js +0 -11
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/nil.js +0 -8
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/parse.js +0 -45
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/regex.js +0 -8
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/rng.js +0 -25
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/sha1.js +0 -104
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/stringify.js +0 -44
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/v1.js +0 -107
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/v3.js +0 -16
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/v35.js +0 -80
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/v4.js +0 -43
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/v5.js +0 -16
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/validate.js +0 -17
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/commonjs-browser/version.js +0 -21
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/md5.js +0 -13
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/native.js +0 -4
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/nil.js +0 -1
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/parse.js +0 -35
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/regex.js +0 -1
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/rng.js +0 -12
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/sha1.js +0 -13
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/stringify.js +0 -33
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/v1.js +0 -95
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/v3.js +0 -4
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/v35.js +0 -66
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/v4.js +0 -29
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/v5.js +0 -4
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/validate.js +0 -7
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/esm-node/version.js +0 -11
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/index.js +0 -79
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/md5-browser.js +0 -223
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/md5.js +0 -23
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/native-browser.js +0 -11
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/native.js +0 -15
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/nil.js +0 -8
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/parse.js +0 -45
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/regex.js +0 -8
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/rng-browser.js +0 -25
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/rng.js +0 -24
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/sha1-browser.js +0 -104
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/sha1.js +0 -23
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/stringify.js +0 -44
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/uuid-bin.js +0 -85
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/v1.js +0 -107
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/v3.js +0 -16
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/v35.js +0 -80
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/v4.js +0 -43
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/v5.js +0 -16
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/validate.js +0 -17
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/dist/version.js +0 -21
- package/node_modules/@quantiya/codevibe-core/node_modules/uuid/wrapper.mjs +0 -10
- /package/node_modules/@quantiya/codevibe-core/dist/{companion-mode/__tests__/detect-parallel.test.d.ts → appsync/__tests__/appsync-client-context-items.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration-shell/__tests__/cli-stub-session-adapter.test.d.ts → appsync/__tests__/heartbeat-active.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-bootstrap.test.d.ts → appsync/__tests__/orphan-sweep-null-heartbeat.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-failure-recourse.test.d.ts → appsync/__tests__/refresh-open-prompt-ttl-chunk.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-save.test.d.ts → auth/__tests__/keychain-cli.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-seat-picker.test.d.ts → auth/__tests__/vendor-key-cli.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-telemetry.test.d.ts → companion-mode/__tests__/mode-selected-emit.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-test-agents.test.d.ts → companion-mode/__tests__/private-launcher-detection.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-types.test.d.ts → companion-mode/__tests__/private-launcher-path.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{orchestration/__tests__/setup-wizard.test.d.ts → credential-broker/__tests__/broker-c4.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{reviewer/providers/__tests__/gemini-live-smoke.test.d.ts → credential-broker/__tests__/broker-streaming.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{reviewer/providers/__tests__/gemini.test.d.ts → credential-broker/__tests__/chatgpt-config.test.d.ts} +0 -0
- /package/node_modules/@quantiya/codevibe-core/dist/{substrate/__tests__/git-proxy.test.d.ts → credential-broker/__tests__/oauth-account-lock.test.d.ts} +0 -0
package/hooks/common.sh
CHANGED
|
@@ -87,40 +87,527 @@ read_json_input() {
|
|
|
87
87
|
cat
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
# (#638) Ensure the Codex companion daemon is running for THIS tmux session;
|
|
91
|
+
# echo its port on stdout. The daemon is normally launched by the private
|
|
92
|
+
# libexec/companion-launcher (one `node dist/server.js` per tmux session, keyed on
|
|
93
|
+
# CODEVIBE_CODEX_TMUX_SESSION). When it dies (Mac sleep + network drop → the daemon
|
|
94
|
+
# stops heart-beating and exits), hook POSTs hit a dead port (HTTP 000) or find no
|
|
95
|
+
# port file. This relaunches the daemon with the SAME launch shape the wrapper used
|
|
96
|
+
# — matching its port-file model (${TMPDIR}/codevibe-codex-<tmux>.port) and its env
|
|
97
|
+
# (CODEVIBE_CODEX_TMUX_SESSION + ENVIRONMENT, default production) — clearing any
|
|
98
|
+
# stale port file first, then waits for the fresh port. Echoes the port and returns
|
|
99
|
+
# 0 on success, non-zero on failure.
|
|
100
|
+
# Helper: if the port file exists AND a CODEVIBE-CODEX daemon is listening on that
|
|
101
|
+
# port, echo the port and return 0; else return 1. Codex has no PID mapping the
|
|
102
|
+
# hook can read, so liveness is a GET /health probe — but we REQUIRE the response
|
|
103
|
+
# body to carry the `"service":"codevibe-codex"` marker (#638 finding-2). Matching
|
|
104
|
+
# ANY non-000 code would false-positive on a recycled ephemeral port grabbed by an
|
|
105
|
+
# unrelated local HTTP server (which returns some other body / a 404), making us
|
|
106
|
+
# reuse the wrong port and never relaunch the real daemon. Bounded via --max-time.
|
|
107
|
+
# (#638 G5) True (0) iff PID is still a codevibe-codex daemon process (`ps -o
|
|
108
|
+
# command=` match on node + codevibe-codex + server.js — covers the npm cache path
|
|
109
|
+
# and the dev path). Codex's reap previously had NO identity guard: the launched
|
|
110
|
+
# PID can die between SIGTERM and the SIGKILL escalation (there IS a sleep window)
|
|
111
|
+
# and be recycled to an unrelated process — signaling it blind could kill a foreign
|
|
112
|
+
# process. Mirror of the claude plugin's is_codevibe_daemon.
|
|
113
|
+
is_codevibe_codex_daemon() {
|
|
114
|
+
local pid="$1"
|
|
115
|
+
local cmd
|
|
116
|
+
cmd=$(ps -o command= -p "$pid" 2>/dev/null)
|
|
117
|
+
case "$cmd" in
|
|
118
|
+
*node*codevibe-codex*server.js*) return 0 ;;
|
|
119
|
+
*) return 1 ;;
|
|
120
|
+
esac
|
|
121
|
+
}
|
|
93
122
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
123
|
+
# (#638 G5/H2/H3) THE identity-guarded reap: TERM → bounded wait → identity
|
|
124
|
+
# re-check → KILL → settle. Identity (is_codevibe_codex_daemon) is re-verified
|
|
125
|
+
# immediately before EVERY signal — the PID can die after the SIGTERM and be
|
|
126
|
+
# recycled to an unrelated process during the settle poll, so signaling blind
|
|
127
|
+
# could kill a foreign process. Works for BOTH our own background child (`wait`
|
|
128
|
+
# collects its status instantly, closing the PID-reuse window) and a non-child
|
|
129
|
+
# daemon from a prior hook (`wait` is a silent no-op there; the bounded ps-poll
|
|
130
|
+
# provides the settle). Returns 0 when the daemon is provably gone, 1 when the
|
|
131
|
+
# PID was not (or stopped being) our daemon and was left alone.
|
|
132
|
+
_reap_codevibe_codex_daemon_pid() {
|
|
133
|
+
local pid="$1" why="$2"
|
|
134
|
+
[ -n "$pid" ] || return 1
|
|
135
|
+
if ! is_codevibe_codex_daemon "$pid"; then
|
|
136
|
+
log "WARN" "reap($why): pid $pid is not our daemon (recycled/replaced) — not signaling"
|
|
137
|
+
return 1
|
|
138
|
+
fi
|
|
139
|
+
kill "$pid" 2>/dev/null # SIGTERM: let it run its graceful shutdown
|
|
140
|
+
local reap=0
|
|
141
|
+
while [ $reap -lt 10 ] && ps -p "$pid" > /dev/null 2>&1; do
|
|
142
|
+
sleep 0.2
|
|
143
|
+
reap=$((reap + 1))
|
|
144
|
+
done
|
|
145
|
+
if ps -p "$pid" > /dev/null 2>&1; then
|
|
146
|
+
# (#638 G5) Re-verify identity IMMEDIATELY before the KILL escalation.
|
|
147
|
+
if is_codevibe_codex_daemon "$pid"; then
|
|
148
|
+
log "WARN" "reap($why): pid $pid ignored SIGTERM, sending SIGKILL"
|
|
149
|
+
kill -9 "$pid" 2>/dev/null
|
|
150
|
+
# SIGKILL is un-ignorable: collect our own background child promptly (no-op
|
|
151
|
+
# for a non-child), then bound the non-child settle with a short ps-poll.
|
|
152
|
+
wait "$pid" 2>/dev/null
|
|
153
|
+
local settle=0
|
|
154
|
+
while [ $settle -lt 5 ] && ps -p "$pid" > /dev/null 2>&1; do
|
|
155
|
+
sleep 0.1
|
|
156
|
+
settle=$((settle + 1))
|
|
157
|
+
done
|
|
158
|
+
else
|
|
159
|
+
log "WARN" "reap($why): pid $pid is no longer our daemon (recycled/replaced) — NOT sending SIGKILL"
|
|
160
|
+
return 1
|
|
161
|
+
fi
|
|
162
|
+
else
|
|
163
|
+
# (#638 G5) Already exited from SIGTERM — `wait` on our own background child
|
|
164
|
+
# returns its saved status instantly (no blocking) and closes the reuse window.
|
|
165
|
+
wait "$pid" 2>/dev/null
|
|
166
|
+
fi
|
|
167
|
+
return 0
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
# (#638 G3) Owner-crash cleanup for the relaunch lock. Installed as an EXIT trap for
|
|
171
|
+
# the lock-HELD region of ensure_codex_daemon only. ensure_codex_daemon always runs
|
|
172
|
+
# in a command-substitution subshell at its call site (send_to_server's
|
|
173
|
+
# `$(ensure_codex_daemon)`), so the trap scope is that subshell — it never leaks into
|
|
174
|
+
# the sourcing hook script. If the lock owner is interrupted mid-cold-start
|
|
175
|
+
# (TERM/INT/HUP or any abnormal exit), this:
|
|
176
|
+
# (a) (#638 H3) FIRST re-checks whether the child already PUBLISHED its port file
|
|
177
|
+
# in the window between the port-file write and the publish-clear of
|
|
178
|
+
# CODEVIBE_ENSURE_CHILD_PID. A published child is a HEALTHY daemon — do NOT
|
|
179
|
+
# signal it; just clear the marker and release the lock (the port file IS
|
|
180
|
+
# codex's full publication — there is no separate mapping). Pre-H3 the trap
|
|
181
|
+
# TERMed the just-published daemon (and rmdir'd while its shutdown was still
|
|
182
|
+
# async), killing a healthy daemon the next hook then had to relaunch.
|
|
183
|
+
# Safe keying: the launch path `rm -f "$port_file"`s BEFORE spawning, so while
|
|
184
|
+
# CODEVIBE_ENSURE_CHILD_PID is set, an existing port file was written by the child.
|
|
185
|
+
# (b) reaps a genuinely-UNPUBLISHED child via the bounded identity-rechecked
|
|
186
|
+
# TERM→wait→KILL helper (pre-H3 it sent a single bare TERM and released the
|
|
187
|
+
# lock immediately, leaving the child's async shutdown racing the next owner);
|
|
188
|
+
# (c) releases the lock immediately instead of stranding it for the +2min mtime
|
|
189
|
+
# reaper (which stays as the backstop for the untrappable SIGKILL case).
|
|
190
|
+
CODEVIBE_ENSURE_LOCK_DIR=""
|
|
191
|
+
CODEVIBE_ENSURE_CHILD_PID=""
|
|
192
|
+
CODEVIBE_ENSURE_PORT_FILE=""
|
|
193
|
+
_codevibe_ensure_lock_cleanup() {
|
|
194
|
+
if [ -n "$CODEVIBE_ENSURE_CHILD_PID" ]; then
|
|
195
|
+
if [ -n "$CODEVIBE_ENSURE_PORT_FILE" ] && [ -f "$CODEVIBE_ENSURE_PORT_FILE" ]; then
|
|
196
|
+
# (#638 H3) PUBLISHED between port-file write and publish-clear → healthy;
|
|
197
|
+
# do NOT signal. Releasing the lock below finalizes the publication.
|
|
198
|
+
log "WARN" "ensure_codex_daemon: interrupted AFTER child published (pid $CODEVIBE_ENSURE_CHILD_PID, port $(cat "$CODEVIBE_ENSURE_PORT_FILE" 2>/dev/null)) — NOT signaling (#638 H3)"
|
|
199
|
+
else
|
|
200
|
+
log "WARN" "ensure_codex_daemon: interrupted while holding relaunch lock — reaping unpublished child pid $CODEVIBE_ENSURE_CHILD_PID (#638 H3 bounded reap)"
|
|
201
|
+
_reap_codevibe_codex_daemon_pid "$CODEVIBE_ENSURE_CHILD_PID" "owner-trap unpublished child"
|
|
202
|
+
fi
|
|
203
|
+
fi
|
|
204
|
+
if [ -n "$CODEVIBE_ENSURE_LOCK_DIR" ]; then
|
|
205
|
+
rmdir "$CODEVIBE_ENSURE_LOCK_DIR" 2>/dev/null
|
|
206
|
+
fi
|
|
207
|
+
CODEVIBE_ENSURE_LOCK_DIR=""
|
|
208
|
+
CODEVIBE_ENSURE_CHILD_PID=""
|
|
209
|
+
CODEVIBE_ENSURE_PORT_FILE=""
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
_reuse_live_codex_daemon() {
|
|
213
|
+
local port_file="$1" port body
|
|
214
|
+
[ -f "$port_file" ] || return 1
|
|
215
|
+
port=$(cat "$port_file" 2>/dev/null)
|
|
216
|
+
[ -n "$port" ] || return 1
|
|
217
|
+
body=$(curl -s --max-time 2 "http://localhost:${port}/health" 2>/dev/null)
|
|
218
|
+
# (#638 F8) Require a TOP-LEVEL `.service == "codevibe-codex"` parsed with jq, NOT a
|
|
219
|
+
# substring match. A substring match false-positives on a foreign body that merely
|
|
220
|
+
# CONTAINS or NESTS the marker text — e.g. {"data":{"service":"codevibe-codex"}} or a
|
|
221
|
+
# log line quoting it — which would make us reuse an unrelated server's recycled port
|
|
222
|
+
# and never relaunch the real daemon. jq -e exits non-zero on non-JSON / a missing or
|
|
223
|
+
# non-matching top-level field, so a dead port (empty body) and a foreign body both
|
|
224
|
+
# correctly fail closed.
|
|
225
|
+
if echo "$body" | jq -e '.service == "codevibe-codex"' > /dev/null 2>&1; then
|
|
226
|
+
echo "$port"
|
|
227
|
+
return 0
|
|
228
|
+
fi
|
|
229
|
+
return 1
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
# (#638 J1) Echo the pid a live codevibe-codex daemon on <port> reports in its
|
|
233
|
+
# /health body (top-level `.pid`, honored only when the `.service` marker matches
|
|
234
|
+
# — a foreign server lying about `pid` is ignored). One bounded probe. Echoes a
|
|
235
|
+
# validated numeric pid (return 0) or nothing (return 1: dead port / foreign
|
|
236
|
+
# server / marker-less legacy daemon).
|
|
237
|
+
_codex_daemon_pid_on_port() {
|
|
238
|
+
local port="$1" pid
|
|
239
|
+
[ -n "$port" ] || return 1
|
|
240
|
+
pid=$(curl -s --max-time 2 "http://localhost:${port}/health" 2>/dev/null \
|
|
241
|
+
| jq -r 'if .service == "codevibe-codex" then (.pid // empty) else empty end' 2>/dev/null)
|
|
242
|
+
case "$pid" in
|
|
243
|
+
''|*[!0-9]*) return 1 ;;
|
|
244
|
+
esac
|
|
245
|
+
echo "$pid"
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
# (#638 J1) True (0) iff the reuse candidate that just passed
|
|
249
|
+
# _reuse_live_codex_daemon IS the excluded (wedged) daemon. exclude_port alone is
|
|
250
|
+
# NOT identity: ephemeral ports get recycled, so a concurrent hook's fresh winner
|
|
251
|
+
# can legitimately come up on the SAME port the wedged daemon held — skipping
|
|
252
|
+
# reuse (and then reaping) on a port match alone would kill that healthy winner
|
|
253
|
+
# (it passes is_codevibe_codex_daemon because it IS a codevibe daemon — just a
|
|
254
|
+
# different lifecycle) and break exactly-once launch. So whenever the caller
|
|
255
|
+
# could snapshot the wedged daemon's pid at exclusion time, require the
|
|
256
|
+
# candidate's CURRENT pid (its own /health `.pid`, bounded probe) to match too.
|
|
257
|
+
# With no exclude_pid (the failed daemon's /health was already dead at snapshot
|
|
258
|
+
# time) fall back to port-only — no identity is available; the eventual reap is
|
|
259
|
+
# still is_codevibe-guarded, which bounds the damage to our own daemon class.
|
|
260
|
+
# Usage: _codex_candidate_is_excluded <cand_port> <exclude_port> <exclude_pid>
|
|
261
|
+
_codex_candidate_is_excluded() {
|
|
262
|
+
local cand_port="$1" exclude_port="$2" exclude_pid="$3"
|
|
263
|
+
[ -n "$exclude_port" ] || return 1
|
|
264
|
+
[ "$cand_port" = "$exclude_port" ] || return 1
|
|
265
|
+
[ -n "$exclude_pid" ] || return 0 # port-only fallback (no snapshot identity)
|
|
266
|
+
local cand_pid
|
|
267
|
+
cand_pid=$(_codex_daemon_pid_on_port "$cand_port")
|
|
268
|
+
[ -n "$cand_pid" ] || return 0 # candidate pid unknowable → conservative port-only
|
|
269
|
+
[ "$cand_pid" = "$exclude_pid" ]
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
ensure_codex_daemon() {
|
|
273
|
+
# (#638 H2) Optional: a port KNOWN-BAD for /event delivery (send_to_server's
|
|
274
|
+
# POST timed out / transport-failed against it). The reuse fast path verifies
|
|
275
|
+
# /health only — a daemon can answer /health 200 while its /event pipeline is
|
|
276
|
+
# WEDGED, so without the exclusion the transport-failure retry reused the SAME
|
|
277
|
+
# wedged port and the promised relaunch never happened (recovery dead until
|
|
278
|
+
# the daemon un-wedged). When the reuse candidate's port equals exclude_port
|
|
279
|
+
# we SKIP reuse, take the instance lock, identity-reap that daemon (PID from
|
|
280
|
+
# its own /health body, then is_codevibe_codex_daemon-verified), and launch
|
|
281
|
+
# exactly once. Only send_to_server's transport-failure retry passes this.
|
|
282
|
+
local exclude_port="$1"
|
|
283
|
+
# (#638 J1) Optional: the wedged daemon's pid, SNAPSHOTTED by send_to_server at
|
|
284
|
+
# exclusion time (one bounded /health `.pid` probe right after the POST
|
|
285
|
+
# transport-failed — probing at reap time instead would be the WRONG moment:
|
|
286
|
+
# by then the port may already be a concurrent hook's fresh winner). Port alone
|
|
287
|
+
# is NOT identity — a fresh winner can come up on the SAME recycled ephemeral
|
|
288
|
+
# port — so skip-reuse and the wedged reap fire ONLY when the candidate matches
|
|
289
|
+
# BOTH port AND pid; a same-port/different-pid candidate is a legitimate winner
|
|
290
|
+
# and is REUSED. Empty when the failed daemon's /health was already dead (pid
|
|
291
|
+
# unknowable) → port-only fallback (pre-J1 behavior; reap stays is_codevibe-
|
|
292
|
+
# guarded).
|
|
293
|
+
local exclude_pid="$2"
|
|
294
|
+
local tmux_session="${CODEVIBE_CODEX_TMUX_SESSION:-}"
|
|
295
|
+
if [ -z "$tmux_session" ]; then
|
|
296
|
+
log "ERROR" "ensure_codex_daemon: CODEVIBE_CODEX_TMUX_SESSION unset — cannot relaunch"
|
|
98
297
|
return 1
|
|
99
298
|
fi
|
|
100
299
|
|
|
101
|
-
|
|
300
|
+
# Plugin dir = parent of the hooks dir that DEFINES this function (common.sh).
|
|
301
|
+
local hooks_dir plugin_dir
|
|
302
|
+
hooks_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
303
|
+
plugin_dir="$(cd "$hooks_dir/.." && pwd)"
|
|
304
|
+
if [ ! -f "$plugin_dir/dist/server.js" ]; then
|
|
305
|
+
log "ERROR" "ensure_codex_daemon: $plugin_dir/dist/server.js not found — cannot relaunch"
|
|
306
|
+
return 1
|
|
307
|
+
fi
|
|
102
308
|
|
|
103
|
-
local
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
309
|
+
local port_file="${CODEVIBE_TMPDIR}/codevibe-codex-${tmux_session}.port"
|
|
310
|
+
# (#638 G3) Lock key VERIFIED against daemon scope: codex's port_file is already
|
|
311
|
+
# per-tmux-INSTANCE (codevibe-codex-<tmux>.port — one daemon per tmux session), so
|
|
312
|
+
# ${port_file}.lock is instance-scoped and matches the daemon being launched. No
|
|
313
|
+
# re-key needed (unlike claude, whose port file is session_id-scoped).
|
|
314
|
+
local lock_dir="${port_file}.lock"
|
|
109
315
|
|
|
110
|
-
|
|
111
|
-
|
|
316
|
+
# ── Fast path: reuse a live daemon (no lock needed) ──
|
|
317
|
+
local reuse
|
|
318
|
+
if reuse=$(_reuse_live_codex_daemon "$port_file"); then
|
|
319
|
+
if _codex_candidate_is_excluded "$reuse" "$exclude_port" "$exclude_pid"; then
|
|
320
|
+
# (#638 H2) Health-passing but /event-wedged daemon — do NOT reuse; fall
|
|
321
|
+
# through to the lock so it gets reaped + relaunched.
|
|
322
|
+
# (#638 J1) Only when the candidate matches port AND (when snapshotted) pid
|
|
323
|
+
# — a same-port/different-pid candidate is a fresh winner and reuses above.
|
|
324
|
+
log "WARN" "ensure_codex_daemon: reuse candidate port $reuse is the excluded (wedged) daemon — skipping reuse, will reap + relaunch (#638 H2/J1)"
|
|
325
|
+
else
|
|
326
|
+
log "INFO" "ensure_codex_daemon: reusing live daemon (port $reuse)"
|
|
327
|
+
echo "$reuse"
|
|
328
|
+
return 0
|
|
329
|
+
fi
|
|
330
|
+
fi
|
|
331
|
+
|
|
332
|
+
# ── Serialize the LAUNCH (double-checked locking) ──
|
|
333
|
+
# Two near-simultaneous hooks that both hit a dead port would otherwise BOTH
|
|
334
|
+
# relaunch → two daemons on `app.listen(0)` (duplicate mobile events + double
|
|
335
|
+
# heartbeat, no daemon-side singleton). A mkdir-lock elects ONE launcher; the
|
|
336
|
+
# loser(s) wait briefly and reuse the winner's daemon via the /health probe.
|
|
337
|
+
# Reap a clearly-abandoned lock first. The lock is now held for the FULL cold
|
|
338
|
+
# start (up to ~60s — see the readiness wait below), so the reaper threshold
|
|
339
|
+
# MUST stay strictly above that max hold (>2min ⇒ abandoned) or it could reap a
|
|
340
|
+
# live, slow-starting holder.
|
|
341
|
+
if [ -d "$lock_dir" ] && [ -n "$(find "$lock_dir" -maxdepth 0 -mmin +2 2>/dev/null)" ]; then
|
|
342
|
+
log "WARN" "ensure_codex_daemon: removing stale relaunch lock $lock_dir"
|
|
343
|
+
rmdir "$lock_dir" 2>/dev/null
|
|
344
|
+
fi
|
|
112
345
|
|
|
113
|
-
|
|
114
|
-
|
|
346
|
+
# Cold-start readiness cap (0.5s units). The elected launcher HOLDS the lock for the
|
|
347
|
+
# whole cold start, up to this cap (see the readiness wait below). Overridable for
|
|
348
|
+
# tests; production default = 120 × 0.5s = 60s.
|
|
349
|
+
local max_wait="${CODEVIBE_DAEMON_MAX_WAIT_UNITS:-120}"
|
|
350
|
+
# (#638 F2) The contender's acquire/reuse-poll bound MUST be ≥ the launcher's max
|
|
351
|
+
# hold, or a slow launch (woken Mac + returning network → a ~60s cold start) makes the
|
|
352
|
+
# contender abandon at ~12s BEFORE the winner has published its port — its last-chance
|
|
353
|
+
# reuse then fails and the hook's event is silently DROPPED. Derive it from the cap
|
|
354
|
+
# (+5s margin) so it always outlasts the launcher and reuses the winner's daemon.
|
|
355
|
+
local contender_wait=$((max_wait + 10))
|
|
356
|
+
|
|
357
|
+
local acquired=0 waited=0
|
|
358
|
+
while [ $waited -lt $contender_wait ]; do # ≥ cold-start cap + margin; no spin
|
|
359
|
+
if mkdir "$lock_dir" 2>/dev/null; then acquired=1; break; fi
|
|
360
|
+
sleep 0.5
|
|
361
|
+
waited=$((waited + 1))
|
|
362
|
+
# (#638 H2) Never hand back the excluded (wedged) daemon from here either.
|
|
363
|
+
# (#638 J1) port+pid match — a same-port fresh winner is reused, not skipped.
|
|
364
|
+
if reuse=$(_reuse_live_codex_daemon "$port_file"); then
|
|
365
|
+
if _codex_candidate_is_excluded "$reuse" "$exclude_port" "$exclude_pid"; then
|
|
366
|
+
continue # wedged candidate — keep waiting for the lock to reap+relaunch
|
|
367
|
+
fi
|
|
368
|
+
log "INFO" "ensure_codex_daemon: reusing daemon launched concurrently (port $reuse)"
|
|
369
|
+
echo "$reuse"
|
|
370
|
+
return 0
|
|
371
|
+
fi
|
|
372
|
+
done
|
|
373
|
+
if [ $acquired -ne 1 ]; then
|
|
374
|
+
# (#638 H2) The excluded (wedged) daemon is never an acceptable last-chance
|
|
375
|
+
# answer. (#638 J1) port+pid match — a same-port fresh winner IS acceptable.
|
|
376
|
+
if reuse=$(_reuse_live_codex_daemon "$port_file") \
|
|
377
|
+
&& ! _codex_candidate_is_excluded "$reuse" "$exclude_port" "$exclude_pid"; then
|
|
378
|
+
echo "$reuse"; return 0
|
|
379
|
+
fi
|
|
380
|
+
log "WARN" "ensure_codex_daemon: could not acquire relaunch lock $lock_dir within timeout"
|
|
381
|
+
return 1
|
|
382
|
+
fi
|
|
383
|
+
|
|
384
|
+
# (#638 G3) LOCK IS HELD from here to the release rmdir. Install the owner-crash
|
|
385
|
+
# cleanup so an interrupted owner releases the lock + reaps its unpublished child.
|
|
386
|
+
# Catchable signals route through `exit` (conventional 128+signum codes) so the
|
|
387
|
+
# EXIT trap runs; SIGKILL is untrappable — the +2min mtime reaper is that backstop.
|
|
388
|
+
CODEVIBE_ENSURE_LOCK_DIR="$lock_dir"
|
|
389
|
+
CODEVIBE_ENSURE_CHILD_PID=""
|
|
390
|
+
# (#638 H3) Publication context for the owner-crash trap: while CHILD_PID is
|
|
391
|
+
# set, an EXISTING port file was provably written by the child (the launch path
|
|
392
|
+
# rm -f's it first), so the trap can distinguish published from unpublished and
|
|
393
|
+
# leave a healthy just-published daemon alone.
|
|
394
|
+
CODEVIBE_ENSURE_PORT_FILE="$port_file"
|
|
395
|
+
trap '_codevibe_ensure_lock_cleanup' EXIT
|
|
396
|
+
trap 'exit 129' HUP
|
|
397
|
+
trap 'exit 130' INT
|
|
398
|
+
trap 'exit 143' TERM
|
|
399
|
+
|
|
400
|
+
# ── Double-check UNDER the lock: did a concurrent hook already bring one up? ──
|
|
401
|
+
# (#638 H2) The excluded (wedged) daemon is not "already live" — fall through.
|
|
402
|
+
# (#638 J1) port+pid match — a same-port fresh winner IS "already live": reuse.
|
|
403
|
+
if reuse=$(_reuse_live_codex_daemon "$port_file") \
|
|
404
|
+
&& ! _codex_candidate_is_excluded "$reuse" "$exclude_port" "$exclude_pid"; then
|
|
405
|
+
rmdir "$lock_dir" 2>/dev/null
|
|
406
|
+
trap - EXIT HUP INT TERM # (#638 G3) lock released — clear the crash-cleanup trap
|
|
407
|
+
CODEVIBE_ENSURE_LOCK_DIR=""
|
|
408
|
+
CODEVIBE_ENSURE_PORT_FILE=""
|
|
409
|
+
log "INFO" "ensure_codex_daemon: daemon already live under lock (port $reuse)"
|
|
410
|
+
echo "$reuse"
|
|
115
411
|
return 0
|
|
412
|
+
fi
|
|
413
|
+
|
|
414
|
+
# ── (#638 H2) Reap the WEDGED daemon before relaunching ──
|
|
415
|
+
# We hold the instance lock and the reuse candidate (if any) was the excluded
|
|
416
|
+
# port: a daemon that answers /health but whose /event pipeline is wedged.
|
|
417
|
+
# Leaving it alive would leak an orphan that keeps winning /health-based reuse.
|
|
418
|
+
# Codex has no instance-mapping/pid file the hook can read, so resolve the PID
|
|
419
|
+
# from the daemon's own /health body (top-level `.pid`, only when the marker
|
|
420
|
+
# matches) and identity-reap it (TERM→wait→KILL, G5 discipline) — the command
|
|
421
|
+
# line re-check means a foreign server lying about `pid` is never signaled.
|
|
422
|
+
if [ -n "$exclude_port" ]; then
|
|
423
|
+
local wedged_pid wedged_src
|
|
424
|
+
if [ -n "$exclude_pid" ]; then
|
|
425
|
+
# (#638 J1) Use the pid the CALLER snapshotted right when the POST failed.
|
|
426
|
+
# Probing /health HERE would be the wrong moment: the wedged daemon may
|
|
427
|
+
# have died and a concurrent hook's fresh winner may now hold the SAME
|
|
428
|
+
# recycled port — a reap-time probe would resolve (and reap) the healthy
|
|
429
|
+
# winner. The identity-guarded reap still refuses a dead/foreign pid.
|
|
430
|
+
wedged_pid="$exclude_pid"
|
|
431
|
+
wedged_src="snapshot"
|
|
432
|
+
else
|
|
433
|
+
# (#638 J1) No snapshot (the failed daemon's /health was already dead at
|
|
434
|
+
# exclusion time — pid unknowable): port-only fallback, reap-time probe,
|
|
435
|
+
# pre-J1 behavior. The reap below is still is_codevibe-guarded.
|
|
436
|
+
wedged_pid=$(_codex_daemon_pid_on_port "$exclude_port")
|
|
437
|
+
wedged_src="reap-time /health"
|
|
438
|
+
fi
|
|
439
|
+
case "$wedged_pid" in
|
|
440
|
+
''|*[!0-9]*)
|
|
441
|
+
log "WARN" "ensure_codex_daemon: excluded port $exclude_port has no discoverable daemon pid (/health absent or foreign) — relaunching without reap (#638 H2)"
|
|
442
|
+
;;
|
|
443
|
+
*)
|
|
444
|
+
log "WARN" "ensure_codex_daemon: reaping wedged daemon pid $wedged_pid on excluded port $exclude_port (via $wedged_src) before relaunch (#638 H2)"
|
|
445
|
+
_reap_codevibe_codex_daemon_pid "$wedged_pid" "wedged /event on port $exclude_port"
|
|
446
|
+
;;
|
|
447
|
+
esac
|
|
448
|
+
fi
|
|
449
|
+
|
|
450
|
+
# ── Launch (single cleanup point: rmdir at the end) ──
|
|
451
|
+
# Delete any STALE port file left by a prior dead daemon BEFORE relaunch — the
|
|
452
|
+
# readiness wait below keys off port-file existence, so a leftover would make it
|
|
453
|
+
# read the OLD dead port.
|
|
454
|
+
rm -f "$port_file"
|
|
455
|
+
|
|
456
|
+
log "INFO" "ensure_codex_daemon: relaunching Codex companion daemon (tmux $tmux_session)"
|
|
457
|
+
# Same launch shape as libexec/companion-launcher: cd to plugin dir, exec node so the
|
|
458
|
+
# backgrounded process is the node daemon (PPID=1, detached). The daemon derives
|
|
459
|
+
# its port-file path + tmux target from CODEVIBE_CODEX_TMUX_SESSION.
|
|
460
|
+
(cd "$plugin_dir" && exec env CODEVIBE_CODEX_TMUX_SESSION="$tmux_session" CODEVIBE_CODEX_DAEMON_RECOVERY=1 ENVIRONMENT="${ENVIRONMENT:-production}" node "$plugin_dir/dist/server.js") >> "${CODEVIBE_TMPDIR}/codevibe-codex-mcp.log" 2>&1 &
|
|
461
|
+
local server_pid=$! # capture so we can hold the lock while the daemon cold-starts
|
|
462
|
+
# (#638 G3) Child is launched but UNPUBLISHED (no port yet) — eligible for the
|
|
463
|
+
# owner-crash trap's identity-guarded reap until publish clears this.
|
|
464
|
+
CODEVIBE_ENSURE_CHILD_PID="$server_pid"
|
|
465
|
+
|
|
466
|
+
# HOLD THE LOCK THROUGH THE FULL COLD START. The daemon writes its port file
|
|
467
|
+
# only inside app.listen(), which runs AFTER start() awaits authenticate +
|
|
468
|
+
# registerDeviceEncryptionKey + orphan-sweep (all NETWORK). On the incident
|
|
469
|
+
# (woken Mac, slow/returning network) that can far exceed a few seconds; if we
|
|
470
|
+
# released the lock early a hook firing in the gap would find the port file
|
|
471
|
+
# still absent (we rm'd it) and launch a DUPLICATE. Wait WHILE the daemon PID
|
|
472
|
+
# is alive, up to ~60s, breaking the instant the port appears OR the PID dies
|
|
473
|
+
# (→ auth-fail death: give up immediately; do NOT wait the full cap).
|
|
474
|
+
local waited2=0 # readiness cap is $max_wait (computed above)
|
|
475
|
+
while [ ! -f "$port_file" ] && ps -p "$server_pid" > /dev/null 2>&1 && [ $waited2 -lt $max_wait ]; do
|
|
476
|
+
sleep 0.5
|
|
477
|
+
waited2=$((waited2 + 1))
|
|
478
|
+
done
|
|
479
|
+
|
|
480
|
+
local rc=1 out_port=""
|
|
481
|
+
if [ -f "$port_file" ]; then
|
|
482
|
+
out_port=$(cat "$port_file" 2>/dev/null)
|
|
483
|
+
if [ -n "$out_port" ]; then
|
|
484
|
+
log "INFO" "ensure_codex_daemon: daemon ready on port $out_port"
|
|
485
|
+
# (#638 G3) PUBLISHED — the live daemon is now discoverable; it must never be
|
|
486
|
+
# reaped by the owner-crash trap.
|
|
487
|
+
CODEVIBE_ENSURE_CHILD_PID=""
|
|
488
|
+
rc=0
|
|
489
|
+
fi
|
|
490
|
+
fi
|
|
491
|
+
if [ $rc -ne 0 ]; then
|
|
492
|
+
if ! ps -p "$server_pid" > /dev/null 2>&1; then
|
|
493
|
+
log "ERROR" "ensure_codex_daemon: daemon died on startup (likely auth failure)"
|
|
494
|
+
else
|
|
495
|
+
# (#638 F3) Cold-start cap elapsed and the port never appeared, but the launched
|
|
496
|
+
# PID is STILL ALIVE. Leaving it alive-and-unmapped is the #638 duplicate bug: the
|
|
497
|
+
# next hook's ensure finds no live daemon, relaunches, and now TWO daemons run for
|
|
498
|
+
# one tmux session. A daemon that hasn't bound its port within the cap is not making
|
|
499
|
+
# progress, so TERMINATE + REAP it BEFORE releasing the lock — no orphan survives for
|
|
500
|
+
# a duplicate to race; a clean relaunch on the next ensure is correct.
|
|
501
|
+
# (#638 G5) The old "continuously-alive so identity-safe" claim was WRONG for the
|
|
502
|
+
# KILL escalation: there IS a sleep window between the SIGTERM and the SIGKILL in
|
|
503
|
+
# which the PID can die and be recycled to an unrelated process. The shared reap
|
|
504
|
+
# helper re-verifies identity (is_codevibe_codex_daemon) immediately before EVERY
|
|
505
|
+
# signal — TERM and KILL; a foreign PID is logged + left alone.
|
|
506
|
+
log "WARN" "ensure_codex_daemon: port not bound within cold-start cap; reaping stuck daemon pid $server_pid to avoid an orphan+duplicate"
|
|
507
|
+
_reap_codevibe_codex_daemon_pid "$server_pid" "stuck cold-start (port never bound)"
|
|
508
|
+
CODEVIBE_ENSURE_CHILD_PID="" # reaped (or intentionally left) — trap must not re-signal
|
|
509
|
+
fi
|
|
510
|
+
fi
|
|
511
|
+
|
|
512
|
+
rmdir "$lock_dir" 2>/dev/null # release the launch lock (held for the whole cold start)
|
|
513
|
+
trap - EXIT HUP INT TERM # (#638 G3) lock released — clear the crash-cleanup trap
|
|
514
|
+
CODEVIBE_ENSURE_LOCK_DIR=""
|
|
515
|
+
CODEVIBE_ENSURE_CHILD_PID=""
|
|
516
|
+
CODEVIBE_ENSURE_PORT_FILE=""
|
|
517
|
+
[ $rc -eq 0 ] && echo "$out_port"
|
|
518
|
+
return $rc
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
send_to_server() {
|
|
522
|
+
local endpoint="$1"
|
|
523
|
+
local json_data="$2"
|
|
524
|
+
|
|
525
|
+
local server_url curl_exit http_code response
|
|
526
|
+
server_url=$(get_server_url)
|
|
527
|
+
|
|
528
|
+
if [ -n "$server_url" ]; then
|
|
529
|
+
log "DEBUG" "POST $server_url/$endpoint"
|
|
530
|
+
# (#638 G6) Bounded like the /health probe: a wedged-but-health-passing daemon
|
|
531
|
+
# (accepts TCP, never responds) must not hang the hook indefinitely — hooks
|
|
532
|
+
# block the agent UI. --connect-timeout 2 bounds connection establishment;
|
|
533
|
+
# --max-time 10 bounds the whole POST (generous for a slow-network POST).
|
|
534
|
+
response=$(curl -s --connect-timeout 2 --max-time 10 -w "\n%{http_code}" \
|
|
535
|
+
-X POST \
|
|
536
|
+
-H "Content-Type: application/json" \
|
|
537
|
+
-d "$json_data" \
|
|
538
|
+
"$server_url/$endpoint" 2>&1)
|
|
539
|
+
curl_exit=$?
|
|
540
|
+
http_code=$(echo "$response" | tail -n 1)
|
|
541
|
+
# (#638 G6) Success requires BOTH curl exit 0 AND HTTP 200. A curl timeout
|
|
542
|
+
# (exit 28) can still report a 200 status line if headers arrived before the
|
|
543
|
+
# response wedged — that is a TRANSPORT failure (delivery unconfirmed,
|
|
544
|
+
# eligible for the one relaunch+retry below), not a success or app failure.
|
|
545
|
+
if [ "$curl_exit" -eq 0 ] && [ "$http_code" = "200" ]; then
|
|
546
|
+
log "INFO" "Sent successfully (HTTP $http_code)"
|
|
547
|
+
return 0
|
|
548
|
+
fi
|
|
116
549
|
else
|
|
117
|
-
|
|
550
|
+
# No port file at all = dead/absent daemon (the wrapper removes the port file
|
|
551
|
+
# on exit). Treat as a transport failure so the relaunch path below fires.
|
|
552
|
+
curl_exit=1
|
|
553
|
+
http_code="000"
|
|
554
|
+
log "WARN" "No server URL (port file missing) — will attempt daemon relaunch"
|
|
555
|
+
fi
|
|
556
|
+
|
|
557
|
+
# (#638) TRANSPORT failure = curl non-zero OR HTTP 000 (dead daemon / missing
|
|
558
|
+
# port file). Relaunch the daemon ONCE and retry the POST once (one relaunch
|
|
559
|
+
# max, no loops). NOT for app 4xx/5xx — the daemon is alive and rejected the
|
|
560
|
+
# request; relaunching wouldn't help.
|
|
561
|
+
if [ "$curl_exit" -ne 0 ] || [ "$http_code" = "000" ]; then
|
|
562
|
+
log "WARN" "Transport failure to Codex daemon (curl exit ${curl_exit}, HTTP ${http_code}) — relaunching daemon and retrying once"
|
|
563
|
+
# (#638 H2) Pass the port that just transport-failed as the EXCLUDED port so
|
|
564
|
+
# ensure_codex_daemon cannot hand the same wedged daemon back (its /health
|
|
565
|
+
# may still answer 200 while /event is wedged) — it reaps it and launches
|
|
566
|
+
# fresh. Empty when there was no port file at all (nothing to exclude).
|
|
567
|
+
local failed_port=""
|
|
568
|
+
[ -n "$server_url" ] && failed_port="${server_url##*:}"
|
|
569
|
+
# (#638 J1) Snapshot the wedged daemon's IDENTITY (pid) NOW — one bounded
|
|
570
|
+
# /health `.pid` probe right after the transport failure, BEFORE calling
|
|
571
|
+
# ensure (which may wait on the lock while a concurrent hook reaps +
|
|
572
|
+
# relaunches on the SAME recycled port). Passing (port, pid) lets ensure
|
|
573
|
+
# tell THE wedged daemon from that healthy winner. Empty when /health is
|
|
574
|
+
# dead too (daemon fully dead — pid unknowable) → port-only fallback.
|
|
575
|
+
local failed_pid=""
|
|
576
|
+
[ -n "$failed_port" ] && failed_pid=$(_codex_daemon_pid_on_port "$failed_port")
|
|
577
|
+
local new_port retry
|
|
578
|
+
if new_port=$(ensure_codex_daemon "$failed_port" "$failed_pid"); then
|
|
579
|
+
log "INFO" "Relaunched Codex daemon on port $new_port, retrying POST /$endpoint"
|
|
580
|
+
retry=$(curl -s --connect-timeout 2 --max-time 10 -w "\n%{http_code}" \
|
|
581
|
+
-X POST \
|
|
582
|
+
-H "Content-Type: application/json" \
|
|
583
|
+
-d "$json_data" \
|
|
584
|
+
"http://localhost:${new_port}/$endpoint" 2>&1)
|
|
585
|
+
curl_exit=$?
|
|
586
|
+
http_code=$(echo "$retry" | tail -n 1)
|
|
587
|
+
if [ "$curl_exit" -eq 0 ] && [ "$http_code" = "200" ]; then
|
|
588
|
+
log "INFO" "Retry succeeded (HTTP $http_code)"
|
|
589
|
+
return 0
|
|
590
|
+
fi
|
|
591
|
+
log "WARN" "Retry after relaunch failed (curl exit $curl_exit, HTTP $http_code)"
|
|
592
|
+
return 1
|
|
593
|
+
fi
|
|
594
|
+
log "WARN" "Codex daemon relaunch failed; giving up on POST /$endpoint"
|
|
118
595
|
return 1
|
|
119
596
|
fi
|
|
597
|
+
|
|
598
|
+
log "ERROR" "Failed (HTTP $http_code)"
|
|
599
|
+
return 1
|
|
120
600
|
}
|
|
121
601
|
|
|
122
602
|
export CODEVIBE_TMPDIR
|
|
123
603
|
export -f log
|
|
124
604
|
export -f get_server_url
|
|
125
605
|
export -f read_json_input
|
|
606
|
+
export -f is_codevibe_codex_daemon
|
|
607
|
+
export -f _reap_codevibe_codex_daemon_pid
|
|
608
|
+
export -f _codevibe_ensure_lock_cleanup
|
|
609
|
+
export -f _reuse_live_codex_daemon
|
|
610
|
+
export -f _codex_daemon_pid_on_port
|
|
611
|
+
export -f _codex_candidate_is_excluded
|
|
612
|
+
export -f ensure_codex_daemon
|
|
126
613
|
export -f send_to_server
|