@codemieai/code 0.1.0 → 0.2.0
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 +13 -0
- package/bin/codebase-memory-ui-daemon.js +10 -0
- package/bin/codemie-codex.js +18 -0
- package/dist/agents/core/AgentCLI.d.ts +1 -0
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +29 -4
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/session/sync-state-utils.d.ts +11 -0
- package/dist/agents/core/session/sync-state-utils.d.ts.map +1 -0
- package/dist/agents/core/session/sync-state-utils.js +99 -0
- package/dist/agents/core/session/sync-state-utils.js.map +1 -0
- package/dist/agents/core/session/types.d.ts +8 -0
- package/dist/agents/core/session/types.d.ts.map +1 -1
- package/dist/agents/core/session/utils/jsonl-reader.d.ts +8 -0
- package/dist/agents/core/session/utils/jsonl-reader.d.ts.map +1 -1
- package/dist/agents/core/session/utils/jsonl-reader.js +37 -0
- package/dist/agents/core/session/utils/jsonl-reader.js.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +1 -1
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/agents/plugins/claude/plugin/hooks/hooks.json +0 -15
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js +2 -0
- package/dist/agents/plugins/claude/session/processors/claude.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/codex/codex-message-types.d.ts +80 -0
- package/dist/agents/plugins/codex/codex-message-types.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex-message-types.js +36 -0
- package/dist/agents/plugins/codex/codex-message-types.js.map +1 -0
- package/dist/agents/plugins/codex/codex-models.d.ts +9 -0
- package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex-models.js +227 -0
- package/dist/agents/plugins/codex/codex-models.js.map +1 -0
- package/dist/agents/plugins/codex/codex.incremental-sync.d.ts +39 -0
- package/dist/agents/plugins/codex/codex.incremental-sync.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.incremental-sync.js +147 -0
- package/dist/agents/plugins/codex/codex.incremental-sync.js.map +1 -0
- package/dist/agents/plugins/codex/codex.paths.d.ts +29 -0
- package/dist/agents/plugins/codex/codex.paths.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.paths.js +43 -0
- package/dist/agents/plugins/codex/codex.paths.js.map +1 -0
- package/dist/agents/plugins/codex/codex.plugin.d.ts +80 -0
- package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.plugin.js +474 -0
- package/dist/agents/plugins/codex/codex.plugin.js.map +1 -0
- package/dist/agents/plugins/codex/codex.reconciliation.d.ts +43 -0
- package/dist/agents/plugins/codex/codex.reconciliation.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.reconciliation.js +141 -0
- package/dist/agents/plugins/codex/codex.reconciliation.js.map +1 -0
- package/dist/agents/plugins/codex/codex.session.d.ts +58 -0
- package/dist/agents/plugins/codex/codex.session.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.session.js +326 -0
- package/dist/agents/plugins/codex/codex.session.js.map +1 -0
- package/dist/agents/plugins/codex/codex.storage-utils.d.ts +15 -0
- package/dist/agents/plugins/codex/codex.storage-utils.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.storage-utils.js +19 -0
- package/dist/agents/plugins/codex/codex.storage-utils.js.map +1 -0
- package/dist/agents/plugins/codex/index.d.ts +7 -0
- package/dist/agents/plugins/codex/index.d.ts.map +1 -0
- package/dist/agents/plugins/codex/index.js +9 -0
- package/dist/agents/plugins/codex/index.js.map +1 -0
- package/dist/agents/plugins/codex/session/processors/codex.conversations-processor.d.ts +24 -0
- package/dist/agents/plugins/codex/session/processors/codex.conversations-processor.d.ts.map +1 -0
- package/dist/agents/plugins/codex/session/processors/codex.conversations-processor.js +613 -0
- package/dist/agents/plugins/codex/session/processors/codex.conversations-processor.js.map +1 -0
- package/dist/agents/plugins/codex/session/processors/codex.metrics-processor.d.ts +21 -0
- package/dist/agents/plugins/codex/session/processors/codex.metrics-processor.d.ts.map +1 -0
- package/dist/agents/plugins/codex/session/processors/codex.metrics-processor.js +124 -0
- package/dist/agents/plugins/codex/session/processors/codex.metrics-processor.js.map +1 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.js +1 -0
- package/dist/agents/plugins/gemini/session/processors/gemini.conversations-processor.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode.storage-utils.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode.storage-utils.js +2 -29
- package/dist/agents/plugins/opencode/opencode.storage-utils.js.map +1 -1
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/session/processors/opencode.conversations-processor.js.map +1 -1
- package/dist/agents/registry.d.ts.map +1 -1
- package/dist/agents/registry.js +2 -0
- package/dist/agents/registry.js.map +1 -1
- package/dist/bin/codebase-memory-ui-daemon.d.ts +2 -0
- package/dist/bin/codebase-memory-ui-daemon.d.ts.map +1 -0
- package/dist/bin/codebase-memory-ui-daemon.js +141 -0
- package/dist/bin/codebase-memory-ui-daemon.js.map +1 -0
- package/dist/bin/proxy-daemon.js +4 -0
- package/dist/bin/proxy-daemon.js.map +1 -1
- package/dist/cli/commands/assistants/constants.js +2 -2
- package/dist/cli/commands/assistants/constants.js.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/constants.js +4 -4
- package/dist/cli/commands/assistants/setup/configuration/constants.js.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/ui.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/configuration/ui.js +10 -13
- package/dist/cli/commands/assistants/setup/configuration/ui.js.map +1 -1
- package/dist/cli/commands/assistants/setup/generators/codex-skill-generator.d.ts +4 -0
- package/dist/cli/commands/assistants/setup/generators/codex-skill-generator.d.ts.map +1 -0
- package/dist/cli/commands/assistants/setup/generators/codex-skill-generator.js +76 -0
- package/dist/cli/commands/assistants/setup/generators/codex-skill-generator.js.map +1 -0
- package/dist/cli/commands/assistants/setup/generators/gemini-skill-generator.d.ts +4 -0
- package/dist/cli/commands/assistants/setup/generators/gemini-skill-generator.d.ts.map +1 -0
- package/dist/cli/commands/assistants/setup/generators/gemini-skill-generator.js +68 -0
- package/dist/cli/commands/assistants/setup/generators/gemini-skill-generator.js.map +1 -0
- package/dist/cli/commands/assistants/setup/helpers.d.ts +3 -2
- package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/helpers.js +43 -8
- package/dist/cli/commands/assistants/setup/helpers.js.map +1 -1
- package/dist/cli/commands/assistants/setup/index.d.ts +3 -1
- package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/index.js +15 -12
- package/dist/cli/commands/assistants/setup/index.js.map +1 -1
- package/dist/cli/commands/assistants/setup/manualConfiguration/types.d.ts +2 -2
- package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js +2 -2
- package/dist/cli/commands/assistants/setup/manualConfiguration/ui.js.map +1 -1
- package/dist/cli/commands/assistants/setup/selection/ui.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/selection/ui.js +8 -13
- package/dist/cli/commands/assistants/setup/selection/ui.js.map +1 -1
- package/dist/cli/commands/assistants/setup/summary/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/summary/index.js +14 -8
- package/dist/cli/commands/assistants/setup/summary/index.js.map +1 -1
- package/dist/cli/commands/codebase/daemon-manager.d.ts +24 -0
- package/dist/cli/commands/codebase/daemon-manager.d.ts.map +1 -0
- package/dist/cli/commands/codebase/daemon-manager.js +112 -0
- package/dist/cli/commands/codebase/daemon-manager.js.map +1 -0
- package/dist/cli/commands/codebase/index.d.ts +3 -0
- package/dist/cli/commands/codebase/index.d.ts.map +1 -0
- package/dist/cli/commands/codebase/index.js +130 -0
- package/dist/cli/commands/codebase/index.js.map +1 -0
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +15 -2
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/install.js +2 -2
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/profile/index.d.ts +14 -0
- package/dist/cli/commands/profile/index.d.ts.map +1 -1
- package/dist/cli/commands/profile/index.js +110 -27
- package/dist/cli/commands/profile/index.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop-managed-mcp-servers.json +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.d.ts +4 -6
- package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.js +92 -15
- package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
- package/dist/cli/commands/proxy/daemon-manager.d.ts +1 -0
- package/dist/cli/commands/proxy/daemon-manager.d.ts.map +1 -1
- package/dist/cli/commands/proxy/daemon-manager.js +2 -0
- package/dist/cli/commands/proxy/daemon-manager.js.map +1 -1
- package/dist/cli/commands/proxy/index.d.ts.map +1 -1
- package/dist/cli/commands/proxy/index.js +42 -0
- package/dist/cli/commands/proxy/index.js.map +1 -1
- package/dist/cli/commands/setup.js +1 -1
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/shared/agent-targets.d.ts +10 -0
- package/dist/cli/commands/shared/agent-targets.d.ts.map +1 -0
- package/dist/cli/commands/shared/agent-targets.js +220 -0
- package/dist/cli/commands/shared/agent-targets.js.map +1 -0
- package/dist/cli/commands/shared/prompts/storage-scope.d.ts.map +1 -1
- package/dist/cli/commands/shared/prompts/storage-scope.js +9 -2
- package/dist/cli/commands/shared/prompts/storage-scope.js.map +1 -1
- package/dist/cli/commands/shared/selection/ui.d.ts +22 -0
- package/dist/cli/commands/shared/selection/ui.d.ts.map +1 -1
- package/dist/cli/commands/shared/selection/ui.js +34 -0
- package/dist/cli/commands/shared/selection/ui.js.map +1 -1
- package/dist/cli/commands/skills/lib/skills-metrics.d.ts.map +1 -1
- package/dist/cli/commands/skills/lib/skills-metrics.js +47 -11
- package/dist/cli/commands/skills/lib/skills-metrics.js.map +1 -1
- package/dist/cli/commands/skills/setup/generators/codex-skill-generator.d.ts +4 -0
- package/dist/cli/commands/skills/setup/generators/codex-skill-generator.d.ts.map +1 -0
- package/dist/cli/commands/skills/setup/generators/codex-skill-generator.js +51 -0
- package/dist/cli/commands/skills/setup/generators/codex-skill-generator.js.map +1 -0
- package/dist/cli/commands/skills/setup/generators/gemini-skill-generator.d.ts +4 -0
- package/dist/cli/commands/skills/setup/generators/gemini-skill-generator.d.ts.map +1 -0
- package/dist/cli/commands/skills/setup/generators/gemini-skill-generator.js +51 -0
- package/dist/cli/commands/skills/setup/generators/gemini-skill-generator.js.map +1 -0
- package/dist/cli/commands/skills/setup/helpers.d.ts +3 -2
- package/dist/cli/commands/skills/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/helpers.js +31 -6
- package/dist/cli/commands/skills/setup/helpers.js.map +1 -1
- package/dist/cli/commands/skills/setup/index.d.ts +2 -1
- package/dist/cli/commands/skills/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/index.js +14 -11
- package/dist/cli/commands/skills/setup/index.js.map +1 -1
- package/dist/cli/commands/skills/setup/selection/ui.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/selection/ui.js +8 -13
- package/dist/cli/commands/skills/setup/selection/ui.js.map +1 -1
- package/dist/cli/commands/test-metrics.js +3 -4
- package/dist/cli/commands/test-metrics.js.map +1 -1
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/env/types.d.ts +2 -0
- package/dist/env/types.d.ts.map +1 -1
- package/dist/env/types.js.map +1 -1
- package/dist/frameworks/plugins/bmad.plugin.d.ts +10 -1
- package/dist/frameworks/plugins/bmad.plugin.d.ts.map +1 -1
- package/dist/frameworks/plugins/bmad.plugin.js +108 -9
- package/dist/frameworks/plugins/bmad.plugin.js.map +1 -1
- package/dist/frameworks/plugins/codebase-memory.plugin.d.ts +18 -0
- package/dist/frameworks/plugins/codebase-memory.plugin.d.ts.map +1 -0
- package/dist/frameworks/plugins/codebase-memory.plugin.js +131 -0
- package/dist/frameworks/plugins/codebase-memory.plugin.js.map +1 -0
- package/dist/frameworks/plugins/index.d.ts +1 -0
- package/dist/frameworks/plugins/index.d.ts.map +1 -1
- package/dist/frameworks/plugins/index.js +3 -0
- package/dist/frameworks/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +4 -4
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts +20 -0
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js +104 -0
- package/dist/providers/plugins/sso/proxy/plugins/codex-encrypted-content-sanitizer.plugin.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js +24 -3
- package/dist/providers/plugins/sso/proxy/plugins/gateway-key.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +5 -0
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +3 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +5 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/logging.plugin.js +10 -3
- package/dist/providers/plugins/sso/proxy/plugins/logging.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js +26 -8
- package/dist/providers/plugins/sso/proxy/plugins/sso.session-sync.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js +21 -4
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
- package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/SessionSyncer.js +5 -72
- package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/apiClient.d.ts +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/apiClient.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/apiClient.js +95 -4
- package/dist/providers/plugins/sso/session/processors/conversations/apiClient.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/constants.d.ts +2 -2
- package/dist/providers/plugins/sso/session/processors/conversations/constants.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/constants.js +2 -2
- package/dist/providers/plugins/sso/session/processors/conversations/constants.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js +85 -21
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/types.d.ts +10 -2
- package/dist/providers/plugins/sso/session/processors/conversations/types.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +80 -46
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts +1 -9
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js +94 -30
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-api-client.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts +4 -6
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js +24 -25
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-post-processor.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +140 -99
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-types.d.ts +11 -3
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-types.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.auth.js +22 -4
- package/dist/providers/plugins/sso/sso.auth.js.map +1 -1
- package/dist/providers/plugins/sso/sso.setup-steps.js +2 -2
- package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js +4 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.paths.js.map +1 -1
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -1
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +1 -3
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -1
- package/dist/utils/browser.d.ts +7 -0
- package/dist/utils/browser.d.ts.map +1 -0
- package/dist/utils/browser.js +10 -0
- package/dist/utils/browser.js.map +1 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +7 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/paths.d.ts +8 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +15 -0
- package/dist/utils/paths.js.map +1 -1
- package/package.json +2 -1
- package/scripts/compare-codex-conversations.mjs +894 -0
- package/scripts/validate-secrets.js +7 -3
- package/dist/agents/plugins/claude/plugin/claude-templates/README.md +0 -539
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/CLAUDE.md.template +0 -252
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/code-review-agent-template.md.template +0 -433
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/refactor-cleaner-agent.md.template +0 -337
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/solution-architect-agent.md.template +0 -197
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/agents/unit-tester-agent.md.template +0 -258
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/api/api-patterns.md.template +0 -179
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/architecture/architecture.md.template +0 -197
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/data/database-patterns.md.template +0 -248
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/development/development-practices.md.template +0 -298
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/integration/external-integrations.md.template +0 -160
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/security/security-practices.md.template +0 -295
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/code-quality.md.template +0 -186
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/standards/git-workflow.md.template +0 -177
- package/dist/agents/plugins/claude/plugin/claude-templates/templates/guides/testing/testing-patterns.md.template +0 -315
- package/dist/agents/plugins/claude/plugin/commands/codemie-init.md +0 -522
- package/dist/agents/plugins/claude/plugin/commands/handoff.md +0 -56
- package/dist/agents/plugins/claude/plugin/commands/memory-refresh.md +0 -549
- package/dist/agents/plugins/claude/plugin/scripts/bash/rtk-baseline.sh +0 -39
- package/dist/agents/plugins/claude/plugin/scripts/bash/rtk-rewrite.sh +0 -101
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/SKILL.md +0 -206
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/bad-agent.md +0 -45
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/bad-claude-md-snippet.md +0 -40
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/bad-command.md +0 -30
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/bad-hooks.json +0 -23
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/bad-skill.md +0 -48
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/good-agent.md +0 -145
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/good-claude-md-snippet.md +0 -126
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/good-command.md +0 -170
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/good-hooks.json +0 -46
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/good-skill.md +0 -144
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/examples/sample-report.md +0 -223
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/references/best-practices.md +0 -510
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/references/component-checklists.md +0 -413
- package/dist/agents/plugins/claude/plugin/skills/claude-setup-audit/scripts/scan-repo.sh +0 -162
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
// src/agents/plugins/codex/codex.plugin.ts
|
|
2
|
+
/**
|
|
3
|
+
* Codex Agent Plugin
|
|
4
|
+
*
|
|
5
|
+
* Registers OpenAI Codex CLI (@openai/codex) as a selectable agent in CodeMie.
|
|
6
|
+
*
|
|
7
|
+
* Config injection strategy:
|
|
8
|
+
* - CODEMIE_BASE_URL → OPENAI_BASE_URL (env var, picked up natively by Codex)
|
|
9
|
+
* - CODEMIE_API_KEY → OPENAI_API_KEY + CODEMIE_API_KEY (env vars via transformEnvVars)
|
|
10
|
+
* - Model injected via: --model <model>
|
|
11
|
+
* - Provider: model_providers.codemie with env_key=CODEMIE_API_KEY (bypasses ~/.codex/auth.json)
|
|
12
|
+
* auth.json has highest priority for the default openai provider; a custom provider with
|
|
13
|
+
* env_key pointing to CODEMIE_API_KEY bypasses it since auth.json only covers openai.
|
|
14
|
+
*
|
|
15
|
+
* Session lifecycle (CLI-level via processEvent):
|
|
16
|
+
* 1. onSessionStart → processEvent(SessionStart) — creates session record + sends start metrics
|
|
17
|
+
* → startCodexIncrementalSync — kicks off the in-process timer
|
|
18
|
+
* 2. enrichArgs → transform --task, inject --model + model_providers.codemie + tuning flags
|
|
19
|
+
* 3. [Codex runs]
|
|
20
|
+
* 4. onSessionEnd → stopCodexIncrementalSync → process rollout → processEvent(SessionEnd)
|
|
21
|
+
*
|
|
22
|
+
* Why no Codex hooks?
|
|
23
|
+
* Codex 0.129.0 advertises a `hooks` feature (stable per `codex features list`),
|
|
24
|
+
* but smoke tests on 2026-05-09 showed that neither -c overrides
|
|
25
|
+
* (`-c 'hooks.SessionStart=[...]'`) nor a direct `[[hooks.SessionStart]]` block
|
|
26
|
+
* in `~/.codex/config.toml` fired the configured command in `codex exec`.
|
|
27
|
+
* See docs/superpowers/plans/2026-05-09-codex-hooks-incremental-sync.md
|
|
28
|
+
* and https://github.com/openai/codex/issues/17532.
|
|
29
|
+
*
|
|
30
|
+
* Until the actual hook delivery mechanism is documented (likely tied to the
|
|
31
|
+
* `~/.codex/plugins/<name>/.codex-plugin/plugin.json` plugin manifest format),
|
|
32
|
+
* we run an in-process timer (codex.incremental-sync.ts) inside `codemie-cli`
|
|
33
|
+
* to keep `_metrics.jsonl` and `_conversation.jsonl` warm. The SSO proxy timer
|
|
34
|
+
* (sso.session-sync.plugin.ts) handles the API push as usual.
|
|
35
|
+
*
|
|
36
|
+
* References:
|
|
37
|
+
* - OpenAI Codex CLI: https://github.com/openai/codex
|
|
38
|
+
* - Configuration: https://github.com/openai/codex/blob/main/codex-rs/docs/configuration.md
|
|
39
|
+
* - Advanced config: https://developers.openai.com/codex/config-advanced
|
|
40
|
+
* - CLI Reference: https://github.com/openai/codex/blob/main/codex-rs/docs/cli-reference.md
|
|
41
|
+
* - Hooks (deferred): https://developers.openai.com/codex/hooks
|
|
42
|
+
*/
|
|
43
|
+
import { BaseAgentAdapter } from '../../core/BaseAgentAdapter.js';
|
|
44
|
+
import { commandExists, exec } from '../../../utils/processes.js';
|
|
45
|
+
import { logger } from '../../../utils/logger.js';
|
|
46
|
+
import { ConfigurationError } from '../../../utils/errors.js';
|
|
47
|
+
import { CodexSessionAdapter } from './codex.session.js';
|
|
48
|
+
import { assertExplicitCodexModelAllowed, isCodexCompatibleModelName, resolveCodexModel, } from './codex-models.js';
|
|
49
|
+
import { resolveHomeDir } from '../../../utils/paths.js';
|
|
50
|
+
import { startCodexIncrementalSync, stopCodexIncrementalSync, } from './codex.incremental-sync.js';
|
|
51
|
+
import { reconcileStaleCodexSessions } from './codex.reconciliation.js';
|
|
52
|
+
import { mkdir, realpath as fsRealpath } from 'fs/promises';
|
|
53
|
+
/**
|
|
54
|
+
* Supported Codex CLI version
|
|
55
|
+
* Latest version tested and verified with CodeMie backend
|
|
56
|
+
*
|
|
57
|
+
* **UPDATE THIS WHEN BUMPING CODEX VERSION**
|
|
58
|
+
*/
|
|
59
|
+
const CODEX_SUPPORTED_VERSION = '0.129.0';
|
|
60
|
+
/**
|
|
61
|
+
* Minimum supported Codex CLI version
|
|
62
|
+
* Versions below this are known to be incompatible and will be blocked from starting
|
|
63
|
+
* Rule: always 10 minor versions below CODEX_SUPPORTED_VERSION for 0.x Codex releases
|
|
64
|
+
* e.g. supported = 0.129.0 → minimum = 0.119.0
|
|
65
|
+
*
|
|
66
|
+
* **UPDATE THIS WHEN BUMPING CODEX VERSION**
|
|
67
|
+
*/
|
|
68
|
+
const CODEX_MINIMUM_SUPPORTED_VERSION = '0.119.0';
|
|
69
|
+
/**
|
|
70
|
+
* Build a hook config object from environment variables.
|
|
71
|
+
* Used by both onSessionStart and onSessionEnd lifecycle hooks.
|
|
72
|
+
*/
|
|
73
|
+
function buildHookConfig(env, sessionId) {
|
|
74
|
+
return {
|
|
75
|
+
agentName: env.CODEMIE_AGENT || 'codex',
|
|
76
|
+
sessionId,
|
|
77
|
+
provider: env.CODEMIE_PROVIDER,
|
|
78
|
+
apiBaseUrl: env.CODEMIE_BASE_URL,
|
|
79
|
+
ssoUrl: env.CODEMIE_URL,
|
|
80
|
+
syncApiUrl: env.CODEMIE_SYNC_API_URL,
|
|
81
|
+
version: env.CODEMIE_CLI_VERSION,
|
|
82
|
+
profileName: env.CODEMIE_PROFILE_NAME,
|
|
83
|
+
project: env.CODEMIE_PROJECT,
|
|
84
|
+
model: env.CODEMIE_MODEL,
|
|
85
|
+
clientType: 'codemie-codex',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export const CodexPluginMetadata = {
|
|
89
|
+
name: 'codex',
|
|
90
|
+
displayName: 'OpenAI Codex CLI',
|
|
91
|
+
description: 'OpenAI Codex CLI - AI coding agent by OpenAI',
|
|
92
|
+
npmPackage: '@openai/codex',
|
|
93
|
+
cliCommand: process.env.CODEMIE_CODEX_BIN || 'codex',
|
|
94
|
+
// Version management configuration
|
|
95
|
+
supportedVersion: CODEX_SUPPORTED_VERSION, // Latest version tested with CodeMie backend
|
|
96
|
+
minimumSupportedVersion: CODEX_MINIMUM_SUPPORTED_VERSION, // Minimum version required to run
|
|
97
|
+
dataPaths: {
|
|
98
|
+
home: '.codex', // ~/.codex is fixed for Codex (no XDG convention)
|
|
99
|
+
},
|
|
100
|
+
extensionsConfig: {
|
|
101
|
+
project: '.codex',
|
|
102
|
+
global: '~/.codex',
|
|
103
|
+
skillsEntryFile: 'SKILL.md',
|
|
104
|
+
},
|
|
105
|
+
envMapping: {
|
|
106
|
+
// CODEMIE_BASE_URL → OPENAI_BASE_URL (read natively by Codex)
|
|
107
|
+
baseUrl: ['OPENAI_BASE_URL'],
|
|
108
|
+
// CODEMIE_API_KEY → OPENAI_API_KEY only.
|
|
109
|
+
// CODEMIE_API_KEY is intentionally NOT listed here: transformEnvVars deletes all
|
|
110
|
+
// vars in this array before re-setting them, which would wipe CODEMIE_API_KEY
|
|
111
|
+
// before enrichArgs can use it as env_key for the custom model provider.
|
|
112
|
+
// CODEMIE_API_KEY is passed through to the codex process env unchanged.
|
|
113
|
+
apiKey: ['OPENAI_API_KEY'],
|
|
114
|
+
model: [],
|
|
115
|
+
},
|
|
116
|
+
supportedProviders: ['ai-run-sso', 'bearer-auth', 'litellm'],
|
|
117
|
+
blockedModelPatterns: [],
|
|
118
|
+
recommendedModels: ['gpt-5.5', 'gpt-5.4', 'gpt-5.3-codex', 'gpt-5.2-codex'],
|
|
119
|
+
ssoConfig: {
|
|
120
|
+
enabled: true,
|
|
121
|
+
clientType: 'codemie-codex',
|
|
122
|
+
},
|
|
123
|
+
lifecycle: {
|
|
124
|
+
/**
|
|
125
|
+
* Keep CodeMie-managed Codex state separate from native Codex state.
|
|
126
|
+
*
|
|
127
|
+
* Plain `codex` and Codex Desktop continue to use Codex's default home
|
|
128
|
+
* unless the user configured CODEX_HOME themselves. codemie-codex runs
|
|
129
|
+
* with a CodeMie-owned CODEX_HOME so generated catalogs, selected models,
|
|
130
|
+
* history, and rollout files do not pollute native Codex state.
|
|
131
|
+
*/
|
|
132
|
+
async beforeRun(env) {
|
|
133
|
+
if (!env.CODEX_HOME) {
|
|
134
|
+
env.CODEX_HOME = resolveHomeDir('.codex/codemie/home');
|
|
135
|
+
}
|
|
136
|
+
await mkdir(env.CODEX_HOME, { recursive: true });
|
|
137
|
+
return env;
|
|
138
|
+
},
|
|
139
|
+
/**
|
|
140
|
+
* Send session start metrics via the CLI-level hook pipeline.
|
|
141
|
+
*
|
|
142
|
+
* Routes through processEvent(SessionStart) which:
|
|
143
|
+
* - Creates the session record in ~/.codemie/sessions/{id}.json (status=active)
|
|
144
|
+
* - Sends session start metrics to v1/metrics API (SSO provider only)
|
|
145
|
+
*/
|
|
146
|
+
async onSessionStart(sessionId, env) {
|
|
147
|
+
const startedAt = Date.now();
|
|
148
|
+
env.CODEMIE_CODEX_STARTED_AT = String(startedAt);
|
|
149
|
+
try {
|
|
150
|
+
const { processEvent } = await import('../../../cli/commands/hook.js');
|
|
151
|
+
const event = {
|
|
152
|
+
hook_event_name: 'SessionStart',
|
|
153
|
+
session_id: sessionId,
|
|
154
|
+
transcript_path: '',
|
|
155
|
+
permission_mode: 'default',
|
|
156
|
+
cwd: process.cwd(),
|
|
157
|
+
source: 'startup',
|
|
158
|
+
};
|
|
159
|
+
await processEvent(event, buildHookConfig(env, sessionId));
|
|
160
|
+
logger.info(`[codex] SessionStart hook completed for session ${sessionId}`);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
164
|
+
logger.error(`[codex] SessionStart hook failed (non-blocking): ${msg}`);
|
|
165
|
+
}
|
|
166
|
+
// Reconcile previously stranded codex sessions. Codex 0.129.0 has no
|
|
167
|
+
// graceful-shutdown guarantee, so kill -9 / OS shutdown leaves sessions
|
|
168
|
+
// marked `active` with no terminal lifecycle metric. Fire-and-forget so
|
|
169
|
+
// a slow reconcile never blocks the new session from starting.
|
|
170
|
+
void reconcileStaleCodexSessions(env, buildHookConfig).catch((error) => {
|
|
171
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
172
|
+
logger.debug(`[codex] Stale-session reconciliation failed (non-blocking): ${msg}`);
|
|
173
|
+
});
|
|
174
|
+
// Start the in-process incremental sync timer. Because Codex 0.129.0
|
|
175
|
+
// hooks were verified non-firing on `codex exec`, we re-parse the rollout
|
|
176
|
+
// file every ~30 s and write deltas/conversations to JSONL. The SSO proxy
|
|
177
|
+
// timer (sso.session-sync.plugin.ts) pushes them to the API.
|
|
178
|
+
try {
|
|
179
|
+
startCodexIncrementalSync({
|
|
180
|
+
sessionId,
|
|
181
|
+
startedAt,
|
|
182
|
+
cwd: process.cwd(),
|
|
183
|
+
metadata: CodexPluginMetadata,
|
|
184
|
+
ssoUrl: env.CODEMIE_URL,
|
|
185
|
+
syncApiUrl: env.CODEMIE_SYNC_API_URL || env.CODEMIE_BASE_URL,
|
|
186
|
+
cliVersion: env.CODEMIE_CLI_VERSION,
|
|
187
|
+
buildContext: () => ({
|
|
188
|
+
sessionId,
|
|
189
|
+
apiBaseUrl: env.CODEMIE_BASE_URL || '',
|
|
190
|
+
cookies: '',
|
|
191
|
+
clientType: 'codemie-codex',
|
|
192
|
+
version: env.CODEMIE_CLI_VERSION || '0.0.0',
|
|
193
|
+
dryRun: false,
|
|
194
|
+
}),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
199
|
+
logger.error(`[codex] Failed to start incremental sync timer: ${msg}`);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
/**
|
|
203
|
+
* Transform CodeMie flags into Codex CLI arguments.
|
|
204
|
+
*
|
|
205
|
+
* Transformations applied (in order):
|
|
206
|
+
* 1. --task <prompt> → exec <prompt> (non-interactive subcommand)
|
|
207
|
+
* 2. config.model → --model <model>
|
|
208
|
+
* 3. Custom provider → model_providers.codemie (env_key bypasses ~/.codex/auth.json)
|
|
209
|
+
* 4. Session tuning → --config flags (unconditional)
|
|
210
|
+
*
|
|
211
|
+
* OPENAI_BASE_URL and OPENAI_API_KEY are injected into the process env
|
|
212
|
+
* by BaseAgentAdapter.transformEnvVars via envMapping.
|
|
213
|
+
*/
|
|
214
|
+
enrichArgs(args, config) {
|
|
215
|
+
let enriched = args;
|
|
216
|
+
// 1. Transform --task <value> → exec <value> (non-interactive subcommand)
|
|
217
|
+
const taskIndex = enriched.indexOf('--task');
|
|
218
|
+
if (taskIndex !== -1 && taskIndex < enriched.length - 1) {
|
|
219
|
+
const taskValue = enriched[taskIndex + 1];
|
|
220
|
+
enriched = [
|
|
221
|
+
'exec',
|
|
222
|
+
...enriched.slice(0, taskIndex),
|
|
223
|
+
...enriched.slice(taskIndex + 2),
|
|
224
|
+
taskValue,
|
|
225
|
+
];
|
|
226
|
+
}
|
|
227
|
+
// 2. Inject model via --model when not already overridden.
|
|
228
|
+
const explicitModel = getExplicitModelArg(enriched);
|
|
229
|
+
const availableModels = (process.env.CODEMIE_CODEX_AVAILABLE_MODELS || '')
|
|
230
|
+
.split(',')
|
|
231
|
+
.map(model => model.trim())
|
|
232
|
+
.filter(Boolean);
|
|
233
|
+
if (explicitModel) {
|
|
234
|
+
assertExplicitCodexModelAllowed(explicitModel, availableModels);
|
|
235
|
+
}
|
|
236
|
+
else if (config?.model) {
|
|
237
|
+
enriched = ['--model', config.model, ...enriched];
|
|
238
|
+
}
|
|
239
|
+
// 3. Configure a custom model provider to bypass ~/.codex/auth.json.
|
|
240
|
+
// auth.json has highest priority for the default "openai" provider and overrides
|
|
241
|
+
// even OPENAI_API_KEY env var. Using a custom provider with env_key pointing to
|
|
242
|
+
// CODEMIE_API_KEY (set by transformEnvVars) bypasses auth.json entirely, since
|
|
243
|
+
// auth.json only stores credentials for the default openai provider.
|
|
244
|
+
// --config uses TOML values: strings must be double-quoted.
|
|
245
|
+
if (config?.apiKey && config.apiKey !== 'not-required' && config?.baseUrl) {
|
|
246
|
+
enriched = [
|
|
247
|
+
'--config', 'model_provider="codemie"',
|
|
248
|
+
'--config', 'model_providers.codemie.name="codemie"',
|
|
249
|
+
'--config', `model_providers.codemie.base_url="${config.baseUrl}"`,
|
|
250
|
+
'--config', 'model_providers.codemie.env_key="CODEMIE_API_KEY"',
|
|
251
|
+
'--config', 'model_providers.codemie.wire_api="responses"',
|
|
252
|
+
...(process.env.CODEMIE_CODEX_MODEL_CATALOG_JSON
|
|
253
|
+
? ['--config', `model_catalog_json="${process.env.CODEMIE_CODEX_MODEL_CATALOG_JSON}"`]
|
|
254
|
+
: []),
|
|
255
|
+
...enriched,
|
|
256
|
+
];
|
|
257
|
+
}
|
|
258
|
+
// 4. Inject session tuning flags (unconditional).
|
|
259
|
+
// --config uses TOML values: integers unquoted, strings double-quoted.
|
|
260
|
+
enriched = [
|
|
261
|
+
'--config', 'stream_max_retries=40',
|
|
262
|
+
'--config', 'request_max_retries=40',
|
|
263
|
+
'--config', 'max_output_tokens=16384',
|
|
264
|
+
'--config', 'model_verbosity="medium"',
|
|
265
|
+
...enriched,
|
|
266
|
+
];
|
|
267
|
+
return enriched;
|
|
268
|
+
},
|
|
269
|
+
/**
|
|
270
|
+
* Process Codex session metrics and send session end metrics via CLI-level hook pipeline.
|
|
271
|
+
*
|
|
272
|
+
* Called by BaseAgentAdapter when Codex exits, BEFORE SessionSyncer.
|
|
273
|
+
*
|
|
274
|
+
* Steps:
|
|
275
|
+
* 1. Discover the most recent rollout file (~/.codex/sessions/YYYY/MM/DD/)
|
|
276
|
+
* 2. Parse rollout, extract tool usage, write MetricDelta to JSONL
|
|
277
|
+
* (so SessionEnd pipeline can sync it to v1/metrics)
|
|
278
|
+
* 3. processEvent(SessionEnd) — full CLI-level pipeline:
|
|
279
|
+
* accumulateActiveDuration → incrementalSync → syncToAPI →
|
|
280
|
+
* sendSessionEndMetrics → updateStatus → renameFiles
|
|
281
|
+
*/
|
|
282
|
+
async onSessionEnd(exitCode, env) {
|
|
283
|
+
const sessionId = env.CODEMIE_SESSION_ID;
|
|
284
|
+
if (!sessionId) {
|
|
285
|
+
logger.debug('[codex] No CODEMIE_SESSION_ID in environment, skipping session end processing');
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
// Stop the in-process incremental sync timer first so it doesn't race
|
|
289
|
+
// the final flush below.
|
|
290
|
+
stopCodexIncrementalSync(sessionId);
|
|
291
|
+
// 1. Process rollout file → MetricDelta JSONL (must run before SessionEnd sync)
|
|
292
|
+
try {
|
|
293
|
+
logger.info(`[codex] Processing session metrics (code=${exitCode})`);
|
|
294
|
+
const adapter = new CodexSessionAdapter(CodexPluginMetadata);
|
|
295
|
+
const sessions = await adapter.discoverSessions({ maxAgeDays: 1, limit: 20 });
|
|
296
|
+
const startedAt = env.CODEMIE_CODEX_STARTED_AT
|
|
297
|
+
? Number(env.CODEMIE_CODEX_STARTED_AT)
|
|
298
|
+
: Date.now() - 5 * 60 * 1000;
|
|
299
|
+
const currentCwd = process.cwd();
|
|
300
|
+
const cwdReal = await safeRealpath(currentCwd);
|
|
301
|
+
const recentSessions = [];
|
|
302
|
+
for (const session of sessions) {
|
|
303
|
+
if (session.createdAt < startedAt - 10_000) {
|
|
304
|
+
continue;
|
|
305
|
+
}
|
|
306
|
+
try {
|
|
307
|
+
const parsed = await adapter.parseSessionFile(session.filePath, sessionId);
|
|
308
|
+
const projectPath = parsed.metadata?.projectPath;
|
|
309
|
+
if (!projectPath)
|
|
310
|
+
continue;
|
|
311
|
+
const projectReal = await safeRealpath(projectPath);
|
|
312
|
+
if (projectReal === cwdReal) {
|
|
313
|
+
recentSessions.push(session);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
logger.debug('[codex] Skipping unparsable rollout candidate:', error);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
if (recentSessions.length === 0) {
|
|
321
|
+
logger.warn('[codex] No rollout file matched the current run, skipping metrics');
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
const latestSession = recentSessions[0];
|
|
325
|
+
logger.debug(`[codex] Processing latest rollout: ${latestSession.sessionId}`);
|
|
326
|
+
const context = {
|
|
327
|
+
sessionId,
|
|
328
|
+
apiBaseUrl: env.CODEMIE_BASE_URL || '',
|
|
329
|
+
cookies: '',
|
|
330
|
+
clientType: 'codemie-codex',
|
|
331
|
+
version: env.CODEMIE_CLI_VERSION || '1.0.0',
|
|
332
|
+
dryRun: false,
|
|
333
|
+
};
|
|
334
|
+
const result = await adapter.processSession(latestSession.filePath, sessionId, context);
|
|
335
|
+
if (result.success) {
|
|
336
|
+
logger.info(`[codex] Metrics written to JSONL: ${result.totalRecords} records`);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
logger.warn(`[codex] Metrics processing had failures: ${result.failedProcessors.join(', ')}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
345
|
+
logger.error(`[codex] Rollout processing failed (non-blocking): ${msg}`);
|
|
346
|
+
}
|
|
347
|
+
// 2. Route through CLI-level SessionEnd pipeline
|
|
348
|
+
try {
|
|
349
|
+
const { processEvent } = await import('../../../cli/commands/hook.js');
|
|
350
|
+
const event = {
|
|
351
|
+
hook_event_name: 'SessionEnd',
|
|
352
|
+
session_id: sessionId,
|
|
353
|
+
transcript_path: '',
|
|
354
|
+
permission_mode: 'default',
|
|
355
|
+
cwd: process.cwd(),
|
|
356
|
+
reason: exitCode === 0 ? 'exit' : `exit(${exitCode})`,
|
|
357
|
+
};
|
|
358
|
+
await processEvent(event, buildHookConfig(env, sessionId));
|
|
359
|
+
logger.info(`[codex] SessionEnd hook completed for session ${sessionId}`);
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
363
|
+
logger.error(`[codex] SessionEnd hook failed (non-blocking): ${msg}`);
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
};
|
|
368
|
+
function getExplicitModelArg(args) {
|
|
369
|
+
for (let i = 0; i < args.length; i++) {
|
|
370
|
+
const arg = args[i];
|
|
371
|
+
if (arg === '-m' || arg === '--model') {
|
|
372
|
+
return args[i + 1];
|
|
373
|
+
}
|
|
374
|
+
if (arg.startsWith('--model=')) {
|
|
375
|
+
return arg.slice('--model='.length);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Resolve a path through symlinks, falling back to the original path on error.
|
|
382
|
+
* Used so a `cwd` of `/Users/foo` and a rollout's `projectPath` of
|
|
383
|
+
* `/private/Users/foo` (or vice versa) compare equal.
|
|
384
|
+
*/
|
|
385
|
+
async function safeRealpath(p) {
|
|
386
|
+
try {
|
|
387
|
+
return await fsRealpath(p);
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
return p;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Codex agent plugin
|
|
395
|
+
*
|
|
396
|
+
* Phase 1: Core plugin with CLI wrapping and session tracking.
|
|
397
|
+
* Phase 2: Rollout file analytics — discovery, parsing, MetricDelta writing.
|
|
398
|
+
*/
|
|
399
|
+
export class CodexPlugin extends BaseAgentAdapter {
|
|
400
|
+
sessionAdapter;
|
|
401
|
+
constructor() {
|
|
402
|
+
super(CodexPluginMetadata);
|
|
403
|
+
this.sessionAdapter = new CodexSessionAdapter(CodexPluginMetadata);
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Check whether the `codex` binary is available on PATH.
|
|
407
|
+
* Respects CODEMIE_CODEX_BIN environment variable override.
|
|
408
|
+
*/
|
|
409
|
+
async isInstalled() {
|
|
410
|
+
const cliCommand = this.metadata.cliCommand;
|
|
411
|
+
if (!cliCommand)
|
|
412
|
+
return false;
|
|
413
|
+
const installed = await commandExists(cliCommand);
|
|
414
|
+
if (!installed) {
|
|
415
|
+
logger.debug('[codex-plugin] Codex not installed. Install with:');
|
|
416
|
+
logger.debug('[codex-plugin] codemie install codex');
|
|
417
|
+
logger.debug('[codex-plugin] Or directly: npm i -g @openai/codex');
|
|
418
|
+
}
|
|
419
|
+
return installed;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Get Codex version (override from BaseAgentAdapter).
|
|
423
|
+
* Codex versions can be emitted as plain semver or with a command prefix,
|
|
424
|
+
* for example: '0.129.0', 'codex 0.129.0', or 'codex-cli 0.129.0'.
|
|
425
|
+
* Base compatibility checks require just the semantic version.
|
|
426
|
+
*
|
|
427
|
+
* @returns Version string or null if not installed
|
|
428
|
+
*/
|
|
429
|
+
async getVersion() {
|
|
430
|
+
if (!this.metadata.cliCommand) {
|
|
431
|
+
return null;
|
|
432
|
+
}
|
|
433
|
+
try {
|
|
434
|
+
const result = await exec(this.metadata.cliCommand, ['--version']);
|
|
435
|
+
const output = result.stdout.trim();
|
|
436
|
+
const versionMatch = output.match(/(\d+\.\d+\.\d+)/);
|
|
437
|
+
return versionMatch ? versionMatch[1] : output;
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
async setupProxy(env) {
|
|
444
|
+
if (env.CODEMIE_PROVIDER === 'litellm') {
|
|
445
|
+
if (!isCodexCompatibleModelName(env.CODEMIE_MODEL)) {
|
|
446
|
+
throw new ConfigurationError(`Model "${env.CODEMIE_MODEL ?? 'unknown'}" is not compatible with codemie-codex. ` +
|
|
447
|
+
'Use a GPT/Codex model for LiteLLM.');
|
|
448
|
+
}
|
|
449
|
+
env.CODEMIE_CODEX_AVAILABLE_MODELS = env.CODEMIE_MODEL;
|
|
450
|
+
await super.setupProxy(env);
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
const resolution = await resolveCodexModel(env);
|
|
454
|
+
env.CODEMIE_MODEL = resolution.selectedModel;
|
|
455
|
+
env.CODEMIE_CODEX_AVAILABLE_MODELS = resolution.availableModels.join(',');
|
|
456
|
+
if (resolution.catalogPath) {
|
|
457
|
+
env.CODEMIE_CODEX_MODEL_CATALOG_JSON = resolution.catalogPath;
|
|
458
|
+
}
|
|
459
|
+
await super.setupProxy(env);
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Return session adapter for rollout analytics.
|
|
463
|
+
*/
|
|
464
|
+
getSessionAdapter() {
|
|
465
|
+
return this.sessionAdapter;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* No extension installer — Codex is installed directly via npm.
|
|
469
|
+
*/
|
|
470
|
+
getExtensionInstaller() {
|
|
471
|
+
return undefined;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
//# sourceMappingURL=codex.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.plugin.js","sourceRoot":"","sources":["../../../../src/agents/plugins/codex/codex.plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { HookProcessingConfig } from '../../../cli/commands/hook.js';
|
|
2
|
+
export interface ReconciliationOptions {
|
|
3
|
+
/** Sessions inactive for longer than this are considered stale. */
|
|
4
|
+
inactivityThresholdMs?: number;
|
|
5
|
+
/** Sessions started before (now - this) are skipped. */
|
|
6
|
+
maxLookbackMs?: number;
|
|
7
|
+
/** Override clock for tests. */
|
|
8
|
+
now?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ReconcileOptions extends ReconciliationOptions {
|
|
11
|
+
/** Injected for tests. Defaults to the real `processEvent` from the hook module. */
|
|
12
|
+
processEvent?: ProcessEventFn;
|
|
13
|
+
}
|
|
14
|
+
export interface StaleCodexSession {
|
|
15
|
+
sessionId: string;
|
|
16
|
+
startTime: number;
|
|
17
|
+
lastActivityMs: number;
|
|
18
|
+
}
|
|
19
|
+
interface SessionEndEventLike {
|
|
20
|
+
hook_event_name: 'SessionEnd';
|
|
21
|
+
session_id: string;
|
|
22
|
+
transcript_path: string;
|
|
23
|
+
permission_mode: string;
|
|
24
|
+
cwd: string;
|
|
25
|
+
reason: string;
|
|
26
|
+
}
|
|
27
|
+
type ProcessEventFn = (event: SessionEndEventLike, config: HookProcessingConfig) => Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Find codex sessions in `~/.codemie/sessions/` that look stranded.
|
|
30
|
+
*/
|
|
31
|
+
export declare function findStaleCodexSessions(opts?: ReconciliationOptions): Promise<StaleCodexSession[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Synthesise a SessionEnd for each stale codex session.
|
|
34
|
+
*
|
|
35
|
+
* `processEvent` is injected so tests can drive this without touching the
|
|
36
|
+
* hook module's network and SSO-credential code paths.
|
|
37
|
+
*/
|
|
38
|
+
export declare function reconcileStaleCodexSessions(env: NodeJS.ProcessEnv, buildHookConfig: (env: NodeJS.ProcessEnv, sessionId: string) => HookProcessingConfig, opts?: ReconcileOptions): Promise<{
|
|
39
|
+
reconciled: number;
|
|
40
|
+
failed: number;
|
|
41
|
+
}>;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=codex.reconciliation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.reconciliation.d.ts","sourceRoot":"","sources":["../../../../src/agents/plugins/codex/codex.reconciliation.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAQ1E,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,oFAAoF;IACpF,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,mBAAmB;IAC3B,eAAe,EAAE,YAAY,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElG;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAqD9B;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,KAAK,oBAAoB,EACpF,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAkCjD"}
|