@crewx/sdk 0.9.0-rc.16 → 0.9.0-rc.161
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/account/auth-client.d.ts +61 -0
- package/dist/account/auth-json-v2.d.ts +1 -0
- package/dist/account/auth-json.d.ts +30 -0
- package/dist/account/config.d.ts +37 -0
- package/dist/account/env-bootstrap.d.ts +11 -0
- package/dist/account/errors.d.ts +24 -0
- package/dist/account/index.d.ts +12 -0
- package/dist/account/index.js +2 -0
- package/dist/account/session-manager.d.ts +47 -0
- package/dist/activity-log/builder.d.ts +59 -6
- package/dist/agent/agent-list-view.d.ts +19 -0
- package/dist/app/app.d.ts +157 -0
- package/dist/app/backend-env.d.ts +3 -0
- package/dist/app/content-media-types.d.ts +2 -0
- package/dist/app/context.d.ts +2 -0
- package/dist/app/entry.d.ts +7 -0
- package/dist/app/frame.d.ts +55 -0
- package/dist/app/index.d.ts +12 -0
- package/dist/app/index.js +10 -0
- package/dist/app/protocol.d.ts +9 -0
- package/dist/app/runtime.d.ts +21 -0
- package/dist/app/schedule-contract.d.ts +59 -0
- package/dist/app/tool-mode.d.ts +3 -0
- package/dist/boxing/box.types.d.ts +4 -0
- package/dist/config/canonicalize-agent-options.d.ts +18 -0
- package/dist/config/default-agent-models.d.ts +11 -0
- package/dist/config/global-settings.d.ts +33 -0
- package/dist/config/migrate-grok-mode.d.ts +6 -0
- package/dist/config/model-compat.d.ts +31 -0
- package/dist/config/models.generated.d.ts +37 -0
- package/dist/config/models.remote.d.ts +1 -0
- package/dist/config/overdrive.d.ts +7 -0
- package/dist/config/pricing.d.ts +6 -3
- package/dist/config/pricing.generated.d.ts +4 -0
- package/dist/config/pricing.types.d.ts +4 -0
- package/dist/config/timeout.config.d.ts +4 -0
- package/dist/config/wi-boards.d.ts +19 -0
- package/dist/context-budget/continuity.d.ts +63 -0
- package/dist/context-budget/index.d.ts +142 -0
- package/dist/conversation/index.d.ts +1 -1
- package/dist/conversation/sqlite-provider.d.ts +6 -3
- package/dist/conversation/to-template-messages.d.ts +9 -0
- package/dist/conversation/types.d.ts +58 -1
- package/dist/desktop/command-runner.d.ts +4 -0
- package/dist/desktop/default-adapters.d.ts +4 -0
- package/dist/desktop/global-install.d.ts +19 -0
- package/dist/desktop/index.d.ts +3 -0
- package/dist/desktop/index.js +3 -0
- package/dist/desktop/install.d.ts +5 -0
- package/dist/desktop/lnk.d.ts +22 -0
- package/dist/desktop/manifest.d.ts +21 -0
- package/dist/desktop/types.d.ts +67 -0
- package/dist/desktop/version.d.ts +1 -0
- package/dist/desktop/windows-paths.d.ts +21 -0
- package/dist/desktop/wrapper.d.ts +18 -0
- package/dist/esm/account/index.js +2 -0
- package/dist/esm/app/index.js +10 -0
- package/dist/esm/desktop/index.js +3 -0
- package/dist/esm/index.js +1128 -226
- package/dist/esm/node/index.js +2 -0
- package/dist/esm/plugins/index.js +496 -214
- package/dist/esm/process/index.js +1 -0
- package/dist/esm/publish/index.js +2 -0
- package/dist/esm/repository/index.js +608 -211
- package/dist/esm/skills/index.js +2 -0
- package/dist/esm/testing/index.js +1 -1
- package/dist/events/types.d.ts +16 -0
- package/dist/facade/Crewx.d.ts +61 -5
- package/dist/facade/task-ticket.d.ts +14 -0
- package/dist/highlight/thread-highlight-prompt.d.ts +2 -0
- package/dist/highlight/thread-highlighter.d.ts +326 -0
- package/dist/index.browser.d.ts +21 -1
- package/dist/index.browser.js +6 -2
- package/dist/index.d.ts +137 -17
- package/dist/index.js +1128 -226
- package/dist/internal/console-decoder.d.ts +38 -0
- package/dist/internal/windows-spawn.d.ts +10 -0
- package/dist/layout/types.d.ts +18 -1
- package/dist/lifecycle/process-lease.d.ts +80 -0
- package/dist/lifecycle/process-owner.d.ts +20 -0
- package/dist/lifecycle/task-heartbeat.d.ts +41 -0
- package/dist/lifecycle/task-stop.d.ts +82 -0
- package/dist/lifecycle/update-admission.d.ts +45 -0
- package/dist/local-server/base-url.d.ts +18 -0
- package/dist/local-server/index.d.ts +8 -0
- package/dist/local-server/opencode.d.ts +8 -0
- package/dist/local-server/probe.d.ts +3 -0
- package/dist/local-server/runtime.d.ts +26 -0
- package/dist/local-server/types.d.ts +43 -0
- package/dist/mcp-app/agent-access.d.ts +26 -0
- package/dist/mcp-app/app-handoff.d.ts +109 -0
- package/dist/mcp-app/app-icon-read.d.ts +7 -0
- package/dist/mcp-app/app-schedule.d.ts +85 -0
- package/dist/mcp-app/apps-context.d.ts +32 -0
- package/dist/mcp-app/bundle-provenance.d.ts +3 -0
- package/dist/mcp-app/candidate-registration.d.ts +4 -0
- package/dist/mcp-app/card-handler.d.ts +7 -0
- package/dist/mcp-app/catalog.d.ts +7 -0
- package/dist/mcp-app/content-channel.d.ts +86 -0
- package/dist/mcp-app/content-declarations.d.ts +31 -0
- package/dist/mcp-app/dev-checks.d.ts +31 -0
- package/dist/mcp-app/diagnostic-reason.d.ts +3 -0
- package/dist/mcp-app/discovery.d.ts +164 -0
- package/dist/mcp-app/errors.d.ts +7 -0
- package/dist/mcp-app/index.d.ts +41 -0
- package/dist/mcp-app/installed-app-ref.d.ts +25 -0
- package/dist/mcp-app/model-context.d.ts +29 -0
- package/dist/mcp-app/node-app-discovery-fs.d.ts +23 -0
- package/dist/mcp-app/product-bundle-assets.d.ts +27 -0
- package/dist/mcp-app/product-bundle-loader.d.ts +53 -0
- package/dist/mcp-app/projection.d.ts +14 -0
- package/dist/mcp-app/prompt-cards.d.ts +28 -0
- package/dist/mcp-app/registry.d.ts +28 -0
- package/dist/mcp-app/skill-backend.d.ts +135 -0
- package/dist/mcp-app/state-set.d.ts +9 -0
- package/dist/mcp-app/types.d.ts +488 -0
- package/dist/mcp-app/workspace-app-assets.d.ts +42 -0
- package/dist/mcp-app/workspace-app-scan-cache.d.ts +27 -0
- package/dist/mcp-app/workspace-snapshot.d.ts +75 -0
- package/dist/migrations/0011_far_black_tarantula.sql +1 -0
- package/dist/migrations/0012_blue_turbo.sql +23 -0
- package/dist/migrations/0013_hesitant_adam_destine.sql +15 -0
- package/dist/migrations/0014_organic_mongu.sql +73 -0
- package/dist/migrations/0015_panoramic_gorilla_man.sql +71 -0
- package/dist/migrations/0016_fuzzy_hemingway.sql +14 -0
- package/dist/migrations/0017_project_stage_sdk_migration.sql +29 -0
- package/dist/migrations/0018_bored_jackal.sql +33 -0
- package/dist/migrations/0019_backfill_task_thread_ids.sql +74 -0
- package/dist/migrations/0020_useful_iron_lad.sql +55 -0
- package/dist/migrations/0021_dashing_peter_quill.sql +51 -0
- package/dist/migrations/0022_wandering_bucky.sql +1 -0
- package/dist/migrations/0023_red_payback.sql +1 -0
- package/dist/migrations/0024_storage_metadata.sql +262 -0
- package/dist/migrations/0025_task_heartbeat.sql +8 -0
- package/dist/migrations/0025_thread_app_instance_ledger.sql +2 -0
- package/dist/migrations/0026_mcp_action_source.sql +47 -0
- package/dist/migrations/0027_task_stop_scope_cleanup.sql +5 -0
- package/dist/migrations/0027_ui_instance_active_unique.sql +2 -0
- package/dist/migrations/0029_nice_rhino.sql +1 -0
- package/dist/migrations/0031_petite_arclight.sql +6 -0
- package/dist/migrations/0032_ui_instance_opened_by.sql +1 -0
- package/dist/migrations/0033_thread_creator_boundary_guard.sql +38 -0
- package/dist/migrations/0034_keen_fallen_one.sql +36 -0
- package/dist/migrations/0035_request_log_daily.sql +11 -0
- package/dist/migrations/0036_ui_definition_archive.sql +8 -0
- package/dist/migrations/0037_ui_instance_agent_open_request.sql +1 -0
- package/dist/migrations/0038_task_rating.sql +3 -0
- package/dist/migrations/0039_aspiring_purifiers.sql +9 -0
- package/dist/migrations/0040_task_provider_inputs.sql +53 -0
- package/dist/migrations/meta/0011_snapshot.json +1342 -0
- package/dist/migrations/meta/0012_snapshot.json +1494 -0
- package/dist/migrations/meta/0013_snapshot.json +1592 -0
- package/dist/migrations/meta/0014_snapshot.json +1975 -0
- package/dist/migrations/meta/0015_snapshot.json +2315 -0
- package/dist/migrations/meta/0016_snapshot.json +2419 -0
- package/dist/migrations/meta/0017_snapshot.json +2419 -0
- package/dist/migrations/meta/0018_snapshot.json +2570 -0
- package/dist/migrations/meta/0020_snapshot.json +2895 -0
- package/dist/migrations/meta/0021_snapshot.json +3031 -0
- package/dist/migrations/meta/0022_snapshot.json +3039 -0
- package/dist/migrations/meta/0023_snapshot.json +3047 -0
- package/dist/migrations/meta/0029_snapshot.json +3206 -0
- package/dist/migrations/meta/0031_snapshot.json +3251 -0
- package/dist/migrations/meta/0034_snapshot.json +3473 -0
- package/dist/migrations/meta/0035_snapshot.json +3547 -0
- package/dist/migrations/meta/0036_snapshot.json +3591 -0
- package/dist/migrations/meta/0037_snapshot.json +3598 -0
- package/dist/migrations/meta/0038_snapshot.json +3626 -0
- package/dist/migrations/meta/0039_snapshot.json +3684 -0
- package/dist/migrations/meta/0040_snapshot.json +3759 -0
- package/dist/migrations/meta/_journal.json +210 -0
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.js +2 -0
- package/dist/paths.d.ts +1 -0
- package/dist/plugin/types.d.ts +1 -0
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.js +496 -214
- package/dist/plugins/sqlite-tracing.d.ts +46 -0
- package/dist/process/index.d.ts +2 -0
- package/dist/process/index.js +1 -0
- package/dist/process/process-control.d.ts +41 -0
- package/dist/prompt/tag-names.d.ts +22 -0
- package/dist/provider/acp/connection.d.ts +6 -0
- package/dist/provider/acp/meta.d.ts +11 -0
- package/dist/provider/bridge.d.ts +7 -1
- package/dist/provider/classify-task-error.d.ts +2 -0
- package/dist/provider/cli/adapter.types.d.ts +14 -2
- package/dist/provider/cli/adapters/agent-call.util.d.ts +1 -1
- package/dist/provider/cli/adapters/cli-knob.util.d.ts +7 -0
- package/dist/provider/cli/adapters/codex-item.d.ts +1 -0
- package/dist/provider/cli/adapters/event-timestamp.util.d.ts +1 -0
- package/dist/provider/cli/adapters/grok.d.ts +2 -0
- package/dist/provider/cli/adapters/index.d.ts +5 -0
- package/dist/provider/cli/index.d.ts +3 -2
- package/dist/provider/cli/meta.d.ts +5 -0
- package/dist/provider/cli/protocol-envelope.d.ts +3 -0
- package/dist/provider/errors.d.ts +5 -1
- package/dist/provider/idle-watchdog.d.ts +19 -0
- package/dist/provider/models.d.ts +17 -12
- package/dist/provider/order.d.ts +1 -1
- package/dist/provider/parse-usage.d.ts +6 -0
- package/dist/provider/provider-selection.d.ts +8 -0
- package/dist/provider/redact-technical-message.d.ts +1 -0
- package/dist/provider/task-error.types.d.ts +17 -0
- package/dist/publish/constants.d.ts +6 -0
- package/dist/publish/errors.d.ts +7 -0
- package/dist/publish/index.d.ts +55 -0
- package/dist/publish/index.js +2 -0
- package/dist/publish/manifest.d.ts +47 -0
- package/dist/publish/marketplace-api.constants.d.ts +1 -0
- package/dist/publish/pack.d.ts +6 -0
- package/dist/publish/scan.d.ts +10 -0
- package/dist/publish/secrets.d.ts +6 -0
- package/dist/publish/upload.d.ts +19 -0
- package/dist/remote/execution-profile.d.ts +9 -0
- package/dist/remote/index.d.ts +1 -0
- package/dist/remote/types.d.ts +28 -0
- package/dist/repository/agent-send-history.repository.d.ts +23 -0
- package/dist/repository/agent-suggestion.repository.d.ts +34 -0
- package/dist/repository/base-sqlite-repository.d.ts +1 -0
- package/dist/repository/common-code.repository.d.ts +45 -0
- package/dist/repository/db.d.ts +12 -1
- package/dist/repository/index.d.ts +49 -6
- package/dist/repository/index.js +608 -211
- package/dist/repository/logs-db.d.ts +12 -0
- package/dist/repository/notification.repository.d.ts +58 -0
- package/dist/repository/project.repository.d.ts +90 -0
- package/dist/repository/request-log-mover.d.ts +70 -0
- package/dist/repository/request-log.repository.d.ts +7 -3
- package/dist/repository/storage-metadata.repository.d.ts +64 -0
- package/dist/repository/task-log-migration.d.ts +74 -0
- package/dist/repository/task-log.repository.d.ts +44 -0
- package/dist/repository/task-status.d.ts +21 -0
- package/dist/repository/task.repository.d.ts +300 -7
- package/dist/repository/thread-history.repository.d.ts +193 -0
- package/dist/repository/thread-origin-verdict.d.ts +27 -0
- package/dist/repository/thread-title.types.d.ts +29 -0
- package/dist/repository/thread.repository.d.ts +118 -7
- package/dist/repository/usage-backfill.d.ts +62 -0
- package/dist/repository/usage-from-logs.d.ts +21 -0
- package/dist/repository/workspace.repository.d.ts +3 -0
- package/dist/schema/agent-send-history.d.ts +85 -0
- package/dist/schema/agent-suggestions.d.ts +199 -0
- package/dist/schema/common-codes.d.ts +216 -0
- package/dist/schema/index.d.ts +15 -0
- package/dist/schema/notifications.d.ts +303 -0
- package/dist/schema/projects.d.ts +610 -0
- package/dist/schema/request-log-daily.d.ts +151 -0
- package/dist/schema/storage-metadata.d.ts +181 -0
- package/dist/schema/task-log-events.d.ts +119 -0
- package/dist/schema/task-provider-inputs.d.ts +100 -0
- package/dist/schema/tasks.d.ts +1058 -1
- package/dist/schema/thread-creator-unverified.d.ts +45 -0
- package/dist/schema/thread-history.d.ts +734 -0
- package/dist/schema/threads.d.ts +59 -0
- package/dist/schema/ui-action-receipts.d.ts +358 -0
- package/dist/schema/ui-definition-archive.d.ts +63 -0
- package/dist/schema/ui-instance-repins.d.ts +222 -0
- package/dist/schema/ui-instances.d.ts +324 -0
- package/dist/schema/workspaces.d.ts +17 -0
- package/dist/skills/index.d.ts +15 -0
- package/dist/skills/index.js +2 -0
- package/dist/skills/types.d.ts +18 -0
- package/dist/task-log/anchor-child-tasks.d.ts +7 -0
- package/dist/task-log/delegation-trailer.d.ts +34 -0
- package/dist/template/engine.d.ts +2 -2
- package/dist/template/helpers/exec.browser.d.ts +4 -3
- package/dist/template/helpers/exec.d.ts +4 -3
- package/dist/template/helpers/format-conversation.d.ts +1 -0
- package/dist/template/types.d.ts +20 -0
- package/dist/testing/index.js +1 -1
- package/dist/types/index.d.ts +1578 -3
- package/dist/types/task-log.types.d.ts +3 -0
- package/dist/ui-card/index.d.ts +2 -0
- package/dist/ui-card/legacy-card-parser.d.ts +11 -0
- package/dist/ui-instance/definition.d.ts +6 -0
- package/dist/ui-instance/errors.d.ts +18 -0
- package/dist/ui-instance/index.d.ts +11 -0
- package/dist/ui-instance/json.d.ts +19 -0
- package/dist/ui-instance/lineage.d.ts +24 -0
- package/dist/ui-instance/runtime.d.ts +19 -0
- package/dist/ui-instance/store.d.ts +213 -0
- package/dist/ui-instance/types.d.ts +337 -0
- package/dist/ui-plugin/app-icon.d.ts +50 -0
- package/dist/ui-plugin/app-manifest.d.ts +64 -0
- package/dist/ui-plugin/csp.d.ts +28 -0
- package/dist/ui-plugin/index.d.ts +8 -0
- package/dist/ui-plugin/limits.d.ts +27 -0
- package/dist/ui-plugin/manifest.d.ts +3 -0
- package/dist/ui-plugin/types.d.ts +204 -0
- package/dist/ui-plugin/validator.d.ts +18 -0
- package/dist/utils/crewx-executable.d.ts +76 -0
- package/dist/utils/crewx-home.d.ts +1 -0
- package/dist/utils/env-defaults.d.ts +3 -0
- package/dist/utils/id.d.ts +1 -1
- package/dist/utils/local-identity.d.ts +2 -0
- package/dist/utils/runner-env.d.ts +3 -0
- package/dist/utils/timestamp.d.ts +1 -0
- package/dist/utils/workspace.d.ts +1 -0
- package/dist/wi/create.d.ts +48 -0
- package/dist/wi/select.d.ts +20 -0
- package/package.json +57 -3
- package/templates/agents/default.yaml +303 -128
- package/templates/documents/crewx-manual.md +138 -138
- package/templates/documents/crewx-quick-guide.md +8 -7
- package/templates/workflows/wi-default-flow.yaml +65 -0
- package/templates/workflows/wi-plan-flow.yaml +140 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';var util=require('util'),fs=require('fs'),crypto=require('crypto'),console$1=require('console'),stream=require('stream');var D=["text/plain","application/json"];var k=[5,15,30,60],x=Object.freeze({min:15e3,max:6e5,default:3e5}),we=1,z="schedule:",be="schedule",Ie="exit 78",re=["standby","disabled","draining","degraded"],Re=["cron","cron_manual","app_enable"],Ne=/^[A-Z][A-Z0-9_]{0,63}$/u;function ie(e){return typeof e=="string"&&Ne.test(e)}var oe=["status","everyMinutes","lastStartedAt","lastFinishedAt","lastOutcome","lastErrorCode","nextRunAt","periodic","periodicReason"],De=["unset","on","off"],xe=["available","unavailable"],V=64,Pe=128;function ae(e){return k.includes(e)}function W(e){return Number.isSafeInteger(e)&&e>=x.min&&e<=x.max}function se(e){return re.includes(e)}function de(e){if(!ke(e)||Object.keys(e).length!==oe.length||!oe.every(o=>Object.hasOwn(e,o))||typeof e.status!="string"||!De.includes(e.status)||!ae(e.everyMinutes)||!F(e.lastStartedAt,V)||!F(e.lastFinishedAt,V)||!F(e.lastOutcome,Pe)||!F(e.nextRunAt,V)||e.lastErrorCode!==null&&!ie(e.lastErrorCode)||typeof e.periodic!="string"||!xe.includes(e.periodic))return;let t=e.periodic;if(!(t==="available"?e.periodicReason!==null:!se(e.periodicReason))&&!(e.nextRunAt!==null&&(e.status!=="on"||t!=="available")))return Object.freeze({status:e.status,everyMinutes:e.everyMinutes,lastStartedAt:e.lastStartedAt,lastFinishedAt:e.lastFinishedAt,lastOutcome:e.lastOutcome,lastErrorCode:e.lastErrorCode,nextRunAt:e.nextRunAt,periodic:t,periodicReason:e.periodicReason})}function F(e,n){return e===null||typeof e=="string"&&e.length>0&&e.length<=n}function ke(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var ue=Symbol;ue.metadata===void 0&&Object.defineProperty(Symbol,"metadata",{configurable:false,value:Symbol.for("Symbol.metadata")});var Ue=ue.metadata,U=Symbol.for("crewx.app.tool-metadata"),l=class extends Error{code;detail;outcome;constructor(n,t=null,o){super(n),this.name="AppError",this.code=n,this.detail=t,this.outcome=G(o?.outcome);}};function G(e){return e==="rejected"?"rejected":"failed"}var Y=class{static devtools=process.env.CREWX_APP_DEV==="1"?Object.freeze({log:true}):void 0;currentState;stateWasSet=false;answerBody;answerRange;callContext;callSchedule;scheduleDirective;workspaceRoot;constructor(n={workspaceRoot:process.cwd()}){this.currentState=n.state??{},this.workspaceRoot=n.workspaceRoot,this.callContext=n.context===void 0?void 0:ve(n.context),this.callSchedule=n.schedule===void 0?void 0:Object.freeze({...n.schedule});}get schedule(){return this.callSchedule}requestSchedule(n){if(typeof n!="boolean")throw new TypeError("requestSchedule needs true or false");if(this.callSchedule===void 0)throw new l("SCHEDULE_UNSUPPORTED","this App has no schedule on this Host");let t=this.callContext?.actor;if(t==="schedule")throw new l("SCHEDULE_UNSUPPORTED","a scheduled run cannot change its own schedule",{outcome:"rejected"});if(n&&t!=="user")throw new l("SCHEDULE_ENABLE_DENIED","only the person at the screen can turn a schedule on",{outcome:"rejected"});this.scheduleDirective=Object.freeze({enabled:n});}get didRequestSchedule(){return this.scheduleDirective}get context(){if(this.callContext===void 0)throw new TypeError("this.context is only set when the Host runs the action; pass options.context when you construct the App in a test");return this.callContext}get state(){return this.currentState}get didSetState(){return this.stateWasSet}setState(n){this.currentState=n,this.stateWasSet=true;}get didSetContent(){return this.answerBody!==void 0}get producedContent(){return this.answerBody===void 0?void 0:{body:this.answerBody,...this.answerRange===void 0?{}:{range:this.answerRange}}}setContent(n,t){if(typeof n!="string"&&!(n instanceof Uint8Array))throw new TypeError("setContent needs a string or a Uint8Array");if(t!==void 0&&!He(t))throw new TypeError("setContent range must be { startLine, lineCount, totalLines }, three integers of at least 1");this.answerBody=typeof n=="string"?new TextEncoder().encode(n):new Uint8Array(n),this.answerRange=t===void 0?void 0:{startLine:t.startLine,lineCount:t.lineCount,totalLines:t.totalLines};}emptyState(){return {}}validate(n,t,o){}mapError(n){return {code:"EXECUTION_FAILED",detail:null}}errorState(n,t,o){return {...T(o.state)?o.state:{},error:{code:n,detail:t}}}};function Le(e){return function(n,t){if(t.static||t.private||t.kind!=="method")throw new TypeError("@Tool can decorate public instance methods only");let o=t.metadata;if(!o)throw new TypeError("standard decorator metadata is unavailable");let i=Object.hasOwn(o,U)?o[U]:[];if(i.some(u=>u.methodName===String(t.name)))throw new TypeError(`@Tool is declared more than once for ${String(t.name)}`);let r=e.content===void 0?void 0:Me(e.name,e.content),s=e.schedule===void 0?void 0:Fe(e);if(s!==void 0&&i.some(u=>u.options.schedule!==void 0))throw new TypeError(`@Tool ${e.name}: an App declares at most one scheduled action`);o[U]=[...i,{methodName:String(t.name),options:Object.freeze({...e,...r===void 0?{}:{content:r},...s===void 0?{}:{schedule:s}})}];}}function L(e){let n=e[Ue],t=n&&Object.hasOwn(n,U)?n[U]:[],o=new Map(t.map(r=>[r.methodName,r])),i=Object.getOwnPropertyNames(e.prototype).map(r=>o.get(r)).filter(r=>r!==void 0);if(i.length!==t.length)throw new TypeError("a @Tool method is missing from the App prototype");return i}function ce(e){return L(e).some(({options:n})=>n.schedule!==void 0)}function le(e){let n=e.definition,t=L(e),o=new Set;return t.map(({options:i})=>{if(o.has(i.name))throw new TypeError(`duplicate @Tool name: ${i.name}`);return o.add(i.name),{actionId:i.name,...i.dataInputs===void 0?{}:{dataInputs:[...i.dataInputs]},confirmation:i.confirmation??"none",capability:i.capability??"app.read",mutation:i.mutation??true,inputSchema:i.inputSchema,...i.content===void 0?{}:{content:Xe(i.content)},...i.schedule===void 0?{}:{schedule:{...i.schedule}},resultProjection:i.resultProjection??{allow:[...n.stateProjection.allow]},_meta:{description:i.description}}})}function je(e,n){if(n.length===0)throw new TypeError("backendCommand must name the skill command");let t=le(e).map(({_meta:o,...i})=>({...i,backend:{type:"skill",command:[...n]},_meta:o}));return {...e.definition,actions:t}}function Me(e,n){let t=r=>{throw new TypeError(`@Tool ${e}: content ${r}`)},o=(r,s,u)=>{if(!T(u))return t(`${r} must be an object`);for(let a of Object.keys(u))if(a==="mediaType"){if(!D.includes(u[a]))return t(`${r}.mediaType must be one of ${D.join(", ")}`)}else if(a===s){if(typeof u[a]!="boolean")return t(`${r}.${a} must be true or false`)}else return t(`${r} has the unknown key "${a}"`);return Object.hasOwn(u,"mediaType")?Object.freeze({...u}):t(`${r}.mediaType is required`)};if(!T(n))return t("must be an object");let i={};for(let r of Object.keys(n))if(r==="in")i[r]=o("in","required",n[r]);else if(r==="out")i[r]=o("out","range",n[r]);else return t(`has the unknown key "${r}"; use "in" and/or "out"`);return Object.keys(i).length===0?t('needs "in" and/or "out"'):Object.freeze(i)}function Fe(e){let n=o=>{throw new TypeError(`@Tool ${e.name}: schedule ${o}`)},t=e.schedule;if(!T(t))return n("must be an object");for(let o of Object.keys(t))if(o!=="everyMinutes"&&o!=="timeoutMs")return n(`has the unknown key "${o}"`);return k.includes(t.everyMinutes)?t.timeoutMs!==void 0&&!W(t.timeoutMs)?n(`timeoutMs must be an integer from ${x.min} to ${x.max}`):e.content!==void 0?n("cannot be combined with content"):e.dataInputs!==void 0?n("cannot be combined with dataInputs"):e.confirmation!==void 0&&e.confirmation!=="none"?n("cannot require a native confirmation"):Object.freeze({everyMinutes:t.everyMinutes,...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}}):n(`everyMinutes must be one of ${k.join(", ")}`)}function ve(e){return Object.freeze({instanceId:e.instanceId,threadId:e.threadId,actor:e.actor,requestId:e.requestId,nowMs:e.nowMs})}function Xe(e){let n={};for(let[t,o]of Object.entries(e))n[t]={...o};return n}function He(e){return T(e)&&["startLine","lineCount","totalLines"].every(n=>Number.isSafeInteger(e[n])&&e[n]>=1)}function T(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}var Je=/^[A-Za-z0-9._:-]{1,128}$/u,qe=/[\u0000-\u001f\u007f\u2028\u2029]/u,Ke=512;function Q(e=process.env){let n=pe(e.CREWX_APP_INSTANCE_ID),t=e.CREWX_APP_REQUEST_ID,o=e.CREWX_APP_ACTOR_KIND,i=e.CREWX_APP_NOW_MS;if(n===void 0||typeof t!="string"||!Je.test(t)||o!=="user"&&o!=="agent"&&o!=="schedule"||typeof i!="string"||!/^\d{1,16}$/u.test(i))return;let r=Number(i);if(!Number.isSafeInteger(r))return;let s=e.CREWX_THREAD_ID===void 0?null:pe(e.CREWX_THREAD_ID);if(s!==void 0&&!(o==="schedule"&&(s!==null||!n.startsWith(z))))return Object.freeze({instanceId:n,threadId:s,actor:o,requestId:t,nowMs:r})}function pe(e){if(!(typeof e!="string"||e.length===0||qe.test(e)))return new TextEncoder().encode(e).byteLength<=Ke?e:void 0}var $e="dist/tools.json",Be=1,Ve="dist/main.mjs";var fe=["CREWX_APP_INSTANCE_ID","CREWX_THREAD_ID"];function ze(e){if(!Array.isArray(e)||e.length===0)return false;let n=new Set;for(let t of e){if(!fe.some(o=>o===t)||n.has(t))return false;n.add(t);}return true}var v=2,X=2097152;var P=2*1024*1024,H=2e4;function Z(e){return crypto.createHash("sha256").update(e).digest("hex")}function J(e){if(e.byteLength===0)return 0;let n=0;for(let t of e)t===10&&(n+=1);return e[e.byteLength-1]!==10&&(n+=1),n}var Ge=X+1+P,Qe=64*1024,Ze=10,q={kind:"invalid"};function en(e,n){try{let t=[],o=0;for(;;){let s=new Uint8Array(Qe),u=fs.readSync(e,s,0,s.length,null);if(u===0)break;if(o+=u,o>n)return;t.push(s.subarray(0,u));}let i=new Uint8Array(o),r=0;for(let s of t)i.set(s,r),r+=s.byteLength;return i}catch{return}}function K(e){return nn(en(e,Ge))}function nn(e){if(e===void 0)return q;let n=e.indexOf(Ze);if(e.byteLength<=X){let o=dn(Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8"));if(o.ok&&!(n>=0&&b(o.value)&&o.value.schemaVersion===v))return {kind:"v1",value:o.value}}if(n<=0||n>X)return q;let t;try{t=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(0,n)));}catch{return q}return !b(t)||t.schemaVersion!==v?q:{kind:"v2",header:t,body:e.subarray(n+1)}}var tn="actionId,content,input,schemaVersion,state",on="bytes,lines,mediaType,sha256",rn="mediaType,range",an=/^[a-f0-9]{64}$/u,sn=new TextDecoder("utf-8",{fatal:true,ignoreBOM:true});function Ee(e,n){let t=a=>({code:a,outcome:"rejected"});if(j(e)!==tn||e.schemaVersion!==v||typeof e.actionId!="string"||!b(e.input)||!b(e.state)||!b(e.content)||j(e.content)!=="in,out")return {code:"INPUT_INVALID",outcome:"failed"};let o=e.content,i,r=o.in;if(r===null){if(n.byteLength!==0)return t(n.byteLength>P?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH")}else {if(!b(r)||j(r)!==on||!ye(r.mediaType)||!me(r.bytes,P)||!me(r.lines,H)||typeof r.sha256!="string"||!an.test(r.sha256)||n.byteLength!==r.bytes)return t(n.byteLength>P?"CONTENT_TOO_LARGE":"CONTENT_DIGEST_MISMATCH");if(Z(n)!==r.sha256||J(n)!==r.lines)return t("CONTENT_DIGEST_MISMATCH");let a;try{a=sn.decode(n);}catch{return t("CONTENT_ENCODING_INVALID")}i={mediaType:r.mediaType,text:a};}let s,u=o.out;if(u!==null){if(!b(u)||j(u)!==rn||!ye(u.mediaType))return t("CONTENT_SOURCE_UNSUPPORTED");let a=u.range;if(a!==null&&!un(a))return t("CONTENT_SOURCE_UNSUPPORTED");s={mediaType:u.mediaType,...a===null?{}:{range:{startLine:a.startLine,lineCount:a.lineCount}}};}return {actionId:e.actionId,input:e.input,state:e.state,content:{...i===void 0?{}:{in:i},...s===void 0?{}:{out:s}}}}function Ae(e){return Object.hasOwn(e,"code")}function Se(e,n){let t=o=>({code:o,outcome:"rejected"});if(e?.in===void 0){if(n.in!==void 0)return t("CONTENT_SOURCE_UNSUPPORTED")}else if(n.in===void 0){if(e.in.required===true)return t("CONTENT_REQUIRED")}else if(n.in.mediaType!==e.in.mediaType)return t("CONTENT_SOURCE_UNSUPPORTED");if(e?.out===void 0){if(n.out!==void 0)return t("CONTENT_SOURCE_UNSUPPORTED")}else {if(n.out===void 0)return t("CONTENT_REQUIRED");if(n.out.mediaType!==e.out.mediaType||n.out.range!==void 0&&e.out.range!==true)return t("CONTENT_SOURCE_UNSUPPORTED")}}function $(e,n){let{content:t,...o}=e,i=n===void 0?o:{...o,content:{bytes:n.body.byteLength,lines:J(n.body),sha256:Z(n.body),...n.range===void 0?{}:{range:n.range}}},r=new TextEncoder().encode(`${JSON.stringify(i)}
|
|
2
|
+
`);if(n===void 0)return r;let s=new Uint8Array(r.byteLength+n.body.byteLength);return s.set(r,0),s.set(n.body,r.byteLength),s}function he(e){if(e.body.byteLength>P||J(e.body)>H)return {code:"CONTENT_TOO_LARGE",outcome:"failed"}}function dn(e){try{return {ok:!0,value:JSON.parse(e)}}catch{return {ok:false}}}function j(e){return Object.keys(e).sort().join(",")}function b(e){if(e===null||typeof e!="object"||Array.isArray(e))return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function ye(e){return typeof e=="string"&&D.includes(e)}function me(e,n){return Number.isSafeInteger(e)&&e>=0&&e<=n}function un(e){return b(e)&&j(e)==="lineCount,startLine"&&Number.isSafeInteger(e.startLine)&&e.startLine>=1&&Number.isSafeInteger(e.lineCount)&&e.lineCount>=1&&e.lineCount<=H}var ln=1;async function pn(e,n,t=process.env.CREWX_WORKSPACE_ROOT??process.cwd(),o){return (await _e(e,n,t,void 0,true,void 0,o)).response}async function _e(e,n,t,o,i=true,r,s){let u=r!==void 0,a=T(n)?n:void 0,E=a?.input,A=a?.state,d=new e({state:T(A)?A:{},workspaceRoot:t,...s===void 0?{}:{context:s}}),h=T(E)?E:{},S=T(A)?A:d.emptyState(),f={},y=a!==void 0&&Object.hasOwn(a,"schedule"),C;try{let m;if(u){if(a===void 0||y)throw new l("INPUT_INVALID");let p=Ee(a,r);if(Ae(p))throw new l(p.code,null,{outcome:p.outcome});(({actionId:m,input:h,state:S}=p)),f=p.content;}else {let p=y&&a!==void 0?de(a.schedule):void 0;if(!a||Object.keys(a).length!==(y?5:4)||!["schemaVersion","actionId","input","state"].every(ge=>Object.hasOwn(a,ge))||a.schemaVersion!==ln||typeof a.actionId!="string"||!T(E)||!T(A)||y&&p===void 0)throw new l("INPUT_INVALID");m=a.actionId,h=E,S=A,C=p;}d=new e({state:S,workspaceRoot:t,...s===void 0?{}:{context:s},...C===void 0?{}:{schedule:C}}),await d.validate(m,h,S);let c=L(e).find(({options:p})=>p.name===m);if(!c)throw new l("INPUT_INVALID");if(C!==void 0&&(c.options.content!==void 0||!ce(e)))throw new l("INPUT_INVALID");let g=d[c.methodName];if(typeof g!="function")throw new l("EXECUTION_FAILED");let _=Se(c.options.content,f);if(_)throw new l(_.code,null,{outcome:_.outcome});let M=Object.freeze({...f.in===void 0?{}:{in:Object.freeze({text:f.in.text})},...f.out===void 0?{}:{out:Object.freeze(f.out.range===void 0?{}:{range:Object.freeze({...f.out.range})})}}),N=()=>g.call(d,h,M),I=i?await yn(N):await N();if(I!==void 0&&!T(I))throw new l("EXECUTION_FAILED");let w;if(f.out!==void 0){if(w=d.producedContent,w===void 0)throw new l("EXECUTION_FAILED","content.out was requested but setContent was never called");let p=he(w);if(p)throw new l(p.code,null,{outcome:p.outcome})}else if(d.didSetContent)throw new l("EXECUTION_FAILED","setContent was called but the request asked for no content.out");let R=d.didRequestSchedule;return {response:{...d.didSetState?{state:d.state}:{},...I===void 0?{}:{result:I},...R===void 0?{}:{schedule:{enabled:R.enabled}}},...w===void 0?{}:{answer:w}}}catch(m){let c,g=m,_=m instanceof l?m:void 0;if(_)c={code:_.code,detail:_.detail,outcome:_.outcome};else try{c=d.mapError(m);}catch(p){c={code:"EXECUTION_FAILED",detail:null},g=p;}let M=En(c?.code),N=M?c.code:"EXECUTION_FAILED",I=typeof c?.detail=="string"?c.detail:null,w=M?G(c.outcome):"failed",R;try{R=d.errorState(N,I,{input:h,state:S});}catch(p){g=new AggregateError([g,p],"App error handling failed"),R=d.emptyState();}return o?.(N,g,{outcome:w,detail:I,expected:_!==void 0&&g===_}),{response:{outcome:w,errorCode:N,state:T(R)?R:d.emptyState()}}}}async function fn(e,n={}){let t=n.output??process.stdout,o,i;if(n.preloadedInput!==void 0)o=n.preloadedInput.value,i=n.preloadedInput.body;else {let d=K(n.inputFd??0);d.kind==="v1"?o=d.value:d.kind==="v2"&&(o=d.header,i=d.body);}let r=i!==void 0,s=n.context??Q(),u=false,a=(d,h,S)=>{u=true,n.onFailure?.(d,h,S);},E;try{E=await _e(e,o,process.env.CREWX_WORKSPACE_ROOT??process.cwd(),a,n.consoleManaged!==!0,i,s);}catch(d){a("EXECUTION_FAILED",d),E={response:Te(n.emptyState)};}mn(E.response)&&!u&&a(E.response.errorCode,void 0,{outcome:E.response.outcome,detail:null,expected:false});let A;try{let d=(n.sanitize??Ce)(E.response);A=r?$(d,E.answer):`${JSON.stringify(d)}
|
|
3
|
+
`;}catch(d){a("EXECUTION_FAILED",d);let h=Te(n.emptyState);try{let S=(n.sanitize??Ce)(h);A=r?$(S):`${JSON.stringify(S)}
|
|
4
|
+
`;}catch(S){a("EXECUTION_FAILED",S),A=r?$(h):`${JSON.stringify(h)}
|
|
5
|
+
`;}}t.write(A);}async function yn(e){let n=["log","info","debug"],t=new Map;for(let o of n)t.set(o,console[o]),console[o]=(...i)=>process.stderr.write(`${util.format(...i)}
|
|
6
|
+
`);try{return await e()}finally{for(let o of n)console[o]=t.get(o);}}function Te(e={}){return {outcome:"failed",errorCode:"EXECUTION_FAILED",state:{...e,error:{code:"EXECUTION_FAILED",detail:null}}}}function mn(e){return (e.outcome==="failed"||e.outcome==="rejected")&&typeof e.errorCode=="string"}function En(e){return typeof e=="string"&&/^[A-Z][A-Z0-9_]{0,127}$/u.test(e)}function Ce(e){return e}var ee={depth:null,maxArrayLength:null,maxStringLength:null},te=class extends stream.Writable{#e="buffer";#n=[];_write(n,t,o){if(this.#e==="buffer"){this.#n.push(typeof n=="string"?n:Uint8Array.from(n)),o();return}if(this.#e==="discard"){o();return}process.stderr.write(n,o);}flushToStderr(){this.#e="stderr";for(let n of this.#n)process.stderr.write(n);this.#n=[];}discard(){this.#e="discard",this.#n=[];}};async function hn(e,n={}){let t=process.stdout,o=t.write.bind(t),i=new te,r=new console$1.Console({stdout:i,stderr:i,inspectOptions:{...ee}});globalThis.console=r;let s=false,u="-",a="-",E,A=false,d,h;try{let y=Cn(n.inputFd??0);u=_n(y.value),a=B(process.env.CREWX_APP_REQUEST_ID),E=new Date().toISOString();try{d=await e();}catch(c){A=!0,h=c;}let C=d?.default;if(!A&&C?.devtools?.log===!0?(Object.assign(util.inspect.defaultOptions,ee),S(E),i.flushToStderr()):i.discard(),A){f("EXECUTION_FAILED",h),ne(o,n,f);return}try{if(typeof d?.runSkillApp!="function")throw new TypeError("App module does not export runSkillApp");let c={sanitize:n.sanitize,emptyState:n.emptyState??Tn(C),preloadedInput:y.body===void 0?{value:y.value}:{value:y.value,body:y.body},onFailure:f,consoleManaged:!0,output:{write:o}};await d.runSkillApp(C,c);}catch(c){f("EXECUTION_FAILED",c),ne(o,n,f);}}catch(y){f("EXECUTION_FAILED",y),ne(o,n,f);}finally{process.exitCode=0;}function S(y){s||(process.stderr.write(`[crewx-app] ${y??new Date().toISOString()} ${B(u)} req=${a}
|
|
7
|
+
`),s=true);}function f(y,C,m){S();let c=m?.expected===true&&m.detail?` ${B(m.detail)}`:"";process.stderr.write(`[crewx-app] ${m?.outcome??"failed"} ${B(y)}${c}
|
|
8
|
+
`),C!==void 0&&m?.expected!==true&&process.stderr.write(`${util.inspect(C,ee)}
|
|
9
|
+
`);}}function Tn(e){if(typeof e=="function")try{let t=new e({workspaceRoot:process.cwd()}).emptyState();return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}catch{return}}function Cn(e){let n=K(e);return n.kind==="v1"?{value:n.value}:n.kind==="v2"?{value:n.header,body:n.body}:{value:void 0}}function _n(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)&&typeof e.actionId=="string"?e.actionId:"-"}function B(e){return typeof e!="string"||e.length===0?"-":e.replace(/[\u0000-\u001f\u007f\u2028\u2029]/gu,"_")}function ne(e,n,t){let o={code:"EXECUTION_FAILED",detail:null},r={outcome:"failed",errorCode:"EXECUTION_FAILED",state:n.emptyState!==null&&typeof n.emptyState=="object"&&!Array.isArray(n.emptyState)?{...n.emptyState,error:o}:{error:o}},s=r;try{s=(n.sanitize??On)(r);}catch(u){t("EXECUTION_FAILED",u);}e(`${JSON.stringify(s)}
|
|
10
|
+
`);}function On(e){return e}exports.APP_SCHEDULE_ACTOR_KIND=be;exports.APP_SCHEDULE_INERT_COMMAND=Ie;exports.APP_SCHEDULE_INSTANCE_PREFIX=z;exports.APP_SCHEDULE_INTERVALS_MINUTES=k;exports.APP_SCHEDULE_MAX_PER_APP=we;exports.APP_SCHEDULE_PERIODIC_REASONS=re;exports.APP_SCHEDULE_TIMEOUT_MS=x;exports.APP_TOOLS_FILE=$e;exports.APP_TOOLS_SCHEMA_VERSION=Be;exports.APP_TOOL_ENTRY=Ve;exports.AppError=l;exports.CrewXApp=Y;exports.SCHEDULE_TRIGGERS=Re;exports.SKILL_BACKEND_ENV_NAMES=fe;exports.Tool=Le;exports.executeAppRequest=pn;exports.generateManifest=je;exports.generateToolDeclarations=le;exports.getToolDeclarations=L;exports.isAppScheduleCode=ie;exports.isAppScheduleIntervalMinutes=ae;exports.isAppSchedulePeriodicReason=se;exports.isAppScheduleTimeoutMs=W;exports.isSkillBackendEnv=ze;exports.readAppContext=Q;exports.runAppEntry=hn;exports.runSkillApp=fn;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { UI_CONTENT_MEDIA_TYPES } from './content-media-types.js';
|
|
2
|
+
export type { UiContentMediaType } from './content-media-types.js';
|
|
3
|
+
export declare const SKILL_BACKEND_CONTENT_SCHEMA_VERSION: 2;
|
|
4
|
+
export declare const SKILL_BACKEND_MAX_INPUT_BYTES = 2097152;
|
|
5
|
+
export declare const SKILL_BACKEND_MAX_OUTPUT_BYTES = 2097152;
|
|
6
|
+
export declare const UI_CONTENT_MAX_BYTES: number;
|
|
7
|
+
export declare const UI_CONTENT_MAX_LINES = 20000;
|
|
8
|
+
export declare function sha256Content(bytes: Uint8Array): string;
|
|
9
|
+
export declare function countContentLines(bytes: Uint8Array): number;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type AppContext, type AppFailureOutcome, type CrewXAppConstructor, type JsonObject } from './app.js';
|
|
2
|
+
export interface AppFailureInfo {
|
|
3
|
+
readonly outcome: AppFailureOutcome;
|
|
4
|
+
readonly detail: string | null;
|
|
5
|
+
readonly expected: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface RunSkillAppOptions {
|
|
8
|
+
readonly sanitize?: (value: unknown) => unknown;
|
|
9
|
+
readonly inputFd?: number;
|
|
10
|
+
readonly output?: Pick<NodeJS.WriteStream, 'write'>;
|
|
11
|
+
readonly emptyState?: JsonObject;
|
|
12
|
+
readonly preloadedInput?: {
|
|
13
|
+
readonly value: unknown;
|
|
14
|
+
readonly body?: Uint8Array;
|
|
15
|
+
};
|
|
16
|
+
readonly onFailure?: (errorCode: string, error?: unknown, info?: AppFailureInfo) => void;
|
|
17
|
+
readonly consoleManaged?: boolean;
|
|
18
|
+
readonly context?: AppContext;
|
|
19
|
+
}
|
|
20
|
+
export declare function executeAppRequest(appClass: CrewXAppConstructor, rawRequest: unknown, workspaceRoot?: string, context?: AppContext): Promise<JsonObject>;
|
|
21
|
+
export declare function runSkillApp(appClass: CrewXAppConstructor, options?: RunSkillAppOptions): Promise<void>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export declare const APP_SCHEDULE_INTERVALS_MINUTES: readonly [5, 15, 30, 60];
|
|
2
|
+
export type AppScheduleIntervalMinutes = (typeof APP_SCHEDULE_INTERVALS_MINUTES)[number];
|
|
3
|
+
export declare const APP_SCHEDULE_TIMEOUT_MS: Readonly<{
|
|
4
|
+
min: 15000;
|
|
5
|
+
max: 600000;
|
|
6
|
+
default: 300000;
|
|
7
|
+
}>;
|
|
8
|
+
export declare const APP_SCHEDULE_MAX_PER_APP = 1;
|
|
9
|
+
export declare const APP_SCHEDULE_INSTANCE_PREFIX = "schedule:";
|
|
10
|
+
export declare const APP_SCHEDULE_ACTOR_KIND = "schedule";
|
|
11
|
+
export declare const APP_SCHEDULE_INERT_COMMAND = "exit 78";
|
|
12
|
+
export declare const APP_SCHEDULE_PERIODIC_REASONS: readonly ["standby", "disabled", "draining", "degraded"];
|
|
13
|
+
export type AppSchedulePeriodicReason = (typeof APP_SCHEDULE_PERIODIC_REASONS)[number];
|
|
14
|
+
export declare const SCHEDULE_TRIGGERS: readonly ["cron", "cron_manual", "app_enable"];
|
|
15
|
+
export type ScheduleTrigger = (typeof SCHEDULE_TRIGGERS)[number];
|
|
16
|
+
export interface ToolScheduleDeclaration {
|
|
17
|
+
readonly everyMinutes: AppScheduleIntervalMinutes;
|
|
18
|
+
readonly timeoutMs?: number;
|
|
19
|
+
}
|
|
20
|
+
export type AppScheduleStatus = 'unset' | 'on' | 'off';
|
|
21
|
+
export type AppSchedulePeriodic = 'available' | 'unavailable';
|
|
22
|
+
export type AppScheduleRunVerdict = {
|
|
23
|
+
readonly outcome: 'success';
|
|
24
|
+
} | {
|
|
25
|
+
readonly outcome: 'failure';
|
|
26
|
+
readonly code: string;
|
|
27
|
+
};
|
|
28
|
+
export declare const APP_SCHEDULE_CODE_PATTERN: RegExp;
|
|
29
|
+
export declare function isAppScheduleCode(value: unknown): value is string;
|
|
30
|
+
export interface AppScheduleSnapshot {
|
|
31
|
+
readonly status: AppScheduleStatus;
|
|
32
|
+
readonly everyMinutes: AppScheduleIntervalMinutes;
|
|
33
|
+
readonly lastStartedAt: string | null;
|
|
34
|
+
readonly lastFinishedAt: string | null;
|
|
35
|
+
readonly lastOutcome: string | null;
|
|
36
|
+
readonly lastErrorCode: string | null;
|
|
37
|
+
readonly nextRunAt: string | null;
|
|
38
|
+
readonly periodic: AppSchedulePeriodic;
|
|
39
|
+
readonly periodicReason: AppSchedulePeriodicReason | null;
|
|
40
|
+
}
|
|
41
|
+
export interface AppScheduleDirective {
|
|
42
|
+
readonly enabled: boolean;
|
|
43
|
+
}
|
|
44
|
+
export type AppScheduleActorKind = 'user' | 'agent' | 'schedule';
|
|
45
|
+
export type ScheduleDirectiveDecision = {
|
|
46
|
+
readonly allow: true;
|
|
47
|
+
} | {
|
|
48
|
+
readonly allow: false;
|
|
49
|
+
readonly code: 'SCHEDULE_ENABLE_DENIED' | 'SCHEDULE_DIRECTIVE_UNSUPPORTED';
|
|
50
|
+
};
|
|
51
|
+
export declare function decideScheduleDirective(input: {
|
|
52
|
+
readonly actorKind: AppScheduleActorKind;
|
|
53
|
+
readonly directive: AppScheduleDirective;
|
|
54
|
+
}): ScheduleDirectiveDecision;
|
|
55
|
+
export declare function isAppScheduleIntervalMinutes(value: unknown): value is AppScheduleIntervalMinutes;
|
|
56
|
+
export declare function isAppScheduleTimeoutMs(value: unknown): value is number;
|
|
57
|
+
export declare function isAppSchedulePeriodicReason(value: unknown): value is AppSchedulePeriodicReason;
|
|
58
|
+
export declare function parseAppScheduleSnapshot(value: unknown): AppScheduleSnapshot | undefined;
|
|
59
|
+
export declare function parseAppScheduleDirective(value: unknown): AppScheduleDirective | undefined;
|
|
@@ -43,11 +43,15 @@ export interface ThreadMessage {
|
|
|
43
43
|
content: string;
|
|
44
44
|
timestamp: string;
|
|
45
45
|
metadata: Record<string, unknown> | null;
|
|
46
|
+
contentTruncated?: boolean;
|
|
47
|
+
originalTokens?: number;
|
|
48
|
+
includedTokens?: number;
|
|
46
49
|
}
|
|
47
50
|
export interface ContextBuildParams {
|
|
48
51
|
maxTokens: number;
|
|
49
52
|
hotzoneRatio: number;
|
|
50
53
|
warmzoneRatio: number;
|
|
54
|
+
minGuaranteedPairs?: number;
|
|
51
55
|
}
|
|
52
56
|
export interface ContextBuildResponse {
|
|
53
57
|
hot: ThreadMessage[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function normalizeClaudeMode(mode: string): string;
|
|
2
|
+
export interface AgentOptionsLike {
|
|
3
|
+
query?: unknown;
|
|
4
|
+
execute?: unknown;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
export interface CanonicalizeAgentOptionsInput {
|
|
8
|
+
provider?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
options: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface CanonicalizeAgentOptionsResult {
|
|
13
|
+
options: unknown;
|
|
14
|
+
changed: boolean;
|
|
15
|
+
removed: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare function normalizeProviderMode(providerId: string, mode: string): string;
|
|
18
|
+
export declare function canonicalizeAgentOptions(input: CanonicalizeAgentOptionsInput): CanonicalizeAgentOptionsResult;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ProviderExecutionOptions } from './models.generated.js';
|
|
2
|
+
export type DefaultAgentStage = {
|
|
3
|
+
model: string;
|
|
4
|
+
query: Pick<ProviderExecutionOptions, 'mode' | 'effort'>;
|
|
5
|
+
execute: Pick<ProviderExecutionOptions, 'mode' | 'effort'>;
|
|
6
|
+
};
|
|
7
|
+
export interface DefaultAgentProfile {
|
|
8
|
+
planner: DefaultAgentStage;
|
|
9
|
+
worker: DefaultAgentStage;
|
|
10
|
+
}
|
|
11
|
+
export declare function getDefaultAgentProfile(provider: string): DefaultAgentProfile | undefined;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'fs';
|
|
2
|
+
import type { LocalServerSettings } from '../local-server/types';
|
|
3
|
+
export interface GlobalSettings {
|
|
4
|
+
cron?: {
|
|
5
|
+
auto_start?: boolean;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
};
|
|
8
|
+
ai_server?: LocalServerSettings;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export type DeepPartial<T> = T extends object ? {
|
|
12
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
13
|
+
} : T;
|
|
14
|
+
export interface GlobalSettingsStore {
|
|
15
|
+
read(): GlobalSettings;
|
|
16
|
+
update(patch: DeepPartial<GlobalSettings>): GlobalSettings;
|
|
17
|
+
set(key: string, value: unknown): GlobalSettings;
|
|
18
|
+
remove(key: string): GlobalSettings;
|
|
19
|
+
readonly path: string;
|
|
20
|
+
}
|
|
21
|
+
interface GlobalSettingsFileSystem {
|
|
22
|
+
mkdirSync: typeof mkdirSync;
|
|
23
|
+
readFileSync: typeof readFileSync;
|
|
24
|
+
renameSync: typeof renameSync;
|
|
25
|
+
statSync: typeof statSync;
|
|
26
|
+
writeFileSync: typeof writeFileSync;
|
|
27
|
+
}
|
|
28
|
+
export interface CreateGlobalSettingsStoreOptions {
|
|
29
|
+
filePath?: string;
|
|
30
|
+
fileSystem?: Partial<GlobalSettingsFileSystem>;
|
|
31
|
+
}
|
|
32
|
+
export declare function createGlobalSettingsStore(opts?: CreateGlobalSettingsStoreOptions): GlobalSettingsStore;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const CLAUDE_OPUS_4_8_BASE_MODEL_ID: "claude-opus-4-8";
|
|
2
|
+
export declare const CLAUDE_OPUS_4_8_LEGACY_MODEL_ID: "claude-opus-4-8[1m]";
|
|
3
|
+
export declare const CLAUDE_MODEL_COMPATIBILITY_PAIRS: readonly [{
|
|
4
|
+
readonly baseModelId: "claude-opus-4-8";
|
|
5
|
+
readonly catalogModelId: "claude-opus-4-8[1m]";
|
|
6
|
+
}, {
|
|
7
|
+
readonly baseModelId: "claude-opus-4-7";
|
|
8
|
+
readonly catalogModelId: "claude-opus-4-7[1m]";
|
|
9
|
+
}, {
|
|
10
|
+
readonly baseModelId: "claude-opus-4-6";
|
|
11
|
+
readonly catalogModelId: "claude-opus-4-6[1m]";
|
|
12
|
+
}, {
|
|
13
|
+
readonly baseModelId: "claude-sonnet-4-6";
|
|
14
|
+
readonly catalogModelId: "claude-sonnet-4-6[1m]";
|
|
15
|
+
}];
|
|
16
|
+
export declare function normalizeAntigravityMode(mode: string): string;
|
|
17
|
+
export declare function resolveCatalogModelId(model: string): string;
|
|
18
|
+
export declare const ANTIGRAVITY_MODEL_COMPATIBILITY: ReadonlyArray<{
|
|
19
|
+
legacyId: string;
|
|
20
|
+
model: string;
|
|
21
|
+
effort?: string;
|
|
22
|
+
}>;
|
|
23
|
+
export type AntigravityResolvedModel = {
|
|
24
|
+
model?: string;
|
|
25
|
+
effort?: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function resolveAntigravityModel(model?: string): AntigravityResolvedModel;
|
|
28
|
+
export declare function resolveProviderCatalogModel(providerId: string, model?: string): {
|
|
29
|
+
model?: string;
|
|
30
|
+
effort?: string;
|
|
31
|
+
};
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
+
import type { ModelApiPricing } from './pricing.types.js';
|
|
2
|
+
export declare const MODEL_TIERS: readonly ["flagship", "balanced", "speed"];
|
|
3
|
+
export type ModelTier = (typeof MODEL_TIERS)[number];
|
|
4
|
+
export declare const EFFORT_LEVELS: readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max", "ultra"];
|
|
5
|
+
export type EffortLevel = (typeof EFFORT_LEVELS)[number];
|
|
6
|
+
export type KnownEffortLevel = EffortLevel;
|
|
7
|
+
export declare const PROVIDER_ARGV_EFFORTS: Record<string, readonly string[]>;
|
|
8
|
+
export declare const MODEL_CATALOG_VERSION = 33;
|
|
9
|
+
export declare const MODEL_CATALOG_UPDATED = "2026-10-08T00:00:00Z";
|
|
1
10
|
export interface ModelCatalogEntry {
|
|
2
11
|
id: string;
|
|
3
12
|
name: string;
|
|
4
13
|
description?: string;
|
|
14
|
+
contextWindowTokens?: number;
|
|
15
|
+
tier?: ModelTier;
|
|
16
|
+
recommended?: boolean;
|
|
17
|
+
apiPricing?: ModelApiPricing;
|
|
5
18
|
}
|
|
6
19
|
export interface ProviderModeEntry {
|
|
7
20
|
id: string;
|
|
@@ -12,11 +25,35 @@ export interface ProviderModelOverride {
|
|
|
12
25
|
effort?: string[];
|
|
13
26
|
defaultEffort?: string;
|
|
14
27
|
}
|
|
28
|
+
export type ProviderOptionSpec = {
|
|
29
|
+
key: string;
|
|
30
|
+
type: 'boolean';
|
|
31
|
+
} | {
|
|
32
|
+
key: string;
|
|
33
|
+
type: 'enum';
|
|
34
|
+
values: string[];
|
|
35
|
+
};
|
|
36
|
+
export interface ProviderExecutionOptions {
|
|
37
|
+
mode: string;
|
|
38
|
+
effort: string;
|
|
39
|
+
providerOptions?: Record<string, unknown>;
|
|
40
|
+
}
|
|
41
|
+
export interface ProviderDefaultProfile {
|
|
42
|
+
model: string;
|
|
43
|
+
query: ProviderExecutionOptions;
|
|
44
|
+
execute: ProviderExecutionOptions;
|
|
45
|
+
}
|
|
46
|
+
export interface ProviderDefaults {
|
|
47
|
+
version: number;
|
|
48
|
+
providers: Record<string, ProviderDefaultProfile>;
|
|
49
|
+
}
|
|
15
50
|
export interface ProviderCatalogEntry {
|
|
16
51
|
models: ModelCatalogEntry[];
|
|
17
52
|
modes: ProviderModeEntry[];
|
|
18
53
|
effort: string[];
|
|
19
54
|
modelOverrides: Record<string, ProviderModelOverride>;
|
|
55
|
+
providerOptions?: ProviderOptionSpec[];
|
|
20
56
|
}
|
|
21
57
|
export declare const PROVIDER_CATALOGS: Record<string, ProviderCatalogEntry>;
|
|
58
|
+
export declare const PROVIDER_DEFAULTS: ProviderDefaults;
|
|
22
59
|
export declare const PROVIDER_MODELS: Record<string, ModelCatalogEntry[]>;
|
|
@@ -3,6 +3,7 @@ export interface OverdriveProfile {
|
|
|
3
3
|
model?: string;
|
|
4
4
|
mode?: string;
|
|
5
5
|
effort?: string;
|
|
6
|
+
providerOptions?: Record<string, unknown>;
|
|
6
7
|
}
|
|
7
8
|
export type OverdriveSignalInput = boolean | {
|
|
8
9
|
mode?: 'count' | 'latch';
|
|
@@ -20,5 +21,11 @@ export interface OverdriveResolution {
|
|
|
20
21
|
mode?: string;
|
|
21
22
|
effort?: string;
|
|
22
23
|
crossProvider: boolean;
|
|
24
|
+
providerOptions?: Record<string, unknown>;
|
|
23
25
|
}
|
|
24
26
|
export declare function resolveOverdrive(agentOptions: unknown, mode: 'query' | 'execute', baseProvider: string, signal: OverdriveSignal): OverdriveResolution;
|
|
27
|
+
export interface ModeOverrideResolution {
|
|
28
|
+
provider?: string;
|
|
29
|
+
model?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function resolveModeOverride(agentOptions: unknown, mode: 'query' | 'execute'): ModeOverrideResolution;
|
package/dist/config/pricing.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import type { ModelPricing } from './pricing.types.js';
|
|
2
|
-
export type { ModelPricing } from './pricing.types.js';
|
|
3
|
-
export { MODEL_PRICING } from './pricing.generated.js';
|
|
1
|
+
import type { ModelApiPricing, ModelPricing } from './pricing.types.js';
|
|
2
|
+
export type { ModelApiPricing, ModelPricing } from './pricing.types.js';
|
|
3
|
+
export { MODEL_PRICING, UNPUBLISHED_MODEL_IDS } from './pricing.generated.js';
|
|
4
4
|
export declare function setPricingOverride(models: Record<string, ModelPricing>): void;
|
|
5
5
|
export declare function clearPricingOverride(): void;
|
|
6
|
+
export declare function setApiPricingOverride(models: Record<string, ModelApiPricing>): void;
|
|
7
|
+
export declare function clearApiPricingOverride(): void;
|
|
6
8
|
export declare function normalizeModel(model: string): string;
|
|
9
|
+
export declare function lookupApiPricing(model: string | null | undefined): ModelApiPricing | undefined;
|
|
7
10
|
export declare function getPricing(model: string | null | undefined): ModelPricing;
|
|
8
11
|
export declare function calculateCost(inputTokens: number, outputTokens: number, model: string | null | undefined, cachedInputTokens?: number, _date?: Date): number;
|
|
9
12
|
export declare function resolveCost(costUsd: number | undefined, inputTokens: number | undefined, outputTokens: number | undefined, cachedInputTokens: number | undefined, model: string | null | undefined, date?: Date): number;
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import type { ModelPricing } from './pricing.types.js';
|
|
2
2
|
export declare const MODEL_PRICING: Record<string, ModelPricing>;
|
|
3
|
+
export declare const MODEL_PRICING_VERSION = 33;
|
|
4
|
+
export declare const MODEL_PRICING_UPDATED = "2026-10-08T00:00:00Z";
|
|
5
|
+
export declare const UNPUBLISHED_MODEL_IDS: ReadonlySet<string>;
|
|
6
|
+
export declare const CATALOG_MODEL_IDS: ReadonlySet<string>;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export interface TimeoutConfig {
|
|
2
2
|
queryMs: number;
|
|
3
3
|
executeMs: number;
|
|
4
|
+
idleMs: number;
|
|
4
5
|
}
|
|
6
|
+
export declare const DEFAULT_IDLE_MS: number;
|
|
7
|
+
export declare const DEFAULT_RESUME_TIMEOUT_MS = 60000;
|
|
8
|
+
export declare function parseIdleEnvOverride(env?: NodeJS.ProcessEnv): number | undefined;
|
|
5
9
|
export declare function getProviderTimeoutConfig(env?: NodeJS.ProcessEnv): TimeoutConfig;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CrewxProjectConfig } from '../types';
|
|
2
|
+
export declare const DEFAULT_WI_BOARD_ID = "default";
|
|
3
|
+
export declare const ARCHIVE_WI_BOARD_ID = "archive";
|
|
4
|
+
export declare const DEFAULT_WI_WORKFLOW_ID = "wi-default-flow";
|
|
5
|
+
export declare const WI_PLAN_WORKFLOW_ID = "wi-plan-flow";
|
|
6
|
+
export declare const WI_DEFAULT_FLOW_FILENAME = "wi-default-flow.yaml";
|
|
7
|
+
export declare const WI_PLAN_FLOW_FILENAME = "wi-plan-flow.yaml";
|
|
8
|
+
export declare const WI_BOARD_ID_PATTERN: RegExp;
|
|
9
|
+
export declare function isReservedWiBoardId(id: string): boolean;
|
|
10
|
+
export interface ResolvedWiBoard {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
workflowId: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
goalId?: string;
|
|
16
|
+
system: boolean;
|
|
17
|
+
readOnly: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function resolveWiBoards(config: CrewxProjectConfig | undefined): ResolvedWiBoard[];
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ConversationHighlight, ConversationThreadState, SemanticContinuityContext, TemplateMessage } from '../conversation/types.js';
|
|
2
|
+
export declare const DEFAULT_PROTECTED_TURN_COUNT = 5;
|
|
3
|
+
export declare const DEFAULT_HIGHLIGHT_BUDGET_PERCENT = 5;
|
|
4
|
+
export declare const MAX_ACTIVE_HIGHLIGHTS = 12;
|
|
5
|
+
export declare const MAX_ACTIVE_HIGHLIGHT_CHARS = 2000;
|
|
6
|
+
export declare const MAX_THREAD_TITLE_CHARS = 200;
|
|
7
|
+
export declare const MAX_THREAD_STATE_VALUE_CHARS = 64;
|
|
8
|
+
export interface ConversationTurn {
|
|
9
|
+
taskId?: string;
|
|
10
|
+
messages: TemplateMessage[];
|
|
11
|
+
ordinal: number;
|
|
12
|
+
}
|
|
13
|
+
export interface GroupedConversationTurns {
|
|
14
|
+
turns: ConversationTurn[];
|
|
15
|
+
unpairedMessages: TemplateMessage[];
|
|
16
|
+
droppedMessages: TemplateMessage[];
|
|
17
|
+
}
|
|
18
|
+
export interface ConversationTurnSelection {
|
|
19
|
+
includedTurns: ConversationTurn[];
|
|
20
|
+
omittedTurns: ConversationTurn[];
|
|
21
|
+
protectedTurns: ConversationTurn[];
|
|
22
|
+
tokenCount: number;
|
|
23
|
+
protectedTokenCount: number;
|
|
24
|
+
overBudget: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface SelectConversationTurnsOptions {
|
|
27
|
+
turns: readonly ConversationTurn[];
|
|
28
|
+
maxTokenCount: number;
|
|
29
|
+
countTokens: (text: string) => number;
|
|
30
|
+
protectedTurnCount?: number;
|
|
31
|
+
materializeTurn?: (turn: ConversationTurn) => string;
|
|
32
|
+
}
|
|
33
|
+
export interface ConversationHighlightSelection {
|
|
34
|
+
includedHighlights: ConversationHighlight[];
|
|
35
|
+
omittedHighlights: ConversationHighlight[];
|
|
36
|
+
truncatedHighlights: number;
|
|
37
|
+
representedTaskIds: string[];
|
|
38
|
+
unrepresentedTaskIds: string[];
|
|
39
|
+
tokenCount: number;
|
|
40
|
+
budgetTokens: number;
|
|
41
|
+
}
|
|
42
|
+
export interface SelectConversationHighlightsOptions {
|
|
43
|
+
highlights: readonly ConversationHighlight[];
|
|
44
|
+
omittedTaskIds: readonly string[];
|
|
45
|
+
taskOrder: readonly string[];
|
|
46
|
+
maxTokenCount: number;
|
|
47
|
+
countTokens: (text: string) => number;
|
|
48
|
+
applySafetyCap?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare function getConversationMessageTaskId(message: TemplateMessage): string | undefined;
|
|
51
|
+
export declare function groupConversationTurns(messages: readonly TemplateMessage[]): GroupedConversationTurns;
|
|
52
|
+
export declare function withoutDroppedAppCards(messages: readonly TemplateMessage[]): TemplateMessage[];
|
|
53
|
+
export declare function materializeConversationTurn(turn: ConversationTurn, includeActivityLog?: boolean): string;
|
|
54
|
+
export declare function selectConversationTurns(options: SelectConversationTurnsOptions): ConversationTurnSelection;
|
|
55
|
+
export declare function buildThreadStateContext(state: ConversationThreadState | undefined): ConversationThreadState | undefined;
|
|
56
|
+
export declare function selectConversationHighlights(options: SelectConversationHighlightsOptions): ConversationHighlightSelection;
|
|
57
|
+
export interface BuildSemanticContinuityContextOptions {
|
|
58
|
+
highlights: readonly ConversationHighlight[];
|
|
59
|
+
omittedTaskIds: readonly string[];
|
|
60
|
+
representedTaskIds: readonly string[];
|
|
61
|
+
applySafetyCap?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export declare function buildSemanticContinuityContext(options: BuildSemanticContinuityContextOptions): SemanticContinuityContext;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
export declare const DEFAULT_INPUT_BUDGET_PERCENT = 60;
|
|
2
|
+
export declare const MIN_INPUT_BUDGET_PERCENT = 30;
|
|
3
|
+
export declare const MAX_INPUT_BUDGET_PERCENT = 80;
|
|
4
|
+
export declare const INPUT_BUDGET_TOKENIZER_ENCODING = "o200k_base";
|
|
5
|
+
export declare const FRESH_PROVIDER_INITIAL_INPUT_SEPARATOR = "\n\n---\n\n";
|
|
6
|
+
export declare const FRESH_PROVIDER_INITIAL_INPUT_FRAMING = "system_prompt\\n\\n---\\n\\nmessage";
|
|
7
|
+
export declare const RESUME_PROVIDER_INITIAL_INPUT_FRAMING = "message";
|
|
8
|
+
export type InputBudgetUnresolvedReason = 'invalid_input_budget_percent' | 'provider_catalog_unavailable' | 'model_not_found' | 'context_window_tokens_unavailable';
|
|
9
|
+
export type TokenizerFallbackReason = 'vendor_tokenizer_unavailable';
|
|
10
|
+
export interface ResolveInputBudgetOptions {
|
|
11
|
+
provider: string;
|
|
12
|
+
model: string;
|
|
13
|
+
inputBudgetPercent?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface TokenizerOptions {
|
|
16
|
+
provider?: string;
|
|
17
|
+
model?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface TokenizerMetadata {
|
|
20
|
+
provider: string;
|
|
21
|
+
model: string;
|
|
22
|
+
encoding: typeof INPUT_BUDGET_TOKENIZER_ENCODING;
|
|
23
|
+
exact: boolean;
|
|
24
|
+
fallbackReason?: TokenizerFallbackReason;
|
|
25
|
+
}
|
|
26
|
+
export interface ResolvedInputBudget {
|
|
27
|
+
resolved: true;
|
|
28
|
+
requestedProvider: string;
|
|
29
|
+
provider: string;
|
|
30
|
+
model: string;
|
|
31
|
+
contextWindowTokens: number;
|
|
32
|
+
inputBudgetPercent: number;
|
|
33
|
+
inputBudgetTokens: number;
|
|
34
|
+
tokenizer: TokenizerMetadata;
|
|
35
|
+
}
|
|
36
|
+
export interface UnresolvedInputBudget {
|
|
37
|
+
resolved: false;
|
|
38
|
+
requestedProvider: string;
|
|
39
|
+
provider: string;
|
|
40
|
+
model: string;
|
|
41
|
+
reason: InputBudgetUnresolvedReason;
|
|
42
|
+
inputBudgetPercent?: number;
|
|
43
|
+
tokenizer: TokenizerMetadata;
|
|
44
|
+
}
|
|
45
|
+
export type ResolveInputBudgetResult = ResolvedInputBudget | UnresolvedInputBudget;
|
|
46
|
+
export type ContextBudgetPhase = 'fresh' | 'resume';
|
|
47
|
+
export type ProviderInitialInputFraming = typeof FRESH_PROVIDER_INITIAL_INPUT_FRAMING | typeof RESUME_PROVIDER_INITIAL_INPUT_FRAMING;
|
|
48
|
+
export interface ContextBudgetLayoutCapability {
|
|
49
|
+
layoutId: string;
|
|
50
|
+
supportsSemanticContinuity: boolean;
|
|
51
|
+
slot: string | null;
|
|
52
|
+
requiredForOmittedTurns: boolean;
|
|
53
|
+
warning?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface ContextBudgetActivityDegradation {
|
|
56
|
+
taskId: string;
|
|
57
|
+
taskDistance: number;
|
|
58
|
+
action: 'reduced' | 'omitted';
|
|
59
|
+
}
|
|
60
|
+
export type ContextBudgetAssemblyErrorCode = 'INPUT_BUDGET_EXCEEDED' | 'CONTINUITY_SLOT_REQUIRED';
|
|
61
|
+
export declare class ContextBudgetLayoutError extends Error {
|
|
62
|
+
readonly layoutId: string;
|
|
63
|
+
readonly omittedTurnCount: number;
|
|
64
|
+
readonly code: "CONTINUITY_SLOT_REQUIRED";
|
|
65
|
+
constructor(message: string, layoutId: string, omittedTurnCount: number);
|
|
66
|
+
}
|
|
67
|
+
export interface ContextBudgetManifest {
|
|
68
|
+
runningInstructionAppsOmitted?: number;
|
|
69
|
+
phase: ContextBudgetPhase;
|
|
70
|
+
initialInputFraming: ProviderInitialInputFraming;
|
|
71
|
+
resolved: boolean;
|
|
72
|
+
reason?: InputBudgetUnresolvedReason;
|
|
73
|
+
requestedProvider: string;
|
|
74
|
+
requestedModel: string | null;
|
|
75
|
+
effectiveProvider: string;
|
|
76
|
+
effectiveModel: string | null;
|
|
77
|
+
contextWindowTokens: number | null;
|
|
78
|
+
inputBudgetPercent: number | null;
|
|
79
|
+
inputBudgetTokens: number | null;
|
|
80
|
+
tokenizer: TokenizerMetadata;
|
|
81
|
+
initialTokenCount: number | null;
|
|
82
|
+
finalTokenCount: number | null;
|
|
83
|
+
activityLogTokenCount: number | null;
|
|
84
|
+
activityIncludedEntries: number | null;
|
|
85
|
+
activityOmittedEntries: number | null;
|
|
86
|
+
activityRemovedForBudget: boolean;
|
|
87
|
+
activityNewestTaskTokenCap: number | null;
|
|
88
|
+
historyOriginalMessages: number;
|
|
89
|
+
historyIncludedMessages: number;
|
|
90
|
+
historyOmittedMessages: number;
|
|
91
|
+
turnOriginal: number;
|
|
92
|
+
turnIncluded: number;
|
|
93
|
+
turnOmitted: number;
|
|
94
|
+
highlightOriginal: number;
|
|
95
|
+
highlightIncluded: number;
|
|
96
|
+
highlightOmitted: number;
|
|
97
|
+
highlightTruncated: number;
|
|
98
|
+
representedOmittedTurns: number;
|
|
99
|
+
unrepresentedOmittedTurns: number;
|
|
100
|
+
activityDegraded: boolean;
|
|
101
|
+
activityIncludedTasks: number;
|
|
102
|
+
activityOmittedTasks: number;
|
|
103
|
+
activityDegradation: ContextBudgetActivityDegradation[];
|
|
104
|
+
highlightLookupFailed: boolean;
|
|
105
|
+
layoutCapability: ContextBudgetLayoutCapability;
|
|
106
|
+
overBudget: boolean;
|
|
107
|
+
overdriveProviderSuppressed?: boolean;
|
|
108
|
+
}
|
|
109
|
+
export interface TokenCountResult {
|
|
110
|
+
tokenCount: number;
|
|
111
|
+
tokenizer: TokenizerMetadata;
|
|
112
|
+
}
|
|
113
|
+
export interface TokenCounter {
|
|
114
|
+
metadata: TokenizerMetadata;
|
|
115
|
+
countTokens(text: string): number;
|
|
116
|
+
}
|
|
117
|
+
export interface FreshProviderInitialInput {
|
|
118
|
+
systemPrompt?: string | null;
|
|
119
|
+
message: string;
|
|
120
|
+
}
|
|
121
|
+
type PieceCacheEventType = 'hit' | 'miss' | 'evict' | 'full_encode';
|
|
122
|
+
interface PieceCacheEvent {
|
|
123
|
+
type: PieceCacheEventType;
|
|
124
|
+
piece?: string;
|
|
125
|
+
tokenCount?: number;
|
|
126
|
+
reason?: 'special_token';
|
|
127
|
+
}
|
|
128
|
+
type PieceCacheObserver = (event: PieceCacheEvent) => void;
|
|
129
|
+
interface TokenCounterInternalOptions {
|
|
130
|
+
pieceCacheMaxEntries?: number;
|
|
131
|
+
observePieceCache?: PieceCacheObserver;
|
|
132
|
+
}
|
|
133
|
+
export declare function normalizeInputBudgetProvider(provider: string): string;
|
|
134
|
+
export declare function resolveTokenizerMetadata(options?: TokenizerOptions): TokenizerMetadata;
|
|
135
|
+
export declare function countTokens(text: string, options?: TokenizerOptions): TokenCountResult;
|
|
136
|
+
export declare function renderFreshProviderInitialInput(input: FreshProviderInitialInput): string;
|
|
137
|
+
export declare function countFreshProviderInitialInput(input: FreshProviderInitialInput, count: (text: string) => number): number;
|
|
138
|
+
export declare function createTokenCounter(options?: TokenizerOptions): TokenCounter;
|
|
139
|
+
export declare function __createTokenCounterForTest(options?: TokenizerOptions, internalOptions?: TokenCounterInternalOptions): TokenCounter;
|
|
140
|
+
export declare function resolveInputBudget(options: ResolveInputBudgetOptions): ResolveInputBudgetResult;
|
|
141
|
+
export { DEFAULT_HIGHLIGHT_BUDGET_PERCENT, DEFAULT_PROTECTED_TURN_COUNT, MAX_ACTIVE_HIGHLIGHT_CHARS, MAX_ACTIVE_HIGHLIGHTS, MAX_THREAD_STATE_VALUE_CHARS, MAX_THREAD_TITLE_CHARS, buildSemanticContinuityContext, buildThreadStateContext, getConversationMessageTaskId, groupConversationTurns, materializeConversationTurn, selectConversationHighlights, selectConversationTurns, withoutDroppedAppCards, } from './continuity.js';
|
|
142
|
+
export type { BuildSemanticContinuityContextOptions, ConversationHighlightSelection, ConversationTurn, ConversationTurnSelection, GroupedConversationTurns, SelectConversationHighlightsOptions, SelectConversationTurnsOptions, } from './continuity.js';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './types.js';
|
|
2
2
|
export { toTaskReader } from './to-task-reader.js';
|
|
3
|
-
export { toTemplateMessages } from './to-template-messages.js';
|
|
3
|
+
export { LEGACY_UI_CARD_SAFE_SUMMARY, sanitizeLegacyUiCardText, sanitizeTemplateMessages, toTemplateMessages, } from './to-template-messages.js';
|