@lore-co/cli 0.1.22 → 0.1.23
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 +10 -2
- package/dist/agents.d.ts +16 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +80 -0
- package/dist/agents.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +38 -4
- package/dist/cli.js.map +1 -1
- package/dist/devin-client.d.ts +2 -2
- package/dist/generated-assets.d.ts +4 -4
- package/dist/generated-assets.js +4 -4
- package/dist/handoff.d.ts.map +1 -1
- package/dist/handoff.js +12 -25
- package/dist/handoff.js.map +1 -1
- package/dist/pty.d.ts.map +1 -1
- package/dist/pty.js +46 -6
- package/dist/pty.js.map +1 -1
- package/dist/recovery-opencode.d.ts +3 -0
- package/dist/recovery-opencode.d.ts.map +1 -0
- package/dist/recovery-opencode.js +72 -0
- package/dist/recovery-opencode.js.map +1 -0
- package/dist/recovery-state.d.ts +77 -0
- package/dist/recovery-state.d.ts.map +1 -0
- package/dist/recovery-state.js +262 -0
- package/dist/recovery-state.js.map +1 -0
- package/dist/recovery.d.ts +21 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +560 -0
- package/dist/recovery.js.map +1 -0
- package/dist/self-host.d.ts +1 -1
- package/dist/self-host.js +2 -2
- package/dist/update.js +3 -3
- package/package.json +3 -3
package/dist/generated-assets.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Generated by scripts/generate-cli-assets.mjs. Do not edit directly.
|
|
2
2
|
export const GITHUB_TEMPLATE_ASSETS = {
|
|
3
|
-
"lore-codex-review.yml": "name: Lore Codex review\nrun-name: \"Lore Codex review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:codex-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.1.
|
|
4
|
-
"lore-devin-review.yml": "name: Lore Devin review\nrun-name: \"Lore Devin review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\nconcurrency:\n group: lore-devin-review-${{ github.repository }}-${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:devin-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.1.
|
|
5
|
-
"lore-observe-correction.yml": "name: Lore review correction\nrun-name: \"Lore review correction comment #${{ github.event.comment.id }}\"\n\non:\n issue_comment:\n types: [created]\n\njobs:\n observe:\n if: >-\n github.event.issue.pull_request &&\n startsWith(github.event.comment.body, '/lore correct ')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n issues: read\n pull-requests: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.1.
|
|
3
|
+
"lore-codex-review.yml": "name: Lore Codex review\nrun-name: \"Lore Codex review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:codex-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.1.23' }}\n outputs:\n final-message: ${{ steps.codex.outputs.final-message }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider codex\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/codex-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/codex-metadata.json\"\n --schema-out \"$GITHUB_WORKSPACE/.lore/review-output.schema.json\"\n\n - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2\n with:\n name: lore-codex-metadata\n path: .lore/codex-metadata.json\n retention-days: 1\n\n - name: Run Codex\n id: codex\n uses: openai/codex-action@52fe01ec70a42f454c9d2ebd47598f9fd6893d56 # v1.11\n with:\n openai-api-key: ${{ secrets.OPENAI_API_KEY }}\n prompt-file: .lore/codex-prompt.md\n output-schema-file: .lore/review-output.schema.json\n working-directory: review\n permission-profile: \":read-only\"\n safety-strategy: drop-sudo\n\n post:\n needs: review\n if: needs.review.outputs.final-message != ''\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.1.23' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0\n with:\n name: lore-codex-metadata\n path: .lore\n\n - name: Save review output\n env:\n CODEX_REVIEW: ${{ needs.review.outputs.final-message }}\n run: |\n mkdir -p .lore\n printf '%s' \"$CODEX_REVIEW\" > .lore/codex-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/codex-metadata.json\n --output .lore/codex-output.json\n",
|
|
4
|
+
"lore-devin-review.yml": "name: Lore Devin review\nrun-name: \"Lore Devin review [${{ github.event.action }}] PR #${{ github.event.pull_request.number }} @ ${{ github.event.pull_request.head.sha }}\"\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled]\n\nconcurrency:\n group: lore-devin-review-${{ github.repository }}-${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n review:\n if: >-\n !github.event.pull_request.draft &&\n github.event.pull_request.head.repo.full_name == github.repository &&\n contains(github.event.pull_request.labels.*.name, 'lore:devin-review')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.1.23' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n fetch-depth: 0\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Prepare Lore review context\n env:\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github prepare-review\n --provider devin\n --event \"$GITHUB_EVENT_PATH\"\n --checkout \"$GITHUB_WORKSPACE/review\"\n --prompt-out \"$GITHUB_WORKSPACE/.lore/devin-prompt.md\"\n --metadata-out \"$GITHUB_WORKSPACE/.lore/devin-metadata.json\"\n\n - name: Run Lore-enriched Devin review\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: >-\n lore devin run-review\n --prompt .lore/devin-prompt.md\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Post or update Lore review\n env:\n GH_TOKEN: ${{ github.token }}\n run: >-\n lore github post-review\n --metadata .lore/devin-metadata.json\n --output .lore/devin-output.json\n\n - name: Clean up Devin session\n if: always()\n continue-on-error: true\n env:\n DEVIN_API_KEY: ${{ secrets.DEVIN_API_KEY }}\n DEVIN_ORG_ID: ${{ vars.DEVIN_ORG_ID }}\n run: |\n SESSION_ID=\"$(jq -r '.sessionId // empty' .lore/devin-metadata.json 2>/dev/null || true)\"\n if [ -n \"$SESSION_ID\" ]; then\n lore devin terminate --session \"$SESSION_ID\"\n fi\n",
|
|
5
|
+
"lore-observe-correction.yml": "name: Lore review correction\nrun-name: \"Lore review correction comment #${{ github.event.comment.id }}\"\n\non:\n issue_comment:\n types: [created]\n\njobs:\n observe:\n if: >-\n github.event.issue.pull_request &&\n startsWith(github.event.comment.body, '/lore correct ')\n runs-on: ubuntu-latest\n permissions:\n contents: read\n issues: read\n pull-requests: read\n env:\n LORE_CLI_REPOSITORY: ${{ vars.LORE_CLI_REPOSITORY || 'treadiehq/lore-releases' }}\n LORE_CLI_VERSION: ${{ vars.LORE_CLI_VERSION || 'v0.1.23' }}\n steps:\n - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0\n with:\n persist-credentials: false\n path: review\n\n - name: Install Lore CLI\n run: |\n export LORE_REPO=\"$LORE_CLI_REPOSITORY\"\n export LORE_VERSION=\"$LORE_CLI_VERSION\"\n export LORE_BIN_DIR=\"$RUNNER_TEMP/lore/bin\"\n curl -fsSL \"https://github.com/$LORE_CLI_REPOSITORY/releases/download/$LORE_CLI_VERSION/install.sh\" | bash\n\n - name: Teach Lore from an authorized correction\n env:\n GH_TOKEN: ${{ github.token }}\n LORE_API_URL: ${{ vars.LORE_API_URL }}\n LORE_WORKSPACE_TOKEN: ${{ secrets.LORE_WORKSPACE_TOKEN }}\n run: >-\n lore github observe-correction\n --event \"$GITHUB_EVENT_PATH\"\n",
|
|
6
6
|
"review-output.schema.json": "{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"summary\", \"findings\"],\n \"properties\": {\n \"summary\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"findings\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\"severity\", \"title\", \"body\", \"path\", \"line\"],\n \"properties\": {\n \"severity\": {\n \"enum\": [\"critical\", \"high\", \"medium\", \"low\"]\n },\n \"title\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"body\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"path\": {\n \"type\": [\"string\", \"null\"],\n \"minLength\": 1,\n \"pattern\": \"\\\\S\"\n },\n \"line\": {\n \"type\": [\"integer\", \"null\"],\n \"minimum\": 1\n }\n }\n }\n }\n }\n}\n"
|
|
7
7
|
};
|
|
8
|
-
export const SELF_HOST_COMPOSE_ASSET = "name: lore\n\nx-api-image: &api-image \"${LORE_API_IMAGE:-ghcr.io/treadiehq/lore-api}:${LORE_IMAGE_TAG:-0.1.
|
|
8
|
+
export const SELF_HOST_COMPOSE_ASSET = "name: lore\n\nx-api-image: &api-image \"${LORE_API_IMAGE:-ghcr.io/treadiehq/lore-api}:${LORE_IMAGE_TAG:-0.1.23}\"\nx-web-image: &web-image \"${LORE_WEB_IMAGE:-ghcr.io/treadiehq/lore-web}:${LORE_IMAGE_TAG:-0.1.23}\"\n\nservices:\n postgres:\n image: pgvector/pgvector:0.8.6-pg18\n environment:\n POSTGRES_DB: lore\n POSTGRES_USER: lore\n POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-}\n volumes:\n - postgres-data:/var/lib/postgresql\n healthcheck:\n test:\n [\n \"CMD-SHELL\",\n 'pg_isready -h 127.0.0.1 -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\"',\n ]\n interval: 5s\n timeout: 5s\n retries: 10\n start_period: 10s\n restart: unless-stopped\n\n api:\n image: *api-image\n environment:\n NODE_ENV: production\n DATABASE_URL: \"postgresql://lore:${POSTGRES_PASSWORD:-}@postgres:5432/lore\"\n API_HOST: 0.0.0.0\n API_PORT: 3001\n API_JSON_BODY_LIMIT: ${API_JSON_BODY_LIMIT:-1mb}\n API_RATE_LIMIT_PER_MINUTE: ${API_RATE_LIMIT_PER_MINUTE:-120}\n RATE_LIMIT_KEY_SECRET: ${RATE_LIMIT_KEY_SECRET:-}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_ORIGIN: ${NUXT_ORIGIN:-}\n LORE_SERVER_VERSION: ${LORE_IMAGE_TAG:-0.1.23}\n LORE_SERVER_REVISION: ${LORE_SERVER_REVISION:-}\n LORE_WORKSPACE_TOKEN: ${LORE_WORKSPACE_TOKEN:-}\n LORE_WORKSPACE_ORGANIZATION: ${LORE_WORKSPACE_ORGANIZATION:-}\n LORE_WORKSPACE_NAME: ${LORE_WORKSPACE_NAME:-}\n AUTH_MODE: ${AUTH_MODE:-magic_link}\n AUTH_EMAIL_MODE: ${AUTH_EMAIL_MODE:-resend}\n AUTH_WEB_ORIGIN: ${AUTH_WEB_ORIGIN:-}\n AUTH_OWNER_EMAIL: ${AUTH_OWNER_EMAIL:-}\n AUTH_EMAIL_FROM: ${AUTH_EMAIL_FROM:-}\n RESEND_API_KEY: ${RESEND_API_KEY:-}\n AUTH_MAGIC_LINK_TTL_MINUTES: ${AUTH_MAGIC_LINK_TTL_MINUTES:-15}\n AUTH_SESSION_TTL_DAYS: ${AUTH_SESSION_TTL_DAYS:-30}\n DEVIN_POLLING_ENABLED: ${DEVIN_POLLING_ENABLED:-false}\n DEVIN_API_KEY: ${DEVIN_API_KEY:-}\n DEVIN_ORG_ID: ${DEVIN_ORG_ID:-}\n DEVIN_REPOSITORY_ALLOWLIST: ${DEVIN_REPOSITORY_ALLOWLIST:-}\n DEVIN_POLL_INTERVAL_MS: ${DEVIN_POLL_INTERVAL_MS:-15000}\n DEVIN_REQUEST_TIMEOUT_MS: ${DEVIN_REQUEST_TIMEOUT_MS:-10000}\n DEVIN_POLL_BATCH_SIZE: ${DEVIN_POLL_BATCH_SIZE:-25}\n EXTRACTOR_PROVIDER: ${EXTRACTOR_PROVIDER:-heuristic}\n EXTRACTOR_MIN_CONFIDENCE: ${EXTRACTOR_MIN_CONFIDENCE:-0.8}\n EXTRACTOR_MODEL: ${EXTRACTOR_MODEL:-}\n EXTRACTOR_BASE_URL: ${EXTRACTOR_BASE_URL:-}\n EXTRACTOR_API_KEY: ${EXTRACTOR_API_KEY:-}\n RETRIEVAL_MODE: ${RETRIEVAL_MODE:-auto}\n EMBEDDING_MODEL: ${EMBEDDING_MODEL:-text-embedding-3-small}\n EMBEDDING_BASE_URL: ${EMBEDDING_BASE_URL:-https://api.openai.com/v1}\n EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-}\n EMBEDDING_DIMENSIONS: ${EMBEDDING_DIMENSIONS:-1536}\n EMBEDDING_TIMEOUT_MS: ${EMBEDDING_TIMEOUT_MS:-5000}\n EMBEDDING_SPACE_ID: ${EMBEDDING_SPACE_ID:-}\n EMBEDDING_RECONCILE_INTERVAL_MS: ${EMBEDDING_RECONCILE_INTERVAL_MS:-60000}\n EMBEDDING_RECONCILE_BATCH_SIZE: ${EMBEDDING_RECONCILE_BATCH_SIZE:-500}\n EMBEDDING_RECONCILE_PAGE_SIZE: ${EMBEDDING_RECONCILE_PAGE_SIZE:-100}\n CAPTURE_WORKER_POLL_INTERVAL_MS: ${CAPTURE_WORKER_POLL_INTERVAL_MS:-500}\n CAPTURE_WORKER_CONCURRENCY: ${CAPTURE_WORKER_CONCURRENCY:-2}\n CAPTURE_WORKER_LEASE_MS: ${CAPTURE_WORKER_LEASE_MS:-60000}\n CAPTURE_INLINE_TIMEOUT_MS: ${CAPTURE_INLINE_TIMEOUT_MS:-45000}\n SEMANTIC_MIN_SIMILARITY: ${SEMANTIC_MIN_SIMILARITY:-0.4}\n CONTEXT_MAX_ITEMS: ${CONTEXT_MAX_ITEMS:-10}\n CONTEXT_MAX_CHARACTERS: ${CONTEXT_MAX_CHARACTERS:-12000}\n CONTEXT_MAX_ESTIMATED_TOKENS: ${CONTEXT_MAX_ESTIMATED_TOKENS:-4000}\n ports:\n - \"${API_BIND_ADDRESS:-127.0.0.1}:${API_PORT:-3001}:3001\"\n depends_on:\n postgres:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3001/health/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 5s\n timeout: 5s\n retries: 12\n start_period: 10s\n restart: unless-stopped\n\n web:\n image: *web-image\n environment:\n HOST: 0.0.0.0\n PORT: 3000\n NITRO_HOST: 0.0.0.0\n NITRO_PORT: 3000\n NUXT_LORE_API_URL: http://api:3001\n NUXT_AUTH_COOKIE_NAME: ${NUXT_AUTH_COOKIE_NAME:-lore_session}\n NUXT_AUTH_COOKIE_SECURE: ${NUXT_AUTH_COOKIE_SECURE:-true}\n TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-10.0.0.0/8,172.16.0.0/12}\n NUXT_PUBLIC_API_BASE_URL: /api/lore\n NUXT_PUBLIC_LORE_CONNECTOR_API_URL: ${NUXT_PUBLIC_LORE_CONNECTOR_API_URL:-http://localhost:3001}\n NUXT_PUBLIC_LORE_INSTALL_URL: ${NUXT_PUBLIC_LORE_INSTALL_URL:-https://uselore.co/install.sh}\n ports:\n - \"${NUXT_BIND_ADDRESS:-127.0.0.1}:${NUXT_PORT:-3000}:3000\"\n depends_on:\n api:\n condition: service_healthy\n healthcheck:\n test:\n [\n \"CMD\",\n \"node\",\n \"-e\",\n \"fetch('http://127.0.0.1:3000/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))\",\n ]\n interval: 10s\n timeout: 5s\n retries: 12\n start_period: 15s\n restart: unless-stopped\n\nvolumes:\n postgres-data:\n";
|
|
9
9
|
//# sourceMappingURL=generated-assets.js.map
|
package/dist/handoff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AA4Q3D,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
package/dist/handoff.js
CHANGED
|
@@ -5,6 +5,8 @@ import { loreApiRequest } from "./api.js";
|
|
|
5
5
|
import { ensureMachineRegistered } from "./machine.js";
|
|
6
6
|
import { repositoryScopeFromGitRoot } from "./repository.js";
|
|
7
7
|
import { hostLiveRuntime } from "./live.js";
|
|
8
|
+
import { recoveryFallback } from "./recovery.js";
|
|
9
|
+
import { findAgentExecutable, isLaunchable, launchArguments } from "./agents.js";
|
|
8
10
|
const execFile = promisify(execFileCallback);
|
|
9
11
|
const RESUME_HELP = `lore resume
|
|
10
12
|
Continue previous work with saved Lore context. Same work, new execution.
|
|
@@ -13,7 +15,7 @@ Usage:
|
|
|
13
15
|
lore resume [options]
|
|
14
16
|
|
|
15
17
|
Options:
|
|
16
|
-
--on <agent>
|
|
18
|
+
--on <agent> claude, codex, opencode, devin, cursor, copilot-cli, polytoken
|
|
17
19
|
(default: the tool that ran the previous session)
|
|
18
20
|
--session <uuid> Resume a specific work session (default: latest for repo)
|
|
19
21
|
--repo <repo> Repository to resume work in (default: detected from cwd)
|
|
@@ -35,7 +37,8 @@ Usage:
|
|
|
35
37
|
lore continue --on <agent> [options]
|
|
36
38
|
|
|
37
39
|
Options:
|
|
38
|
-
--on <agent>
|
|
40
|
+
--on <agent> claude, codex, opencode, devin, cursor, copilot-cli, polytoken
|
|
41
|
+
(default: saved fallback from connect --fallback)
|
|
39
42
|
--session <uuid> Continue a specific work session (default: latest for repo)
|
|
40
43
|
--repo <repo> Repository the work belongs to (default: detected from cwd)
|
|
41
44
|
--project <name> Project the work belongs to
|
|
@@ -48,25 +51,6 @@ Examples:
|
|
|
48
51
|
lore continue --on codex
|
|
49
52
|
lore continue --on opencode --repo acme/billing
|
|
50
53
|
`;
|
|
51
|
-
/** Tools `lore resume` / `lore continue` can launch interactively. */
|
|
52
|
-
const LAUNCHABLE_AGENTS = ["claude", "codex", "opencode"];
|
|
53
|
-
function isLaunchable(value) {
|
|
54
|
-
return LAUNCHABLE_AGENTS.includes(value);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Interactive launch argv for each supported tool: start the tool's normal
|
|
58
|
-
* interactive surface with the handoff brief as the initial prompt.
|
|
59
|
-
*/
|
|
60
|
-
function launchArgv(agent, brief) {
|
|
61
|
-
switch (agent) {
|
|
62
|
-
case "claude":
|
|
63
|
-
return ["claude", brief];
|
|
64
|
-
case "codex":
|
|
65
|
-
return ["codex", brief];
|
|
66
|
-
case "opencode":
|
|
67
|
-
return ["opencode", "--prompt", brief];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
54
|
function parseHandoffArguments(args, help) {
|
|
71
55
|
const parsed = { live: false, print: false, json: false };
|
|
72
56
|
for (let index = 0; index < args.length; index += 1) {
|
|
@@ -142,10 +126,8 @@ async function fetchHandoff(config, parsed, targetAgent) {
|
|
|
142
126
|
});
|
|
143
127
|
}
|
|
144
128
|
async function launchAgent(agent, handoff, config, paths, live) {
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
throw new Error(`No launch command for ${agent}`);
|
|
148
|
-
}
|
|
129
|
+
const command = await findAgentExecutable(agent);
|
|
130
|
+
const commandArgs = launchArguments(agent, handoff.brief);
|
|
149
131
|
const env = {
|
|
150
132
|
...process.env,
|
|
151
133
|
LORE_PARENT_SESSION_ID: handoff.parentSessionId,
|
|
@@ -191,6 +173,11 @@ async function runHandoffCommand(args, config, paths, mode) {
|
|
|
191
173
|
if (config === null) {
|
|
192
174
|
throw new Error("Lore is not connected. Run: lore connect --token <workspace-token>");
|
|
193
175
|
}
|
|
176
|
+
if (mode === "continue" && parsed.on === undefined) {
|
|
177
|
+
const fallback = await recoveryFallback(paths.home);
|
|
178
|
+
if (fallback)
|
|
179
|
+
parsed.on = fallback;
|
|
180
|
+
}
|
|
194
181
|
if (mode === "continue" && parsed.on === undefined) {
|
|
195
182
|
throw new Error("lore continue requires a target. Try: lore continue --on codex");
|
|
196
183
|
}
|
package/dist/handoff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"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"}
|
package/dist/pty.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../src/pty.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../src/pty.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAChD,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAqKD;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,CAyCrB"}
|
package/dist/pty.js
CHANGED
|
@@ -22,11 +22,21 @@ async function loadNodePty() {
|
|
|
22
22
|
* ships with macOS developer tooling and virtually every Linux distro, and
|
|
23
23
|
* unlike BSD `script(1)` it does not require its own stdio to be a terminal.
|
|
24
24
|
*/
|
|
25
|
-
const PYTHON_PTY_SHIM = `import os, pty, select, sys, struct, fcntl, termios
|
|
25
|
+
const PYTHON_PTY_SHIM = `import os, pty, select, sys, struct, fcntl, termios, signal
|
|
26
26
|
cmd = sys.argv[1:]
|
|
27
27
|
pid, fd = pty.fork()
|
|
28
28
|
if pid == 0:
|
|
29
|
+
os.close(3)
|
|
29
30
|
os.execvp(cmd[0], cmd)
|
|
31
|
+
os.write(3, str(pid).encode() + b'\\n')
|
|
32
|
+
os.close(3)
|
|
33
|
+
def forward(sig, frame):
|
|
34
|
+
try:
|
|
35
|
+
os.killpg(pid, sig)
|
|
36
|
+
except ProcessLookupError:
|
|
37
|
+
pass
|
|
38
|
+
for sig in (signal.SIGTERM, signal.SIGHUP, signal.SIGINT):
|
|
39
|
+
signal.signal(sig, forward)
|
|
30
40
|
cols = int(os.environ.get('LORE_PTY_COLS', '80'))
|
|
31
41
|
rows = int(os.environ.get('LORE_PTY_ROWS', '24'))
|
|
32
42
|
fcntl.ioctl(fd, termios.TIOCSWINSZ, struct.pack('HHHH', rows, cols, 0, 0))
|
|
@@ -66,9 +76,30 @@ function pythonFallback(command, args, options) {
|
|
|
66
76
|
LORE_PTY_COLS: String(options.cols ?? 80),
|
|
67
77
|
LORE_PTY_ROWS: String(options.rows ?? 24),
|
|
68
78
|
},
|
|
69
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
79
|
+
stdio: ["pipe", "pipe", "pipe", "pipe"],
|
|
70
80
|
});
|
|
71
81
|
const dataCallbacks = [];
|
|
82
|
+
let agentPid;
|
|
83
|
+
const control = child.stdio[3];
|
|
84
|
+
let pidBuffer = "";
|
|
85
|
+
control?.on("data", (chunk) => {
|
|
86
|
+
pidBuffer += chunk.toString("utf8");
|
|
87
|
+
if (/^\d+\n$/u.test(pidBuffer))
|
|
88
|
+
agentPid = Number(pidBuffer.trim());
|
|
89
|
+
});
|
|
90
|
+
const exitCallbacks = [];
|
|
91
|
+
let exited = false;
|
|
92
|
+
let exitCode = null;
|
|
93
|
+
const emitExit = (code) => {
|
|
94
|
+
if (exited)
|
|
95
|
+
return;
|
|
96
|
+
exited = true;
|
|
97
|
+
exitCode = code;
|
|
98
|
+
for (const callback of exitCallbacks)
|
|
99
|
+
callback(code);
|
|
100
|
+
};
|
|
101
|
+
child.once("exit", emitExit);
|
|
102
|
+
child.once("error", () => emitExit(127));
|
|
72
103
|
const emit = (chunk) => {
|
|
73
104
|
for (const callback of dataCallbacks) {
|
|
74
105
|
callback(chunk);
|
|
@@ -89,12 +120,21 @@ function pythonFallback(command, args, options) {
|
|
|
89
120
|
dataCallbacks.push(callback);
|
|
90
121
|
},
|
|
91
122
|
onExit(callback) {
|
|
92
|
-
|
|
93
|
-
callback(
|
|
94
|
-
|
|
123
|
+
if (exited)
|
|
124
|
+
queueMicrotask(() => callback(exitCode));
|
|
125
|
+
else
|
|
126
|
+
exitCallbacks.push(callback);
|
|
95
127
|
},
|
|
96
128
|
kill(signal) {
|
|
97
|
-
|
|
129
|
+
if (agentPid !== undefined) {
|
|
130
|
+
try {
|
|
131
|
+
process.kill(-agentPid, signal ?? "SIGTERM");
|
|
132
|
+
}
|
|
133
|
+
catch { /* already exited */ }
|
|
134
|
+
}
|
|
135
|
+
// Let the shim reap its child; killing only the shim would orphan Claude.
|
|
136
|
+
if (signal !== "SIGKILL" || agentPid === undefined)
|
|
137
|
+
child.kill(signal ?? "SIGTERM");
|
|
98
138
|
},
|
|
99
139
|
};
|
|
100
140
|
}
|
package/dist/pty.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../src/pty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAyC9D;;;;GAIG;AACH,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,QAAQ,CAChC,WAAW,EACX,0BAA0B,CACgB,CAAC;QAC7C,MAAM,MAAM,GAAG,CAAC,MAAM,aAAa,CAAC,UAAU,CAAC,CAA2B,CAAC;QAC3E,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU;YACvC,CAAC,CAAE,MAAwB;YAC3B,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../src/pty.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-opencode.d.ts","sourceRoot":"","sources":["../src/recovery-opencode.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqEhG"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** A self-contained plugin also works with Lore's standalone executable. */
|
|
2
|
+
export function openCodeRecoveryPluginSource(invocation, home) {
|
|
3
|
+
return `// Managed by Lore recovery. Installed locally; no Lore server required.
|
|
4
|
+
import { spawn } from "node:child_process";
|
|
5
|
+
const invocation = ${JSON.stringify(invocation)};
|
|
6
|
+
const home = ${JSON.stringify(home)};
|
|
7
|
+
export default async function LoreRecovery({ client, directory }) {
|
|
8
|
+
if (!process.env.LORE_RECOVERY_RUN_ID || process.env.LORE_RECOVERY_SOURCE !== "opencode") return {};
|
|
9
|
+
let sessionID;
|
|
10
|
+
let queue = Promise.resolve();
|
|
11
|
+
const serial = (work) => { queue = queue.then(work).catch(() => {}); return queue; };
|
|
12
|
+
const text = (parts) => (parts || []).flatMap(p => {
|
|
13
|
+
if (p.type === "text" && !p.synthetic && typeof p.text === "string") return [p.text];
|
|
14
|
+
if (p.type === "tool" && p.state?.status === "completed" && typeof p.state.output === "string") return ["Tool result: " + p.state.output];
|
|
15
|
+
return [];
|
|
16
|
+
}).join("\\n").slice(0, 12000);
|
|
17
|
+
const send = (data) => new Promise(resolve => {
|
|
18
|
+
const env = { ...process.env, LORE_HOME: home };
|
|
19
|
+
delete env.BUN_OPTIONS; delete env.BUN_BE_BUN;
|
|
20
|
+
const child = spawn(invocation[0], [...invocation.slice(1), "recovery-hook", "--agent", "opencode"], {
|
|
21
|
+
env, stdio: ["pipe", "ignore", "ignore"]
|
|
22
|
+
});
|
|
23
|
+
const timeout = setTimeout(() => { child.kill(); resolve(); }, 8000);
|
|
24
|
+
child.once("error", () => { clearTimeout(timeout); resolve(); });
|
|
25
|
+
child.once("exit", () => { clearTimeout(timeout); resolve(); });
|
|
26
|
+
child.stdin.on("error", () => {});
|
|
27
|
+
child.stdin.end(JSON.stringify({ session_id: sessionID, cwd: directory, ...data }));
|
|
28
|
+
});
|
|
29
|
+
const history = async () => {
|
|
30
|
+
const response = await client.session.messages({ path: { id: sessionID }, query: { directory, limit: 20 }, signal: AbortSignal.timeout(3000) });
|
|
31
|
+
const records = (response.data || []).filter(m => m.info?.sessionID === sessionID);
|
|
32
|
+
const messages = records.filter(m => ["user", "assistant"].includes(m.info.role) && !m.info.error)
|
|
33
|
+
.map(m => ({ role: m.info.role, text: text(m.parts) })).filter(m => m.text).slice(-20);
|
|
34
|
+
const latest = records.at(-1)?.info;
|
|
35
|
+
return { messages, completed: latest?.role === "assistant" && !latest.error && !!latest.time?.completed };
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
"chat.message": (input, output) => serial(async () => {
|
|
39
|
+
if (sessionID && input.sessionID !== sessionID) return;
|
|
40
|
+
if (!sessionID) {
|
|
41
|
+
const response = await client.session.get({ path: { id: input.sessionID }, query: { directory }, signal: AbortSignal.timeout(3000) });
|
|
42
|
+
if (!response.data || response.data.id !== input.sessionID || response.data.parentID) return;
|
|
43
|
+
sessionID = input.sessionID;
|
|
44
|
+
}
|
|
45
|
+
const prompt = text(output.parts);
|
|
46
|
+
if (prompt) await send({ hook_event_name: "UserPromptSubmit", prompt });
|
|
47
|
+
}),
|
|
48
|
+
event: ({ event }) => serial(async () => {
|
|
49
|
+
const properties = event.properties || {};
|
|
50
|
+
const part = properties.part;
|
|
51
|
+
const id = properties.sessionID || part?.sessionID;
|
|
52
|
+
if (!sessionID || id !== sessionID) return;
|
|
53
|
+
const error = event.type === "session.error" ? properties.error :
|
|
54
|
+
event.type === "message.part.updated" && part?.type === "retry" ? part.error : undefined;
|
|
55
|
+
if (error?.name === "APIError" && error.data?.statusCode === 429) {
|
|
56
|
+
const recent = await history().catch(() => ({ messages: [] }));
|
|
57
|
+
await send({ hook_event_name: "StopFailure", error: "rate_limit", messages: recent.messages });
|
|
58
|
+
} else if (event.type === "session.status" && properties.status?.type === "retry" && Number.isInteger(properties.status.attempt) && properties.status.attempt >= 3) {
|
|
59
|
+
// Older clients omit the HTTP status while retrying. Preserve that
|
|
60
|
+
// distinction instead of guessing from the provider's message string.
|
|
61
|
+
const recent = await history().catch(() => ({ messages: [] }));
|
|
62
|
+
await send({ hook_event_name: "StopFailure", error: "provider_retry", messages: recent.messages });
|
|
63
|
+
} else if (event.type === "session.idle") {
|
|
64
|
+
const recent = await history();
|
|
65
|
+
await send({ hook_event_name: recent.completed ? "Stop" : "Checkpoint", messages: recent.messages });
|
|
66
|
+
}
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
`;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=recovery-opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-opencode.js","sourceRoot":"","sources":["../src/recovery-opencode.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,UAAU,4BAA4B,CAAC,UAA6B,EAAE,IAAY;IACtF,OAAO;;qBAEY,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;eAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgElC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ReliabilityStore } from "./reliability-store.js";
|
|
3
|
+
import { type RecoverySource, type LaunchableAgent } from "./agents.js";
|
|
4
|
+
declare const Snapshot: z.ZodObject<{
|
|
5
|
+
cwd: z.ZodString;
|
|
6
|
+
root: z.ZodString;
|
|
7
|
+
branch: z.ZodString;
|
|
8
|
+
head: z.ZodString;
|
|
9
|
+
status: z.ZodString;
|
|
10
|
+
diff: z.ZodString;
|
|
11
|
+
fingerprint: z.ZodString;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
export declare const RecoveryRunSchema: z.ZodObject<{
|
|
14
|
+
id: z.ZodUUID;
|
|
15
|
+
startedAt: z.ZodString;
|
|
16
|
+
updatedAt: z.ZodString;
|
|
17
|
+
cwd: z.ZodString;
|
|
18
|
+
root: z.ZodString;
|
|
19
|
+
sessionId: z.ZodNullable<z.ZodString>;
|
|
20
|
+
sourceAgent: z.ZodDefault<z.ZodEnum<{
|
|
21
|
+
claude: "claude";
|
|
22
|
+
codex: "codex";
|
|
23
|
+
opencode: "opencode";
|
|
24
|
+
devin: "devin";
|
|
25
|
+
}>>;
|
|
26
|
+
targetAgent: z.ZodDefault<z.ZodEnum<{
|
|
27
|
+
claude: "claude";
|
|
28
|
+
codex: "codex";
|
|
29
|
+
opencode: "opencode";
|
|
30
|
+
devin: "devin";
|
|
31
|
+
cursor: "cursor";
|
|
32
|
+
"copilot-cli": "copilot-cli";
|
|
33
|
+
polytoken: "polytoken";
|
|
34
|
+
}>>;
|
|
35
|
+
goal: z.ZodString;
|
|
36
|
+
messages: z.ZodArray<z.ZodObject<{
|
|
37
|
+
role: z.ZodEnum<{
|
|
38
|
+
user: "user";
|
|
39
|
+
assistant: "assistant";
|
|
40
|
+
}>;
|
|
41
|
+
text: z.ZodString;
|
|
42
|
+
}, z.core.$strip>>;
|
|
43
|
+
turn: z.ZodNumber;
|
|
44
|
+
failure: z.ZodNullable<z.ZodObject<{
|
|
45
|
+
id: z.ZodString;
|
|
46
|
+
reason: z.ZodEnum<{
|
|
47
|
+
rate_limit: "rate_limit";
|
|
48
|
+
provider_retry: "provider_retry";
|
|
49
|
+
manual: "manual";
|
|
50
|
+
}>;
|
|
51
|
+
snapshot: z.ZodObject<{
|
|
52
|
+
cwd: z.ZodString;
|
|
53
|
+
root: z.ZodString;
|
|
54
|
+
branch: z.ZodString;
|
|
55
|
+
head: z.ZodString;
|
|
56
|
+
status: z.ZodString;
|
|
57
|
+
diff: z.ZodString;
|
|
58
|
+
fingerprint: z.ZodString;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
export type RecoveryRun = z.infer<typeof RecoveryRunSchema>;
|
|
63
|
+
export type WorkspaceSnapshot = z.infer<typeof Snapshot>;
|
|
64
|
+
export declare function recoveryStore(home: string): ReliabilityStore;
|
|
65
|
+
export declare const recoveryRunKey: (id: string) => string;
|
|
66
|
+
export declare function workspaceSnapshot(cwd: string): Promise<WorkspaceSnapshot>;
|
|
67
|
+
export declare function createRecoveryRun(home: string, cwd: string, sourceAgent?: RecoverySource, targetAgent?: LaunchableAgent): Promise<RecoveryRun>;
|
|
68
|
+
/** A failure is accepted only from an active wrapper, for its exact session/worktree. */
|
|
69
|
+
export declare function captureRecoveryHook(home: string, runId: string, value: unknown, agent?: RecoverySource): Promise<void>;
|
|
70
|
+
/** Only the terminal owner's explicit shortcut requests a manual switch. */
|
|
71
|
+
export declare function requestRecoverySwitch(home: string, id: string): Promise<void>;
|
|
72
|
+
export declare function recoveryBrief(run: RecoveryRun, snapshot: WorkspaceSnapshot): string;
|
|
73
|
+
export type RecoveryMetric = "offered" | "accepted" | "declined" | "launched" | "launch_failed" | "useful" | "not_useful";
|
|
74
|
+
export declare function recordRecoveryMetric(home: string, runId: string, attempt: string, event: RecoveryMetric): Promise<void>;
|
|
75
|
+
export declare function recoveryMetrics(home: string): Promise<unknown>;
|
|
76
|
+
export {};
|
|
77
|
+
//# sourceMappingURL=recovery-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery-state.d.ts","sourceRoot":"","sources":["../src/recovery-state.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAA+C,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAIrH,QAAA,MAAM,QAAQ;;;;;;;;iBAGZ,CAAC;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAGzD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAE5D;AACD,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAAqB,CAAC;AAYlE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkB/E;AACD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,cAAyB,EAAE,WAAW,GAAE,eAAyB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBvK;AAmCD,yFAAyF;AACzF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,cAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDtI;AAED,4EAA4E;AAC5E,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWnF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAgBnF;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG,QAAQ,GAAG,YAAY,CAAC;AAK1H,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7H;AACD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYpE"}
|