@gobing-ai/spur 0.3.92 → 0.3.94

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.
Files changed (119) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/pipeline-budgets.json +0 -7
  3. package/config/plugin-scripts.json +10 -0
  4. package/config/rules/boundary/test-subpath-boundary.yaml +48 -0
  5. package/config/rules/strict/runtime-boundaries.yaml +2 -1
  6. package/config/rules/structure/protected-files.yaml +4 -0
  7. package/config/templates/AGENTS.md +4 -0
  8. package/config/templates/docs/02_ROADMAP.md +2 -0
  9. package/config/templates/docs/03_ARCHITECTURE.md +3 -1
  10. package/config/templates/docs/04_DESIGN.md +2 -0
  11. package/config/templates/docs/99_PROJECT_CONSTITUTION.md +10 -2
  12. package/config/workflow-candidates.json +72 -1
  13. package/config/workflows/feature-verification.yaml +1 -0
  14. package/config/workflows/history-anatomy.yaml +2 -0
  15. package/config/workflows/idea-pipeline.yaml +67 -18
  16. package/config/workflows/pr-review.yaml +8 -0
  17. package/config/workflows/task-pipeline.yaml +171 -39
  18. package/config/workflows/wayfinder-resolution.yaml +5 -0
  19. package/config/workflows/wrapup-pipeline.yaml +55 -14
  20. package/package.json +9 -9
  21. package/plugins/sp/README.md +8 -3
  22. package/plugins/sp/commands/dev-review-session.md +4 -4
  23. package/plugins/sp/commands/dev-review.md +16 -5
  24. package/plugins/sp/commands/dev-run.md +2 -2
  25. package/plugins/sp/commands/dev-runall.md +2 -2
  26. package/plugins/sp/hooks/pi/guard-extension.ts +17 -36
  27. package/plugins/sp/lib/idea-handoff.generated.mjs +8 -4
  28. package/plugins/sp/lib/inline-run.generated.d.mts +3 -0
  29. package/plugins/sp/lib/inline-run.generated.mjs +48 -19
  30. package/plugins/sp/plugin.json +1 -1
  31. package/plugins/sp/scripts/inline-pipeline-parity-check.ts +1 -1
  32. package/plugins/sp/scripts/inline-run-setup.mjs +117 -7
  33. package/plugins/sp/scripts/inline-run-setup.ts +211 -7
  34. package/plugins/sp/scripts/quality-gate.mjs +255 -6
  35. package/plugins/sp/scripts/quality-gate.ts +425 -9
  36. package/plugins/sp/scripts/residual-scan.mjs +13 -5
  37. package/plugins/sp/scripts/residual-scan.ts +34 -7
  38. package/plugins/sp/scripts/task-diffstat.mjs +156 -0
  39. package/plugins/sp/scripts/task-diffstat.ts +229 -0
  40. package/plugins/sp/scripts/wrapup-drift-probe.mjs +181 -0
  41. package/plugins/sp/scripts/wrapup-drift-probe.ts +258 -0
  42. package/plugins/sp/scripts/wrapup-steps.mjs +60 -1
  43. package/plugins/sp/scripts/wrapup-steps.ts +89 -4
  44. package/plugins/sp/skills/brainstorm/SKILL.md +2 -0
  45. package/plugins/sp/skills/brainstorm/references/workflows.md +17 -2
  46. package/plugins/sp/skills/code-verification/SKILL.md +2 -2
  47. package/plugins/sp/skills/code-verification/references/secu-review.md +3 -2
  48. package/plugins/sp/skills/session-review/SKILL.md +11 -9
  49. package/plugins/sp/skills/spur-check/SKILL.md +112 -0
  50. package/plugins/sp/skills/spur-dev/SKILL.md +2 -1
  51. package/plugins/sp/skills/spur-dev/references/cross-cutting.md +14 -2
  52. package/plugins/sp/skills/spur-dev/references/dev-operations.md +8 -2
  53. package/plugins/sp/skills/spur-dev/references/document-authoring.md +85 -0
  54. package/plugins/sp/skills/spur-dev/references/execution-batch.md +46 -18
  55. package/plugins/sp/skills/spur-dev/references/flag-glossary.md +24 -3
  56. package/plugins/sp/skills/spur-dev/references/gate-checklists.md +3 -2
  57. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +34 -2
  58. package/plugins/sp/skills/spur-dev/references/planning-workflow.md +5 -5
  59. package/plugins/sp/skills/spur-dev/templates/design.md +31 -0
  60. package/plugins/sp/skills/spur-dev/templates/plan.md +32 -0
  61. package/plugins/sp/skills/spur-doctor/SKILL.md +60 -14
  62. package/schemas/state-machine-workflow.schema.json +4 -0
  63. package/spur.js +19577 -19822
  64. package/web/_astro/BoardApp.C02hAHPO.js +1 -0
  65. package/web/_astro/{BoardApp.CerSBgis.js → BoardApp.FTEs3-N8.js} +107 -105
  66. package/web/_astro/{TaskDetail.DCqiC-OZ.js → TaskDetail.C-GdsS-t.js} +1 -1
  67. package/web/_astro/arc.uuAf51IT.js +1 -0
  68. package/web/_astro/{architectureDiagram-3BPJPVTR.DM_vp_hO.js → architectureDiagram-3BPJPVTR.CGe629A1.js} +1 -1
  69. package/web/_astro/{blockDiagram-GPEHLZMM.DXVIiv0p.js → blockDiagram-GPEHLZMM.D1mGCq3p.js} +1 -1
  70. package/web/_astro/{c4Diagram-AAUBKEIU.BbF_zCxW.js → c4Diagram-AAUBKEIU.CMsolcde.js} +1 -1
  71. package/web/_astro/channel.fsgl7o5j.js +1 -0
  72. package/web/_astro/{chunk-2J33WTMH.CAgQHpPC.js → chunk-2J33WTMH.CrGA3fik.js} +1 -1
  73. package/web/_astro/{chunk-4BX2VUAB.BN-5tpw4.js → chunk-4BX2VUAB.DsLVVla0.js} +1 -1
  74. package/web/_astro/{chunk-55IACEB6.CnPkEEr0.js → chunk-55IACEB6.Dxc59Tfi.js} +1 -1
  75. package/web/_astro/{chunk-727SXJPM.BQzQeMVm.js → chunk-727SXJPM.CaEVE2Wy.js} +4 -4
  76. package/web/_astro/{chunk-AQP2D5EJ.B6xNyDnL.js → chunk-AQP2D5EJ.BiJ4HXeI.js} +1 -1
  77. package/web/_astro/{chunk-FMBD7UC4.C7f9Ih78.js → chunk-FMBD7UC4.Mxf1fru5.js} +1 -1
  78. package/web/_astro/{chunk-ND2GUHAM.CNV1dFXT.js → chunk-ND2GUHAM.pyOWQixH.js} +1 -1
  79. package/web/_astro/{chunk-QZHKN3VN.Cudn2TkJ.js → chunk-QZHKN3VN.BmEsg4vr.js} +1 -1
  80. package/web/_astro/{classDiagram-4FO5ZUOK.D1NwP50q.js → classDiagram-4FO5ZUOK.BHhhMFTO.js} +1 -1
  81. package/web/_astro/{classDiagram-v2-Q7XG4LA2.D1NwP50q.js → classDiagram-v2-Q7XG4LA2.BHhhMFTO.js} +1 -1
  82. package/web/_astro/{cose-bilkent-S5V4N54A.B1wSL-Xb.js → cose-bilkent-S5V4N54A.2fH4YOlp.js} +1 -1
  83. package/web/_astro/{cynefin-OW5HDTMX.BmK52w8G.js → cynefin-OW5HDTMX.C2j1_lKL.js} +1 -1
  84. package/web/_astro/{dagre-BM42HDAG.Bfy5CTDT.js → dagre-BM42HDAG.hZ2NCTdT.js} +2 -2
  85. package/web/_astro/diagram-2AECGRRQ.Bfw5_EzK.js +43 -0
  86. package/web/_astro/diagram-5GNKFQAL.Bt1V_Tmk.js +10 -0
  87. package/web/_astro/{diagram-KO2AKTUF.CW_vMJ4z.js → diagram-KO2AKTUF.DEk-YFwp.js} +3 -3
  88. package/web/_astro/{diagram-LMA3HP47.B_8ZGF67.js → diagram-LMA3HP47.CDjndtQm.js} +1 -1
  89. package/web/_astro/{diagram-OG6HWLK6.BppnHsdS.js → diagram-OG6HWLK6.cFnUHScG.js} +1 -1
  90. package/web/_astro/{erDiagram-TEJ5UH35.BEuHXcjJ.js → erDiagram-TEJ5UH35.DlhYp7NV.js} +5 -5
  91. package/web/_astro/{flowDiagram-I6XJVG4X.CH-UlnGr.js → flowDiagram-I6XJVG4X.DNTpsxfx.js} +4 -4
  92. package/web/_astro/{ganttDiagram-6RSMTGT7.BO81S85v.js → ganttDiagram-6RSMTGT7.DC_p36PI.js} +1 -1
  93. package/web/_astro/{gitGraphDiagram-PVQCEYII.XnPxPPZN.js → gitGraphDiagram-PVQCEYII.DkEqNI0P.js} +1 -1
  94. package/web/_astro/{infoDiagram-5YYISTIA.JyjYRu_T.js → infoDiagram-5YYISTIA.CrjioCTG.js} +1 -1
  95. package/web/_astro/{ishikawaDiagram-YF4QCWOH.BBRBF-Fo.js → ishikawaDiagram-YF4QCWOH.BcK0CN8n.js} +5 -5
  96. package/web/_astro/{journeyDiagram-JHISSGLW.C_iymSyp.js → journeyDiagram-JHISSGLW.p0CbBDX1.js} +1 -1
  97. package/web/_astro/{kanban-definition-UN3LZRKU.DdfW-Oqt.js → kanban-definition-UN3LZRKU.puHIFt6J.js} +7 -7
  98. package/web/_astro/{linear.C2_IkbZT.js → linear.Bb-3a1d7.js} +1 -1
  99. package/web/_astro/mermaid.core.CJDgXOJs.js +301 -0
  100. package/web/_astro/{mindmap-definition-RKZ34NQL.DAZIxQSK.js → mindmap-definition-RKZ34NQL.BoAZEI9t.js} +2 -2
  101. package/web/_astro/{pieDiagram-4H26LBE5.CN8sIhKM.js → pieDiagram-4H26LBE5.CJNSdqY7.js} +3 -3
  102. package/web/_astro/{quadrantDiagram-W4KKPZXB.3dGcX5GP.js → quadrantDiagram-W4KKPZXB.DtTy7_0Z.js} +1 -1
  103. package/web/_astro/{requirementDiagram-4Y6WPE33.BV2y4dd6.js → requirementDiagram-4Y6WPE33.BNYV98Xg.js} +3 -3
  104. package/web/_astro/{sankeyDiagram-5OEKKPKP.Cqo15Tvo.js → sankeyDiagram-5OEKKPKP.DRq9DGHp.js} +4 -4
  105. package/web/_astro/{sequenceDiagram-3UESZ5HK.CROCPMJB.js → sequenceDiagram-3UESZ5HK.B7KdBFCm.js} +1 -1
  106. package/web/_astro/{stateDiagram-AJRCARHV.RfXZrkFE.js → stateDiagram-AJRCARHV.CD62ZJ2H.js} +1 -1
  107. package/web/_astro/{stateDiagram-v2-BHNVJYJU.CPXmbBs9.js → stateDiagram-v2-BHNVJYJU.CeVk1TAj.js} +1 -1
  108. package/web/_astro/{timeline-definition-PNZ67QCA.DdgKTiO8.js → timeline-definition-PNZ67QCA.C_ZPA5tT.js} +3 -3
  109. package/web/_astro/{vennDiagram-CIIHVFJN.CPNVSHF1.js → vennDiagram-CIIHVFJN.CrThO_FQ.js} +5 -5
  110. package/web/_astro/{wardleyDiagram-YWT4CUSO.CQhA0Jyr.js → wardleyDiagram-YWT4CUSO.DSZCA5nl.js} +3 -3
  111. package/web/_astro/{xychartDiagram-2RQKCTM6.n61BWyy4.js → xychartDiagram-2RQKCTM6.KI7baTuk.js} +1 -1
  112. package/web/index.html +1 -1
  113. package/config/workflows/decision-routing-example.yaml +0 -134
  114. package/web/_astro/BoardApp.eoTz0pZs.js +0 -1
  115. package/web/_astro/arc.CPwg6Rw0.js +0 -1
  116. package/web/_astro/channel.MYZLKNwy.js +0 -1
  117. package/web/_astro/diagram-2AECGRRQ.DhNnvUvX.js +0 -43
  118. package/web/_astro/diagram-5GNKFQAL.lTX5KwnS.js +0 -10
  119. package/web/_astro/mermaid.core.GAOYeSR0.js +0 -303
@@ -284,7 +284,9 @@ params: ${params}`);if(this.query=query,this.params=params,this.cause=cause,Erro
284
284
  AND ${queueJobs.attemptToken} IS NULL`)).changes}async failExpiredJobs(){let now=this.now();return(await this.db.update(queueJobs).set({status:"failed",lastError:"Job expired — not processed before TTL deadline",updatedAt:now,attempts:sql`${queueJobs.attempts} + 1`,processingAt:null}).where(sql`${queueJobs.status} = 'pending' AND ${queueJobs.expiresAt} IS NOT NULL AND ${queueJobs.expiresAt} <= ${now}`)).changes}}});var exports_dist={};__export(exports_dist,{embeddedMigrations:()=>embeddedMigrations,createDbAdapter:()=>createDbAdapter,compilePredicate:()=>compilePredicate,compileOrderBy:()=>compileOrderBy,applyMigrations:()=>applyMigrations,RequestKeyConflictError:()=>RequestKeyConflictError,QueueJobDao:()=>QueueJobDao,InboxMessageDao:()=>InboxMessageDao,EntityDao:()=>EntityDao,BaseDao:()=>BaseDao});var init_dist4=__esm(()=>{init_base_dao();init_embedded_migrations();init_entity_dao();init_inbox_message_dao();init_migrate();init_query_spec();init_queue_job_dao()});function sqlExpressionToText(value){if(typeof value!=="object"||value===null||!("queryChunks"in value))return;let chunks=value.queryChunks;if(!chunks)return;return chunks.map((chunk)=>{if("value"in chunk&&typeof chunk.value==="string")return chunk.value;if("input"in chunk&&chunk.input!==void 0)return String(chunk.input);return String(chunk.value??"?")}).join("")}function getDrizzleTableName(table3){return String(table3[Symbol.for("drizzle:Name")])}function quoteIdent(name){return`"${name.replace(/"/g,'""')}"`}function defaultToSql(value){if(value==null)return value===null?"NULL":void 0;if(typeof value==="number")return String(value);if(typeof value==="string")return`'${value.replace(/'/g,"''")}'`;if(typeof value==="boolean")return value?"1":"0";return sqlExpressionToText(value)??String(value)}function generateCreateTableSql(table3){let config3=getTableConfig(table3),columnDefs=[],tableConstraints=[],compositeUniqueCols=new Set;for(let uc of config3.uniqueConstraints)if(uc.columns.length>1)for(let col of uc.columns)compositeUniqueCols.add(col.name);let compositePkCols=new Set;for(let pk of config3.primaryKeys)if(pk.columns.length>1)for(let col of pk.columns)compositePkCols.add(col.name);for(let col of config3.columns){let parts=[quoteIdent(col.name),col.getSQLType()];if(col.primary&&!compositePkCols.has(col.name))parts.push("PRIMARY KEY");if(col.notNull)parts.push("NOT NULL");if(col.hasDefault&&col.default!==void 0){let sqlDefault=defaultToSql(col.default);if(sqlDefault!==void 0)parts.push(`DEFAULT ${sqlDefault}`)}if(col.isUnique&&!compositeUniqueCols.has(col.name))parts.push("UNIQUE");columnDefs.push(parts.join(" "))}for(let pk of config3.primaryKeys)if(pk.columns.length>1){let pkCols=pk.columns.map((c3)=>quoteIdent(c3.name)).join(", ");tableConstraints.push(`PRIMARY KEY (${pkCols})`)}for(let uc of config3.uniqueConstraints)if(uc.columns.length>1){let cols=uc.columns.map((c3)=>quoteIdent(c3.name)).join(", ");tableConstraints.push(`UNIQUE (${cols})`)}for(let fk of config3.foreignKeys){let ref=fk.reference(),localCols=ref.columns.map((c3)=>quoteIdent(c3.name)).join(", "),foreignCols=ref.foreignColumns.map((c3)=>quoteIdent(c3.name)).join(", "),foreignTableName=getDrizzleTableName(ref.foreignTable),constraint=`FOREIGN KEY (${localCols}) REFERENCES ${quoteIdent(foreignTableName)} (${foreignCols})`;if(fk.onDelete)constraint+=` ON DELETE ${fk.onDelete}`;if(fk.onUpdate)constraint+=` ON UPDATE ${fk.onUpdate}`;tableConstraints.push(constraint)}let allDefs=[...columnDefs,...tableConstraints];return`CREATE TABLE IF NOT EXISTS ${quoteIdent(config3.name)} (
285
285
  ${allDefs.join(`,
286
286
  `)}
287
- )`}var init_ddl=__esm(()=>{init_sqlite_core()});var init_classic=__esm(()=>{init_external();init_external()});var init_v4=__esm(()=>{init_classic()});function isColumnType(column2,columnTypes){return columnTypes.includes(column2.columnType)}function isWithEnum(column2){return"enumValues"in column2&&Array.isArray(column2.enumValues)&&column2.enumValues.length>0}function columnToSchema(column2,factory){let z$1=factory?.zodInstance??exports_external,coerce=factory?.coerce??{},schema;if(isWithEnum(column2))schema=column2.enumValues.length?z$1.enum(column2.enumValues):z$1.string();if(!schema){if(isColumnType(column2,["PgGeometry","PgPointTuple"]))schema=z$1.tuple([z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgGeometryObject","PgPointObject"]))schema=z$1.object({x:z$1.number(),y:z$1.number()});else if(isColumnType(column2,["PgHalfVector","PgVector"]))schema=z$1.array(z$1.number()),schema=column2.dimensions?schema.length(column2.dimensions):schema;else if(isColumnType(column2,["PgLine"]))schema=z$1.tuple([z$1.number(),z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgLineABC"]))schema=z$1.object({a:z$1.number(),b:z$1.number(),c:z$1.number()});else if(isColumnType(column2,["PgArray"]))schema=z$1.array(columnToSchema(column2.baseColumn,factory)),schema=column2.size?schema.length(column2.size):schema;else if(column2.dataType==="array")schema=z$1.array(z$1.any());else if(column2.dataType==="number")schema=numberColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="bigint")schema=bigintColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="boolean")schema=coerce===!0||coerce.boolean?z$1.coerce.boolean():z$1.boolean();else if(column2.dataType==="date")schema=coerce===!0||coerce.date?z$1.coerce.date():z$1.date();else if(column2.dataType==="string")schema=stringColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="json")schema=jsonSchema;else if(column2.dataType==="custom")schema=z$1.any();else if(column2.dataType==="buffer")schema=bufferSchema}if(!schema)schema=z$1.any();return schema}function numberColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min,max,integer4=!1;if(isColumnType(column2,["MySqlTinyInt","SingleStoreTinyInt"]))min=unsigned?0:CONSTANTS.INT8_MIN,max=unsigned?CONSTANTS.INT8_UNSIGNED_MAX:CONSTANTS.INT8_MAX,integer4=!0;else if(isColumnType(column2,["PgSmallInt","PgSmallSerial","MySqlSmallInt","SingleStoreSmallInt"]))min=unsigned?0:CONSTANTS.INT16_MIN,max=unsigned?CONSTANTS.INT16_UNSIGNED_MAX:CONSTANTS.INT16_MAX,integer4=!0;else if(isColumnType(column2,["PgReal","MySqlFloat","MySqlMediumInt","SingleStoreMediumInt","SingleStoreFloat"]))min=unsigned?0:CONSTANTS.INT24_MIN,max=unsigned?CONSTANTS.INT24_UNSIGNED_MAX:CONSTANTS.INT24_MAX,integer4=isColumnType(column2,["MySqlMediumInt","SingleStoreMediumInt"]);else if(isColumnType(column2,["PgInteger","PgSerial","MySqlInt","SingleStoreInt"]))min=unsigned?0:CONSTANTS.INT32_MIN,max=unsigned?CONSTANTS.INT32_UNSIGNED_MAX:CONSTANTS.INT32_MAX,integer4=!0;else if(isColumnType(column2,["PgDoublePrecision","MySqlReal","MySqlDouble","SingleStoreReal","SingleStoreDouble","SQLiteReal"]))min=unsigned?0:CONSTANTS.INT48_MIN,max=unsigned?CONSTANTS.INT48_UNSIGNED_MAX:CONSTANTS.INT48_MAX;else if(isColumnType(column2,["PgBigInt53","PgBigSerial53","MySqlBigInt53","MySqlSerial","SingleStoreBigInt53","SingleStoreSerial","SQLiteInteger"]))unsigned=unsigned||isColumnType(column2,["MySqlSerial","SingleStoreSerial"]),min=unsigned?0:Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER,integer4=!0;else if(isColumnType(column2,["MySqlYear","SingleStoreYear"]))min=1901,max=2155,integer4=!0;else min=Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER;let schema=coerce===!0||coerce?.number?integer4?z2.coerce.number():z2.coerce.number().int():integer4?z2.int():z2.number();return schema=schema.gte(min).lte(max),schema}function bigintColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min=unsigned?0n:CONSTANTS.INT64_MIN,max=unsigned?CONSTANTS.INT64_UNSIGNED_MAX:CONSTANTS.INT64_MAX;return(coerce===!0||coerce?.bigint?z2.coerce.bigint():z2.bigint()).gte(min).lte(max)}function stringColumnToSchema(column2,z2,coerce){if(isColumnType(column2,["PgUUID"]))return z2.uuid();let max,regex,fixed=!1;if(isColumnType(column2,["PgVarchar","SQLiteText"]))max=column2.length;else if(isColumnType(column2,["MySqlVarChar","SingleStoreVarChar"]))max=column2.length??CONSTANTS.INT16_UNSIGNED_MAX;else if(isColumnType(column2,["MySqlText","SingleStoreText"]))if(column2.textType==="longtext")max=CONSTANTS.INT32_UNSIGNED_MAX;else if(column2.textType==="mediumtext")max=CONSTANTS.INT24_UNSIGNED_MAX;else if(column2.textType==="text")max=CONSTANTS.INT16_UNSIGNED_MAX;else max=CONSTANTS.INT8_UNSIGNED_MAX;if(isColumnType(column2,["PgChar","MySqlChar","SingleStoreChar"]))max=column2.length,fixed=!0;if(isColumnType(column2,["PgBinaryVector"]))regex=/^[01]+$/,max=column2.dimensions;let schema=coerce===!0||coerce?.string?z2.coerce.string():z2.string();return schema=regex?schema.regex(regex):schema,max&&fixed?schema.length(max):max?schema.max(max):schema}function getColumns(tableLike){return isTable(tableLike)?getTableColumns(tableLike):getViewSelectedFields(tableLike)}function handleColumns(columns2,refinements,conditions2,factory){let columnSchemas={};for(let[key,selected]of Object.entries(columns2)){if(!is(selected,Column)&&!is(selected,SQL)&&!is(selected,SQL.Aliased)&&typeof selected==="object"){let columns3=isTable(selected)||isView(selected)?getColumns(selected):selected;columnSchemas[key]=handleColumns(columns3,refinements[key]??{},conditions2,factory);continue}let refinement=refinements[key];if(refinement!==void 0&&typeof refinement!=="function"){columnSchemas[key]=refinement;continue}let column2=is(selected,Column)?selected:void 0,schema=column2?columnToSchema(column2,factory):exports_external.any(),refined=typeof refinement==="function"?refinement(schema):schema;if(conditions2.never(column2))continue;else columnSchemas[key]=refined;if(column2){if(conditions2.nullable(column2))columnSchemas[key]=columnSchemas[key].nullable();if(conditions2.optional(column2))columnSchemas[key]=columnSchemas[key].optional()}}return exports_external.object(columnSchemas)}function handleEnum(enum_,factory){return(factory?.zodInstance??exports_external).enum(enum_.enumValues)}var CONSTANTS,isPgEnum2,literalSchema,jsonSchema,bufferSchema,selectConditions,insertConditions,createSelectSchema=(entity2,refine2)=>{if(isPgEnum2(entity2))return handleEnum(entity2);let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},selectConditions)},createInsertSchema=(entity2,refine2)=>{let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},insertConditions)};var init_drizzle_zod=__esm(()=>{init_v4();init_drizzle_orm();CONSTANTS={INT8_MIN:-128,INT8_MAX:127,INT8_UNSIGNED_MAX:255,INT16_MIN:-32768,INT16_MAX:32767,INT16_UNSIGNED_MAX:65535,INT24_MIN:-8388608,INT24_MAX:8388607,INT24_UNSIGNED_MAX:16777215,INT32_MIN:-2147483648,INT32_MAX:2147483647,INT32_UNSIGNED_MAX:4294967295,INT48_MIN:-140737488355328,INT48_MAX:140737488355327,INT48_UNSIGNED_MAX:281474976710655,INT64_MIN:-9223372036854775808n,INT64_MAX:9223372036854775807n,INT64_UNSIGNED_MAX:18446744073709551615n};isPgEnum2=isWithEnum,literalSchema=exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()]),jsonSchema=exports_external.union([literalSchema,exports_external.record(exports_external.string(),exports_external.any()),exports_external.array(exports_external.any())]),bufferSchema=exports_external.custom((v)=>v instanceof Buffer);selectConditions={never:()=>!1,optional:()=>!1,nullable:(column2)=>!column2.notNull},insertConditions={never:(column2)=>column2?.generated?.type==="always"||column2?.generatedIdentity?.type==="always",optional:(column2)=>!column2.notNull||column2.notNull&&column2.hasDefault,nullable:(column2)=>!column2.notNull}});function defineTable(name,columns2){let table3=sqliteTable(name,columns2),insert2,select3,ddl;return{table:table3,get insertSchema(){if(insert2===void 0)insert2=createInsertSchema(table3);return insert2},get selectSchema(){if(select3===void 0)select3=createSelectSchema(table3);return select3},get createTableSql(){if(ddl===void 0)ddl=generateCreateTableSql(table3);return ddl}}}var init_define_table=__esm(()=>{init_sqlite_core();init_drizzle_zod();init_ddl()});var init_schema=__esm(()=>{init_sqlite_core();init_define_table();init_common3()});function getProcessEnv(){return getEnvVars()}function interpolateEnv(value){return value.replace(ENV_INTERPOLATION_RE,(_match,name)=>getEnvVar(name)??`\${${name}}`)}function interpolateTree(value){if(typeof value==="string")return interpolateEnv(value);if(Array.isArray(value))return value.map(interpolateTree);if(isPlainObject4(value))return Object.fromEntries(Object.entries(value).map(([key,child])=>[key,interpolateTree(child)]));return value}function buildConfigFromObject(raw,options={}){let interpolated=interpolateTree(raw),merged=options.overrides?deepMerge(interpolated,options.overrides):interpolated,result=configSchema2.safeParse(merged);if(!result.success)throw new ConfigLoadError("Config validation failed",result.error.issues);return deepFreeze(result.data)}function isPlainObject4(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function deepFreeze(obj){Object.freeze(obj);for(let value of Object.values(obj))if(Array.isArray(value)){Object.freeze(value);for(let item of value)if(isPlainObject4(item)&&!Object.isFrozen(item))deepFreeze(item)}else if(isPlainObject4(value)&&!Object.isFrozen(value))deepFreeze(value);return obj}var configSchema2,ENV_INTERPOLATION_RE,ConfigLoadError;var init_config2=__esm(()=>{init_dist();init_dist2();init_zod();configSchema2=exports_external.object({app:exports_external.object({name:exports_external.string().default("app"),env:exports_external.enum(["development","staging","production","test"]).default("development"),port:exports_external.number().int().positive().default(3000)}).default({name:"app",env:"development",port:3000}),database:exports_external.object({url:exports_external.string().default(":memory:")}).default({url:":memory:"}),logging:exports_external.object({level:exports_external.enum(["trace","debug","info","warn","error","fatal"]).default("info"),console:exports_external.boolean().default(!0),file:exports_external.boolean().default(!1),filePath:exports_external.string().optional(),json:exports_external.boolean().default(!1)}).default({level:"info",console:!0,file:!1,json:!1})}),ENV_INTERPOLATION_RE=/\$\{([A-Z_][A-Z0-9_]*)\}/g;ConfigLoadError=class ConfigLoadError extends Error{issues;constructor(message,issues=[]){super(message);this.name="ConfigLoadError",this.issues=issues}}});import{appendFileSync as appendFileSync2,cpSync,createReadStream as createReadStream2,createWriteStream as createWriteStream2,existsSync,mkdirSync,readdirSync,readFileSync as readFileSync3,realpathSync,renameSync,rmSync,statSync as statSync2,writeFileSync as writeFileSync2}from"node:fs";import{dirname,resolve as resolvePath2}from"node:path";function createNodeFileSystem2(root,paths){let projectRoot=root??findProjectRoot2(paths?.cwd??process.cwd());return{getProjectRoot:()=>projectRoot,resolve:(...segments)=>resolvePath2(projectRoot,...segments),exists:(path7)=>existsSync(path7),readFile:(path7)=>readFileSync3(path7,"utf-8"),readFileStream:async function*(path7){let stream=createReadStream2(path7,{encoding:"utf-8"}),buffer="";for await(let chunk of stream){buffer+=chunk;let lines=buffer.split(/\r?\n/);buffer=lines.pop()??"";for(let line of lines)yield line}if(buffer.length>0)yield buffer},writeFile:(path7,content)=>{ensureParentDir(path7),writeFileSync2(path7,content,"utf-8")},appendFile:(path7,content)=>{ensureParentDir(path7),appendFileSync2(path7,content,"utf-8")},ensureDir:(path7)=>{mkdirSync(path7,{recursive:!0})},readDir:(path7)=>readdirSync(path7),deleteFile:(path7)=>{rmSync(path7,{recursive:!0,force:!0})},rename:(src,dest)=>{renameSync(src,dest)},copy:(src,dest)=>{cpSync(src,dest,{recursive:!0})},createWriteStream:(path7)=>{return ensureParentDir(path7),createWriteStream2(path7,{flags:"a"})},stat:(path7)=>{try{let s2=statSync2(path7);return{isFile:()=>s2.isFile(),isDirectory:()=>s2.isDirectory(),size:s2.size,mtimeMs:s2.mtimeMs}}catch{return null}},realPath:(path7)=>realpathSync(path7)}}function ensureParentDir(filePath){let dir=dirname(filePath);if(!existsSync(dir))mkdirSync(dir,{recursive:!0})}function findProjectRoot2(startDir){let dir=resolvePath2(startDir),root=resolvePath2("/");while(dir!==root){if(existsSync(resolvePath2(dir,"bun.lock"))||existsSync(resolvePath2(dir,"package.json")))return dir;let parent=resolvePath2(dir,"..");if(parent===dir)break;dir=parent}return startDir}var init_file_system_node=()=>{};var DbModuleNotInstalledError2;var init_db_errors=__esm(()=>{DbModuleNotInstalledError2=class DbModuleNotInstalledError2 extends Error{constructor(message="@gobing-ai/ts-db is not installed. It is an optional peer of @gobing-ai/ts-runtime, required only for createDbAdapter on node-bun. Install it (`bun add @gobing-ai/ts-db`) or, when bundling, mark `@gobing-ai/ts-db` external.",options){super(message,options);this.name="DbModuleNotInstalledError"}}});function resolveDeadline(optionTimeout,defaultTimeout){if(optionTimeout===null)return null;let candidate=optionTimeout===void 0?defaultTimeout:optionTimeout;if(candidate===void 0||candidate===null)return candidate;if(!Number.isInteger(candidate)||candidate<=0||candidate>2147483647)throw TypeError(`Process timeout must be a positive integer within the native timer range (1-2147483647 ms), got ${String(candidate)}`);return candidate}function resolveKillGraceMs(optionGraceMs){if(optionGraceMs===void 0)return 5000;if(!Number.isInteger(optionGraceMs)||optionGraceMs<0||optionGraceMs>2147483647)throw TypeError(`Process killGraceMs must be a non-negative integer within the native timer range (0-2147483647 ms), got ${String(optionGraceMs)}`);return optionGraceMs}function groupExists(pid){try{return process.kill(-pid,0),!0}catch(error51){return error51.code==="EPERM"}}function signalGroup(pid,signal){try{return process.kill(-pid,signal),!0}catch{return!1}}async function waitForGroupExit(pid,budgetMs){let giveUpAt=Date.now()+budgetMs;while(groupExists(pid)){if(Date.now()>=giveUpAt)return!1;await new Promise((resolve)=>setTimeout(resolve,25))}return!0}async function reapProcessGroup(pid,graceMs){if(!signalGroup(pid,"SIGTERM"))return!1;if(await waitForGroupExit(pid,graceMs))return!0;return signalGroup(pid,"SIGKILL"),await waitForGroupExit(pid,2000),!0}function ownProcessGroupLifecycle(ownership){let{pid,graceMs}=ownership,trigger,termination,timer,initiate=(reason)=>{if(trigger!==void 0)return;trigger=reason,termination=reapProcessGroup(pid,graceMs)};if(ownership.deadlineMs!==void 0)timer=setTimeout(()=>initiate("timeout"),ownership.deadlineMs);let onAbort=()=>initiate("cancelled");if(ownership.signal!==void 0)if(ownership.signal.aborted)onAbort();else ownership.signal.addEventListener("abort",onAbort,{once:!0});return{finish:async()=>{if(trigger===void 0){await reapProcessGroup(pid,graceMs);return}return await termination?trigger:void 0},stop:()=>{if(timer!==void 0)clearTimeout(timer);ownership.signal?.removeEventListener("abort",onAbort)}}}import{isatty}from"node:tty";function processEventSeverity(reason,exitCode){if(reason==="error")return"error";if(reason==="timeout"||reason==="cancelled")return"warning";if(exitCode!==null&&exitCode!==0)return"warning";return"info"}function resolveChildEnv(env2,envMode){if(envMode==="replace")return env2;let merged={};for(let[key,value]of Object.entries(getProcessEnv()))if(value!==void 0)merged[key]=value;return{...merged,...env2}}class NodeProcessExecutor2{config;constructor(config3={}){this.config=config3}async run(options){return this.trace("process.run",()=>this.runUntraced(options))}async runUntraced(options){let args=options.args??[],deadline=resolveDeadline(options.timeout,this.config.defaultTimeout),killGraceMs=resolveKillGraceMs(options.killGraceMs),groupOwned=process.platform!=="win32"&&(typeof deadline==="number"||options.signal!==void 0),execaOptions=buildExecaOptions({cwd:options.cwd??this.config.paths?.cwd,env:options.env,timeout:typeof deadline==="number"?deadline:void 0,maxOutput:options.maxOutput??this.config.defaultMaxOutput,rejectOnError:options.rejectOnError??!1,outputPolicy:this.config.output,forceBuffered:options.forceBuffered??!1,signal:options.signal,groupOwned}),startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"one-shot",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let ownership;try{let subprocess=execa(options.command,args,execaOptions);if(groupOwned&&subprocess.pid!==void 0)ownership=ownProcessGroupLifecycle({pid:subprocess.pid,deadlineMs:typeof deadline==="number"?deadline:void 0,signal:options.signal,graceMs:killGraceMs});if(subprocess.pid!==void 0){if(this.config.registry?.update(registryId,{pid:subprocess.pid}),options.onSpawn!==void 0)try{options.onSpawn(subprocess.pid)}catch{}}let stopOwnedTermination=()=>ownership?.stop();observeOutput(subprocess.stdout,"stdout",options.onOutput),observeOutput(subprocess.stderr,"stderr",options.onOutput);let result=await subprocess.finally(stopOwnedTermination),ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:result.exitCode??null,stdout:asString(result.stdout),stderr:asString(result.stderr),...result.signalDescription!==void 0?{signal:result.signalDescription}:{},durationMs:result.durationMs,outcome:ownedOutcome??(result.signalDescription!==void 0?"signal":"exit")};return this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,result),processResult}catch(error51){let failed=error51,ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:failed.exitCode??null,stdout:asString(failed.stdout),stderr:asString(failed.stderr),...failed.signalDescription!==void 0?{signal:failed.signalDescription}:failed.signal!==void 0?{signal:failed.signal}:{},durationMs:failed.durationMs??Date.now()-startedAt,outcome:ownedOutcome??classifyFailedCompletion(failed)};if(this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,error51,error51),options.rejectOnError)throw error51;return processResult}}runStreaming(options){let args=options.args??[],startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"other",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});try{this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let subprocess=Bun.spawn({cmd:[options.command,...args],stdin:"pipe",stdout:"pipe",stderr:"pipe",...options.cwd!==void 0?{cwd:options.cwd}:{},...options.env!==void 0?{env:resolveChildEnv(options.env,options.envMode)}:{}}),pipe2=new BunPipeProcess(subprocess);if(pipe2.pid!==null)this.config.registry?.update(registryId,{pid:pipe2.pid});return new ObservedPipeProcess(pipe2,this.config.events,{command:options.command,args,startedAt,registry:this.config.registry,registryId,...options.label!==void 0?{label:options.label}:{}})}catch(error51){throw this.completeRegistry(registryId,null),this.emitProcessEvent("process.exited",{command:options.command,args,exitCode:null,durationMs:0,reason:"error",timestamp:new Date().toISOString(),severity:processEventSeverity("error",null),...options.label!==void 0?{label:options.label}:{},error:errorMessage(error51)}),error51}}async trace(name,fn){if(this.config.tracer===void 0)return await fn();return await this.config.tracer.traceAsync(name,async()=>await fn())}beginRegistry(command,args,meta3){let registry2=this.config.registry;if(!registry2)return"";return registry2.begin({command,args,source:meta3.source,startedAt:meta3.startedAt,...meta3.label!==void 0?{label:meta3.label}:{},...meta3.teamId!==void 0?{teamId:meta3.teamId}:{},...meta3.agentId!==void 0?{agentId:meta3.agentId}:{}})}completeRegistry(id,exitCode,pid){if(!id||!this.config.registry)return;this.config.registry.complete(id,{exitCode,...pid!==void 0?{pid}:{}})}emitExitedFromResult(options,result,completion,error51){let reason=result.outcome??(isTimedOut(completion)?"timeout":result.signal!==void 0?"signal":error51?"error":"exit");this.emitProcessEvent("process.exited",{command:result.command,args:result.args,exitCode:result.exitCode,...result.signal!==void 0?{signal:result.signal}:{},durationMs:result.durationMs,reason,timestamp:new Date().toISOString(),severity:processEventSeverity(reason,result.exitCode),...options.label!==void 0?{label:options.label}:{},...error51!==void 0?{error:errorMessage(error51)}:{}})}emitProcessEvent(event,detail){this.config.events?.emit(event,detail)}}class ObservedPipeProcess{inner;killedWith;exited;constructor(inner,events,context2){this.inner=inner,this.exited=inner.exited.then((exitCode)=>{if(context2.registry&&context2.registryId)context2.registry.complete(context2.registryId,{exitCode,...inner.pid!==null?{pid:inner.pid}:{}});return events?.emit("process.exited",{command:context2.command,args:context2.args,exitCode,...this.killedWith!==void 0?{signal:String(this.killedWith)}:{},durationMs:Date.now()-context2.startedAt,reason:this.killedWith!==void 0?"signal":"exit",timestamp:new Date().toISOString(),severity:processEventSeverity(this.killedWith!==void 0?"signal":"exit",exitCode),...context2.label!==void 0?{label:context2.label}:{}}),exitCode})}get pid(){return this.inner.pid}get stdout(){return this.inner.stdout}get stderr(){return this.inner.stderr}writeStdin(input){this.inner.writeStdin(input)}endStdin(){this.inner.endStdin()}kill(signal){this.killedWith=signal,this.inner.kill(signal)}}class BunPipeProcess{subprocess;writer;constructor(subprocess){this.subprocess=subprocess,this.writer=subprocess.stdin}get pid(){return this.subprocess.pid??null}get stdout(){return isReadableStream3(this.subprocess.stdout)?this.subprocess.stdout:null}get stderr(){return isReadableStream3(this.subprocess.stderr)?this.subprocess.stderr:null}get exited(){return this.subprocess.exited}writeStdin(input){this.writer.write(input),this.writer.flush?.()}endStdin(){this.writer.end?.()}kill(signal){this.subprocess.kill(signal)}}function buildExecaOptions(opts){let mode=opts.forceBuffered?"buffered":opts.outputPolicy?.mode??"buffered",streamToTerminal=mode==="stream"&&(opts.outputPolicy?.mode==="stream"?opts.outputPolicy.isTTY??process.stdout.isTTY??isatty(1):!1);return{reject:opts.rejectOnError,stdin:"ignore",stripFinalNewline:!0,...mode==="pipe"?{stdout:"pipe",stderr:"pipe"}:streamToTerminal?{stdout:["inherit","pipe"],stderr:["inherit","pipe"]}:{all:!0},...opts.cwd!==void 0?{cwd:opts.cwd}:{},...opts.env!==void 0?{env:opts.env}:{},...opts.timeout!==void 0&&!opts.groupOwned?{timeout:opts.timeout}:{},...opts.maxOutput!==void 0?{maxBuffer:opts.maxOutput}:{},...opts.groupOwned?{detached:!0}:{},...opts.signal!==void 0&&!opts.groupOwned?{cancelSignal:opts.signal}:{}}}function classifyFailedCompletion(error51){if(error51.timedOut===!0)return"timeout";if(error51.isCanceled===!0)return"cancelled";if(error51.isTerminated===!0||error51.signalDescription!==void 0||error51.signal!==void 0)return"signal";return"error"}function observeOutput(stream,name,observer){if(!stream||!observer)return;let decoder=new TextDecoder,emit=(chunk)=>{try{observer({stream:name,chunk,timestamp:new Date().toISOString()})}catch{}};stream.on("data",(chunk)=>{emit(typeof chunk==="string"?chunk:decoder.decode(chunk,{stream:!0}))}),stream.on("end",()=>{let tail=decoder.decode();if(tail.length>0)emit(tail)})}function asString(value){if(typeof value==="string")return value;if(value instanceof Uint8Array)return new TextDecoder().decode(value);if(Array.isArray(value))return value.map(String).join("");return""}function isReadableStream3(value){return value instanceof ReadableStream}function isTimedOut(error51){return typeof error51==="object"&&error51!==null&&"timedOut"in error51&&error51.timedOut===!0}function errorMessage(error51){return error51 instanceof Error?error51.message:String(error51)}var init_process_executor=__esm(()=>{init_execa();init_config2()});import{Database as Database3}from"bun:sqlite";var init_bun_sqlite4=()=>{};var inboxMessages2;var init_inbox_messages2=__esm(()=>{init_sqlite_core();inboxMessages2=sqliteTable("inbox_messages",{id:text("id").primaryKey(),fromId:text("from_id"),toId:text("to_id").notNull(),body:text("body").notNull(),status:text("status").notNull().default("queued"),inReplyTo:text("in_reply_to"),createdAt:integer2("created_at").notNull(),updatedAt:integer2("updated_at").notNull(),deliveredAt:integer2("delivered_at"),injectAttempts:integer2("inject_attempts").notNull().default(0),injectError:text("inject_error"),requestKey:text("request_key")},(table3)=>[index("idx_inbox_messages_to_status").on(table3.toId,table3.status)])});function nowTimestamp2(){return Date.now()}function buildStandardColumns2(){return{createdAt:integer2("created_at").notNull().$defaultFn(nowTimestamp2).default(0),updatedAt:integer2("updated_at").notNull().$defaultFn(nowTimestamp2).default(0)}}function buildStandardColumnsWithSoftDelete2(){return{...buildStandardColumns2(),inUsed:integer2("in_used").notNull().default(1)}}function buildAppendOnlyColumns2(){return{createdAt:integer2("created_at").notNull().$defaultFn(nowTimestamp2).default(0)}}var standardColumns2,standardColumnsWithSoftDelete2,appendOnlyColumns2;var init_common4=__esm(()=>{init_sqlite_core();standardColumns2=buildStandardColumns2();standardColumnsWithSoftDelete2=buildStandardColumnsWithSoftDelete2();appendOnlyColumns2=buildAppendOnlyColumns2()});var queueJobs2;var init_queue_jobs2=__esm(()=>{init_sqlite_core();init_common4();queueJobs2=sqliteTable("queue_jobs",{id:text("id").primaryKey(),type:text("type").notNull(),payload:text("payload").notNull(),status:text("status").notNull().default("pending"),attempts:integer2("attempts").notNull().default(0),maxRetries:integer2("max_retries").notNull().default(3),...standardColumns2,nextRetryAt:integer2("next_retry_at"),lastError:text("last_error"),processingAt:integer2("processing_at"),expiresAt:integer2("expires_at"),timeoutMs:integer2("timeout_ms"),timeoutUnlimited:integer2("timeout_unlimited").notNull().default(0),attemptToken:text("attempt_token"),leaseExpiresAt:integer2("lease_expires_at")},(table3)=>[index("queue_jobs_ready_idx").on(table3.status,table3.nextRetryAt,table3.createdAt)])});var exports_runtime2={};__export(exports_runtime2,{queueJobs:()=>queueJobs2,inboxMessages:()=>inboxMessages2});var init_runtime2=__esm(()=>{init_inbox_messages2();init_queue_jobs2()});var exports_bun_sqlite2={};__export(exports_bun_sqlite2,{BunSqliteAdapter:()=>BunSqliteAdapter2});class BunSqliteAdapter2{sqlite;drizzleDb;stmtCache=new Map;getStatement(sql4){let cached2=this.stmtCache.get(sql4);if(cached2!==void 0)return cached2;let stmt=this.sqlite.prepare(sql4);return this.stmtCache.set(sql4,stmt),stmt}constructor(options){let dbPath=options?.databaseUrl??DEFAULT_DB_PATH2,pragmas={...DEFAULT_PRAGMAS2,...options?.pragmas};if(dbPath!==":memory:"&&!isAbsolutePath2(dbPath))dbPath=resolvePath3(dbPath);this.sqlite=new Database3(dbPath,{create:!0}),this.sqlite.run(pragmas.journalMode),this.sqlite.run(pragmas.synchronous),this.sqlite.run(pragmas.foreignKeys),this.sqlite.run(pragmas.busyTimeout),this.drizzleDb=drizzle({client:this.sqlite,schema:exports_runtime2})}get db(){return this.drizzleDb}getDrizzleDb(){return this.drizzleDb}async exec(sql4){this.sqlite.prepare(sql4).run()}async run(sql4,...params){this.getStatement(sql4).run(...params)}async queryFirst(sql4,...params){return this.getStatement(sql4).get(...params)??void 0}async queryAll(sql4,...params){return this.getStatement(sql4).all(...params)??[]}async batch(operations2){if(operations2.length===0)return;this.sqlite.transaction(()=>{for(let op of operations2)this.getStatement(op.sql).run(...op.params)})()}close(){this.sqlite.close()}}var DEFAULT_PRAGMAS2,DEFAULT_DB_PATH2=".spur/spur.db";var init_bun_sqlite5=__esm(()=>{init_dist6();init_bun_sqlite4();init_bun_sqlite2();init_runtime2();DEFAULT_PRAGMAS2={journalMode:"PRAGMA journal_mode = WAL",synchronous:"PRAGMA synchronous = NORMAL",foreignKeys:"PRAGMA foreign_keys = ON",busyTimeout:"PRAGMA busy_timeout = 5000"}});var exports_d12={};__export(exports_d12,{D1Adapter:()=>D1Adapter2});class D1Adapter2{binding;drizzleDb;constructor(binding){this.binding=binding,this.drizzleDb=drizzle2(this.binding,{schema:exports_runtime2})}get db(){return this.drizzleDb}getDrizzleDb(){return this.drizzleDb}getBinding(){return this.binding}async exec(sql4){await this.binding.exec(sql4)}async run(sql4,...params){let stmt=this.binding.prepare(sql4);await(params.length>0?stmt.bind(...params):stmt).run()}async queryFirst(sql4,...params){let stmt=this.binding.prepare(sql4);return await(params.length>0?stmt.bind(...params):stmt).first()??void 0}async queryAll(sql4,...params){return(await this.binding.prepare(sql4).bind(...params).all()).results??[]}async batch(operations2){if(operations2.length===0)return;if(this.binding.batch===void 0&&operations2.length>1)throw Error(`D1 binding has no batch() — cannot execute ${operations2.length} statements atomically; provide a binding with native batch() support`);let boundStmts=operations2.map((op)=>{let stmt=this.binding.prepare(op.sql);return op.params.length>0?stmt.bind(...op.params):stmt.bind()});if(this.binding.batch!==void 0)await this.binding.batch(boundStmts);else await boundStmts[0]?.run()}close(){}}var init_d13=__esm(()=>{init_d1();init_runtime2()});async function createDbAdapter2(config3){switch(config3.driver){case"bun-sqlite":{let{BunSqliteAdapter:BunSqliteAdapter3}=await Promise.resolve().then(() => (init_bun_sqlite5(),exports_bun_sqlite2));return new BunSqliteAdapter3({...config3.url?{databaseUrl:config3.url}:{},...config3.pragmas?{pragmas:config3.pragmas}:{}})}case"d1":{let{D1Adapter:D1Adapter3}=await Promise.resolve().then(() => (init_d13(),exports_d12));return new D1Adapter3(config3.binding)}}}function compilePredicate2(predicate){if("and"in predicate){let parts=predicate.and.map(compilePredicate2).filter((p)=>p!==void 0);return parts.length>0?and(...parts):void 0}if("or"in predicate){let parts=predicate.or.map(compilePredicate2).filter((p)=>p!==void 0);return parts.length>0?or(...parts):void 0}switch(predicate.op){case"isNull":return isNull(predicate.col);case"isNotNull":return isNotNull(predicate.col);case"in":return inArray(predicate.col,predicate.values);default:return COMPARISON_BUILDERS2[predicate.op](predicate.col,predicate.value)}}function compileOrderBy2(orderBy){return orderBy.map((term)=>term.dir==="desc"?desc(term.col):asc(term.col))}var COMPARISON_BUILDERS2;var init_query_spec2=__esm(()=>{init_drizzle_orm();COMPARISON_BUILDERS2={eq:(col,value)=>eq(col,value),ne:(col,value)=>ne(col,value),gt:(col,value)=>gt(col,value),gte:(col,value)=>gte(col,value),lt:(col,value)=>lt(col,value),lte:(col,value)=>lte(col,value),like:(col,value)=>like(col,value)}});function asSelectQuery2(query){return query}class BaseDao2{adapter;constructor(adapter){this.adapter=adapter}get db(){return this.adapter.db}now(){return Date.now()}async tx(fn){return this.db.transaction((tx)=>fn(tx))}async query(table3,spec={}){let condition=spec.where?compilePredicate2(spec.where):void 0,order=spec.orderBy?compileOrderBy2(spec.orderBy):[],q=asSelectQuery2(this.db.select().from(table3));if(condition)q=q.where(condition);if(order.length>0)q=q.orderBy(...order);if(spec.limit!==void 0)q=q.limit(spec.limit);if(spec.offset!==void 0)q=q.offset(spec.offset);return await q??[]}async one(table3,where){return(await this.query(table3,{where,limit:1}))[0]}}var init_base_dao2=__esm(()=>{init_query_spec2()});var embeddedMigrations2;var init_embedded_migrations2=__esm(()=>{embeddedMigrations2=[{tag:"0000_init",sql:"CREATE TABLE `queue_jobs` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`type` text NOT NULL,\n\t`payload` text NOT NULL,\n\t`status` text DEFAULT 'pending' NOT NULL,\n\t`attempts` integer DEFAULT 0 NOT NULL,\n\t`max_retries` integer DEFAULT 3 NOT NULL,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL,\n\t`next_retry_at` integer,\n\t`last_error` text,\n\t`processing_at` integer\n);\n",hash:"558dea3834348925f79b4d30ca79d0afd0d990b2883341377d369444d50ce76e"},{tag:"0001_salty_red_ghost",sql:"CREATE INDEX `queue_jobs_ready_idx` ON `queue_jobs` (`status`,`next_retry_at`,`created_at`);",hash:"f842da3f49edeec8a17bcab399669410db09996ab258dc4fa781357d0400ddbf"},{tag:"0002_nasty_namora",sql:"ALTER TABLE `queue_jobs` ADD `expires_at` integer;",hash:"7380f8c162352a61b15205af5a87e0e7313a499203dae98fe62151a1dc7fec0e"},{tag:"0003_inbox_messages",sql:"CREATE TABLE `inbox_messages` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`from_id` text,\n\t`to_id` text NOT NULL,\n\t`body` text NOT NULL,\n\t`status` text DEFAULT 'queued' NOT NULL,\n\t`in_reply_to` text,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL,\n\t`delivered_at` integer,\n\t`inject_attempts` integer DEFAULT 0 NOT NULL,\n\t`inject_error` text\n);",hash:"c4ba569172d1be276c42b5c164c668404e6229dcf48b41d7fb2bc93e8d29d11b"},{tag:"0004_inbox_messages_to_status_idx",sql:"CREATE INDEX `idx_inbox_messages_to_status` ON `inbox_messages` (`to_id`,`status`);",hash:"3c00f1bce4f569e442f3142df31ff478d6c9b3d460824d46575f50a324bfae61"},{tag:"0005_queue_attempt_ownership",sql:"ALTER TABLE `queue_jobs` ADD `timeout_ms` integer;\nALTER TABLE `queue_jobs` ADD `timeout_unlimited` integer DEFAULT 0 NOT NULL;\nALTER TABLE `queue_jobs` ADD `attempt_token` text;\nALTER TABLE `queue_jobs` ADD `lease_expires_at` integer;",hash:"f6a4eaf11eee838f424515e57eca3a46539260bb2fb5b0b112870ca5ed38d040"},{tag:"0014_inbox_messages_request_key",sql:"ALTER TABLE `inbox_messages` ADD `request_key` text;\nCREATE UNIQUE INDEX `idx_inbox_messages_request_key` ON `inbox_messages` (`request_key`) WHERE `request_key` IS NOT NULL;\n",hash:"7277e79f8339975b29565e7b33e04f0dbd50995b99b82048fd83079757334f71"}]});var EntityDao2;var init_entity_dao2=__esm(()=>{init_drizzle_orm();init_base_dao2();init_query_spec2();EntityDao2=class EntityDao2 extends BaseDao2{table;primaryKey;collectionName;validation;constructor(adapter,table3,primaryKey,collectionName,options={}){super(adapter);this.table=table3,this.primaryKey=Array.isArray(primaryKey)?primaryKey:[primaryKey],this.collectionName=collectionName,this.validation=options}validate(op,input){let schema=op==="update"?this.validation.updateSchema:this.validation.insertSchema;if(schema===void 0)return;if(!(this.validation.validateOn??["create","createMany","upsert","update"]).includes(op))return;schema.parse(input)}get hasSoftDelete(){return"inUsed"in this.table}get activeCondition(){let table3=this.table;if("inUsed"in table3)return eq(table3.inUsed,1);return}pkCondition(id){let values=Array.isArray(id)?id:[id];if(values.length!==this.primaryKey.length)throw Error(`${this.collectionName}: primary key expects ${this.primaryKey.length} value(s), got ${values.length}`);let parts=this.primaryKey.map((col,i2)=>eq(col,values[i2]));return parts.length===1?parts[0]:and(...parts)}get insertBuilder(){return this.db.insert(this.table)}async create(data){let now=this.now(),record2={createdAt:now,updatedAt:now,...data};return this.validate("create",record2),(await this.insertBuilder.values(record2).returning())[0]}async createMany(data){if(data.length===0)return[];let now=this.now(),records=data.map((d)=>({createdAt:now,updatedAt:now,...d}));for(let record2 of records)this.validate("createMany",record2);return await this.insertBuilder.values(records).returning()}async upsert(data,conflictColumns,updateColumns){let now=this.now(),record2={createdAt:now,updatedAt:now,...data};this.validate("upsert",record2);let identityCols=new Set([...conflictColumns,...this.primaryKey]),identityProps=new Set(Object.entries(this.table).filter(([,col])=>identityCols.has(col)).map(([key])=>key)),defaultSet=Object.fromEntries(Object.entries(data).filter(([key])=>!identityProps.has(key))),setOnConflict={...updateColumns??defaultSet,updatedAt:now};return(await this.insertBuilder.values(record2).onConflictDoUpdate({target:conflictColumns,set:setOnConflict}).returning())[0]}async findById(id,includeDeleted=!1){let conditions2=[this.pkCondition(id)];if(!includeDeleted&&this.activeCondition)conditions2.push(this.activeCondition);return(await this.db.select().from(this.table).where(and(...conditions2)))[0]}async findAll(includeDeleted=!1){return this.list({includeDeleted})}async findBy(column2,value,includeDeleted=!1){return(await this.list({where:{col:column2,op:"eq",value},limit:1,includeDeleted}))[0]}async findAllBy(column2,value,includeDeleted=!1){return this.list({where:{col:column2,op:"eq",value},includeDeleted})}async update(id,data){let updateData={...data,updatedAt:this.now()};return this.validate("update",updateData),(await this.db.update(this.table).set(updateData).where(this.pkCondition(id)).returning())[0]}async delete(id,soft){if((soft??this.hasSoftDelete)&&this.hasSoftDelete)return this.update(id,{inUsed:0});await this.db.delete(this.table).where(this.pkCondition(id));return}async list(spec={}){let where=this.withActive(spec.where,spec.includeDeleted);return this.query(this.table,{...where?{where}:{},...spec.orderBy?{orderBy:spec.orderBy}:{},...spec.limit!==void 0?{limit:spec.limit}:{},...spec.offset!==void 0?{offset:spec.offset}:{}})}async listByCursor(spec){let dir=spec.direction??"asc",filters=[];if(spec.where)filters.push(spec.where);if(spec.cursor!==void 0)filters.push({col:spec.cursorColumn,op:dir==="asc"?"gt":"lt",value:spec.cursor});let where=this.withActive(filters.length>0?{and:filters}:void 0,spec.includeDeleted),rows=await this.query(this.table,{...where?{where}:{},orderBy:[{col:spec.cursorColumn,dir}],limit:spec.limit}),last=rows[rows.length-1],cursorResultKey=this.resultKeyForColumn(spec.cursorColumn),nextCursor=rows.length===spec.limit&&last?last[cursorResultKey]:void 0;return nextCursor!==void 0?{rows,nextCursor}:{rows}}resultKeyForColumn(column2){for(let[key,value]of Object.entries(this.table))if(value===column2)return key;return column2.name}async count(where,includeDeleted=!1){let condition=this.withActive(where,includeDeleted),compiled=condition?compilePredicate2(condition):void 0,base2=this.db.select({value:count2()}).from(this.table);return(await(compiled?base2.where(compiled):base2))[0]?.value??0}withActive(where,includeDeleted){if(includeDeleted||!this.hasSoftDelete)return where;let table3=this.table;if(!("inUsed"in table3))return where;let active={col:table3.inUsed,op:"eq",value:1};if(!where)return active;return{and:[where,active]}}}});function isPromiseLike2(value){return value!==null&&(typeof value==="object"||typeof value==="function")&&typeof value.then==="function"}function isRequestKeyUniqueViolation2(error51){let msg=error51 instanceof Error?error51.message:String(error51);return msg.includes("UNIQUE constraint failed")&&(msg.includes("idx_inbox_messages_request_key")||msg.includes("inbox_messages.request_key"))}var RequestKeyConflictError2,InboxMessageDao2;var init_inbox_message_dao2=__esm(()=>{init_drizzle_orm();init_entity_dao2();init_inbox_messages2();RequestKeyConflictError2=class RequestKeyConflictError2 extends Error{requestKey;existingId;constructor(requestKey,existingId){super("Request key conflict: key is already bound to another payload"+(existingId?` (existing message id: ${existingId})`:""));this.name="RequestKeyConflictError",this.requestKey=requestKey,this.existingId=existingId}};InboxMessageDao2=class InboxMessageDao2 extends EntityDao2{events;constructor(adapter,options={}){super(adapter,inboxMessages2,[inboxMessages2.id],"inbox_messages");this.events=options.events}async enqueue(fromId,toId,body,inReplyTo){let id=crypto.randomUUID(),now=this.now();return await this.create({id,fromId,toId,body,status:"queued",injectAttempts:0,createdAt:now,updatedAt:now,...inReplyTo!==void 0?{inReplyTo}:{}}),this.emitEvent("message.enqueued",{id,fromId,toId,...inReplyTo!==void 0?{inReplyTo}:{},timestamp:now}),id}async enqueueIdempotent(fromId,toId,body,requestKey,inReplyTo){let id=crypto.randomUUID(),now=this.now();try{await this.create({id,fromId,toId,body,status:"queued",injectAttempts:0,requestKey,createdAt:now,updatedAt:now,...inReplyTo!==void 0?{inReplyTo}:{}})}catch(error51){if(isRequestKeyUniqueViolation2(error51)){let existing=await this.findBy(inboxMessages2.requestKey,requestKey);if(existing&&existing.body===body&&existing.toId===toId)return{id:existing.id,replayed:!0};throw new RequestKeyConflictError2(requestKey,existing?.id??"")}throw error51}return this.emitEvent("message.enqueued",{id,fromId,toId,...inReplyTo!==void 0?{inReplyTo}:{},timestamp:now}),{id,replayed:!1}}async drainPending(toId,options){let limit=options?.limit??100;if(!Number.isInteger(limit)||limit<=0)throw RangeError(`drainPending limit must be a positive integer; received ${limit}`);let now=this.now(),rows=await this.db.update(inboxMessages2).set({status:"injected",injectAttempts:sql`${inboxMessages2.injectAttempts} + 1`,updatedAt:now}).where(sql`${inboxMessages2.id} IN (
287
+ )`}var init_ddl=__esm(()=>{init_sqlite_core()});var init_classic=__esm(()=>{init_external();init_external()});var init_v4=__esm(()=>{init_classic()});function isColumnType(column2,columnTypes){return columnTypes.includes(column2.columnType)}function isWithEnum(column2){return"enumValues"in column2&&Array.isArray(column2.enumValues)&&column2.enumValues.length>0}function columnToSchema(column2,factory){let z$1=factory?.zodInstance??exports_external,coerce=factory?.coerce??{},schema;if(isWithEnum(column2))schema=column2.enumValues.length?z$1.enum(column2.enumValues):z$1.string();if(!schema){if(isColumnType(column2,["PgGeometry","PgPointTuple"]))schema=z$1.tuple([z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgGeometryObject","PgPointObject"]))schema=z$1.object({x:z$1.number(),y:z$1.number()});else if(isColumnType(column2,["PgHalfVector","PgVector"]))schema=z$1.array(z$1.number()),schema=column2.dimensions?schema.length(column2.dimensions):schema;else if(isColumnType(column2,["PgLine"]))schema=z$1.tuple([z$1.number(),z$1.number(),z$1.number()]);else if(isColumnType(column2,["PgLineABC"]))schema=z$1.object({a:z$1.number(),b:z$1.number(),c:z$1.number()});else if(isColumnType(column2,["PgArray"]))schema=z$1.array(columnToSchema(column2.baseColumn,factory)),schema=column2.size?schema.length(column2.size):schema;else if(column2.dataType==="array")schema=z$1.array(z$1.any());else if(column2.dataType==="number")schema=numberColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="bigint")schema=bigintColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="boolean")schema=coerce===!0||coerce.boolean?z$1.coerce.boolean():z$1.boolean();else if(column2.dataType==="date")schema=coerce===!0||coerce.date?z$1.coerce.date():z$1.date();else if(column2.dataType==="string")schema=stringColumnToSchema(column2,z$1,coerce);else if(column2.dataType==="json")schema=jsonSchema;else if(column2.dataType==="custom")schema=z$1.any();else if(column2.dataType==="buffer")schema=bufferSchema}if(!schema)schema=z$1.any();return schema}function numberColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min,max,integer4=!1;if(isColumnType(column2,["MySqlTinyInt","SingleStoreTinyInt"]))min=unsigned?0:CONSTANTS.INT8_MIN,max=unsigned?CONSTANTS.INT8_UNSIGNED_MAX:CONSTANTS.INT8_MAX,integer4=!0;else if(isColumnType(column2,["PgSmallInt","PgSmallSerial","MySqlSmallInt","SingleStoreSmallInt"]))min=unsigned?0:CONSTANTS.INT16_MIN,max=unsigned?CONSTANTS.INT16_UNSIGNED_MAX:CONSTANTS.INT16_MAX,integer4=!0;else if(isColumnType(column2,["PgReal","MySqlFloat","MySqlMediumInt","SingleStoreMediumInt","SingleStoreFloat"]))min=unsigned?0:CONSTANTS.INT24_MIN,max=unsigned?CONSTANTS.INT24_UNSIGNED_MAX:CONSTANTS.INT24_MAX,integer4=isColumnType(column2,["MySqlMediumInt","SingleStoreMediumInt"]);else if(isColumnType(column2,["PgInteger","PgSerial","MySqlInt","SingleStoreInt"]))min=unsigned?0:CONSTANTS.INT32_MIN,max=unsigned?CONSTANTS.INT32_UNSIGNED_MAX:CONSTANTS.INT32_MAX,integer4=!0;else if(isColumnType(column2,["PgDoublePrecision","MySqlReal","MySqlDouble","SingleStoreReal","SingleStoreDouble","SQLiteReal"]))min=unsigned?0:CONSTANTS.INT48_MIN,max=unsigned?CONSTANTS.INT48_UNSIGNED_MAX:CONSTANTS.INT48_MAX;else if(isColumnType(column2,["PgBigInt53","PgBigSerial53","MySqlBigInt53","MySqlSerial","SingleStoreBigInt53","SingleStoreSerial","SQLiteInteger"]))unsigned=unsigned||isColumnType(column2,["MySqlSerial","SingleStoreSerial"]),min=unsigned?0:Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER,integer4=!0;else if(isColumnType(column2,["MySqlYear","SingleStoreYear"]))min=1901,max=2155,integer4=!0;else min=Number.MIN_SAFE_INTEGER,max=Number.MAX_SAFE_INTEGER;let schema=coerce===!0||coerce?.number?integer4?z2.coerce.number():z2.coerce.number().int():integer4?z2.int():z2.number();return schema=schema.gte(min).lte(max),schema}function bigintColumnToSchema(column2,z2,coerce){let unsigned=column2.getSQLType().includes("unsigned"),min=unsigned?0n:CONSTANTS.INT64_MIN,max=unsigned?CONSTANTS.INT64_UNSIGNED_MAX:CONSTANTS.INT64_MAX;return(coerce===!0||coerce?.bigint?z2.coerce.bigint():z2.bigint()).gte(min).lte(max)}function stringColumnToSchema(column2,z2,coerce){if(isColumnType(column2,["PgUUID"]))return z2.uuid();let max,regex,fixed=!1;if(isColumnType(column2,["PgVarchar","SQLiteText"]))max=column2.length;else if(isColumnType(column2,["MySqlVarChar","SingleStoreVarChar"]))max=column2.length??CONSTANTS.INT16_UNSIGNED_MAX;else if(isColumnType(column2,["MySqlText","SingleStoreText"]))if(column2.textType==="longtext")max=CONSTANTS.INT32_UNSIGNED_MAX;else if(column2.textType==="mediumtext")max=CONSTANTS.INT24_UNSIGNED_MAX;else if(column2.textType==="text")max=CONSTANTS.INT16_UNSIGNED_MAX;else max=CONSTANTS.INT8_UNSIGNED_MAX;if(isColumnType(column2,["PgChar","MySqlChar","SingleStoreChar"]))max=column2.length,fixed=!0;if(isColumnType(column2,["PgBinaryVector"]))regex=/^[01]+$/,max=column2.dimensions;let schema=coerce===!0||coerce?.string?z2.coerce.string():z2.string();return schema=regex?schema.regex(regex):schema,max&&fixed?schema.length(max):max?schema.max(max):schema}function getColumns(tableLike){return isTable(tableLike)?getTableColumns(tableLike):getViewSelectedFields(tableLike)}function handleColumns(columns2,refinements,conditions2,factory){let columnSchemas={};for(let[key,selected]of Object.entries(columns2)){if(!is(selected,Column)&&!is(selected,SQL)&&!is(selected,SQL.Aliased)&&typeof selected==="object"){let columns3=isTable(selected)||isView(selected)?getColumns(selected):selected;columnSchemas[key]=handleColumns(columns3,refinements[key]??{},conditions2,factory);continue}let refinement=refinements[key];if(refinement!==void 0&&typeof refinement!=="function"){columnSchemas[key]=refinement;continue}let column2=is(selected,Column)?selected:void 0,schema=column2?columnToSchema(column2,factory):exports_external.any(),refined=typeof refinement==="function"?refinement(schema):schema;if(conditions2.never(column2))continue;else columnSchemas[key]=refined;if(column2){if(conditions2.nullable(column2))columnSchemas[key]=columnSchemas[key].nullable();if(conditions2.optional(column2))columnSchemas[key]=columnSchemas[key].optional()}}return exports_external.object(columnSchemas)}function handleEnum(enum_,factory){return(factory?.zodInstance??exports_external).enum(enum_.enumValues)}var CONSTANTS,isPgEnum2,literalSchema,jsonSchema,bufferSchema,selectConditions,insertConditions,createSelectSchema=(entity2,refine2)=>{if(isPgEnum2(entity2))return handleEnum(entity2);let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},selectConditions)},createInsertSchema=(entity2,refine2)=>{let columns2=getColumns(entity2);return handleColumns(columns2,refine2??{},insertConditions)};var init_drizzle_zod=__esm(()=>{init_v4();init_drizzle_orm();CONSTANTS={INT8_MIN:-128,INT8_MAX:127,INT8_UNSIGNED_MAX:255,INT16_MIN:-32768,INT16_MAX:32767,INT16_UNSIGNED_MAX:65535,INT24_MIN:-8388608,INT24_MAX:8388607,INT24_UNSIGNED_MAX:16777215,INT32_MIN:-2147483648,INT32_MAX:2147483647,INT32_UNSIGNED_MAX:4294967295,INT48_MIN:-140737488355328,INT48_MAX:140737488355327,INT48_UNSIGNED_MAX:281474976710655,INT64_MIN:-9223372036854775808n,INT64_MAX:9223372036854775807n,INT64_UNSIGNED_MAX:18446744073709551615n};isPgEnum2=isWithEnum,literalSchema=exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()]),jsonSchema=exports_external.union([literalSchema,exports_external.record(exports_external.string(),exports_external.any()),exports_external.array(exports_external.any())]),bufferSchema=exports_external.custom((v)=>v instanceof Buffer);selectConditions={never:()=>!1,optional:()=>!1,nullable:(column2)=>!column2.notNull},insertConditions={never:(column2)=>column2?.generated?.type==="always"||column2?.generatedIdentity?.type==="always",optional:(column2)=>!column2.notNull||column2.notNull&&column2.hasDefault,nullable:(column2)=>!column2.notNull}});function defineTable(name,columns2){let table3=sqliteTable(name,columns2),insert2,select3,ddl;return{table:table3,get insertSchema(){if(insert2===void 0)insert2=createInsertSchema(table3);return insert2},get selectSchema(){if(select3===void 0)select3=createSelectSchema(table3);return select3},get createTableSql(){if(ddl===void 0)ddl=generateCreateTableSql(table3);return ddl}}}var init_define_table=__esm(()=>{init_sqlite_core();init_drizzle_zod();init_ddl()});var init_schema=__esm(()=>{init_sqlite_core();init_define_table();init_common3()});function parseYamlObject(text3){let parsed;try{parsed=$parse(text3)}catch(error51){throw new YamlParseError(`YAML parsing failed: ${error51.message}`,error51 instanceof Error?error51:void 0)}if(parsed===null||parsed===void 0)return{};if(typeof parsed!=="object"||Array.isArray(parsed))throw new YamlParseError("YAML must parse to an object");return parsed}function stringifyYamlObject(value){return $stringify(value)}function getProcessEnv(){return getEnvVars()}function interpolateEnv(value){return value.replace(ENV_INTERPOLATION_RE,(_match,name)=>getEnvVar(name)??`\${${name}}`)}function interpolateTree(value){if(typeof value==="string")return interpolateEnv(value);if(Array.isArray(value))return value.map(interpolateTree);if(isPlainObject4(value))return Object.fromEntries(Object.entries(value).map(([key,child])=>[key,interpolateTree(child)]));return value}function buildConfigFromObject(raw,options={}){let interpolated=interpolateTree(raw),merged=options.overrides?deepMerge(interpolated,options.overrides):interpolated,result=configSchema2.safeParse(merged);if(!result.success)throw new ConfigLoadError("Config validation failed",result.error.issues);return deepFreeze(result.data)}function isPlainObject4(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function deepFreeze(obj){Object.freeze(obj);for(let value of Object.values(obj))if(Array.isArray(value)){Object.freeze(value);for(let item of value)if(isPlainObject4(item)&&!Object.isFrozen(item))deepFreeze(item)}else if(isPlainObject4(value)&&!Object.isFrozen(value))deepFreeze(value);return obj}var configSchema2,ENV_INTERPOLATION_RE,YamlParseError,ConfigLoadError;var init_config2=__esm(()=>{init_dist();init_dist2();init_zod();configSchema2=exports_external.object({app:exports_external.object({name:exports_external.string().default("app"),env:exports_external.enum(["development","staging","production","test"]).default("development"),port:exports_external.number().int().positive().default(3000)}).default({name:"app",env:"development",port:3000}),database:exports_external.object({url:exports_external.string().default(":memory:")}).default({url:":memory:"}),logging:exports_external.object({level:exports_external.enum(["trace","debug","info","warn","error","fatal"]).default("info"),console:exports_external.boolean().default(!0),file:exports_external.boolean().default(!1),filePath:exports_external.string().optional(),json:exports_external.boolean().default(!1)}).default({level:"info",console:!0,file:!1,json:!1})}),ENV_INTERPOLATION_RE=/\$\{([A-Z_][A-Z0-9_]*)\}/g;YamlParseError=class YamlParseError extends Error{innerError;constructor(message,innerError){super(message);this.innerError=innerError,this.name="YamlParseError"}};ConfigLoadError=class ConfigLoadError extends Error{issues;constructor(message,issues=[]){super(message);this.name="ConfigLoadError",this.issues=issues}}});import{appendFileSync as appendFileSync2,cpSync,createReadStream as createReadStream2,createWriteStream as createWriteStream2,existsSync,mkdirSync,readdirSync,readFileSync as readFileSync3,realpathSync,renameSync,rmSync,statSync as statSync2,writeFileSync as writeFileSync2}from"node:fs";import{dirname,resolve as resolvePath2}from"node:path";function createNodeFileSystem2(root,paths){let projectRoot=root??findProjectRoot2(paths?.cwd??process.cwd());return{getProjectRoot:()=>projectRoot,resolve:(...segments)=>resolvePath2(projectRoot,...segments),exists:(path7)=>existsSync(path7),readFile:(path7)=>readFileSync3(path7,"utf-8"),readFileStream:async function*(path7){let stream=createReadStream2(path7,{encoding:"utf-8"}),buffer="";for await(let chunk of stream){buffer+=chunk;let lines=buffer.split(/\r?\n/);buffer=lines.pop()??"";for(let line of lines)yield line}if(buffer.length>0)yield buffer},writeFile:(path7,content)=>{ensureParentDir(path7),writeFileSync2(path7,content,"utf-8")},appendFile:(path7,content)=>{ensureParentDir(path7),appendFileSync2(path7,content,"utf-8")},ensureDir:(path7)=>{mkdirSync(path7,{recursive:!0})},readDir:(path7)=>readdirSync(path7),deleteFile:(path7)=>{rmSync(path7,{recursive:!0,force:!0})},rename:(src,dest)=>{renameSync(src,dest)},copy:(src,dest)=>{cpSync(src,dest,{recursive:!0})},createWriteStream:(path7)=>{return ensureParentDir(path7),createWriteStream2(path7,{flags:"a"})},stat:(path7)=>{try{let s2=statSync2(path7);return{isFile:()=>s2.isFile(),isDirectory:()=>s2.isDirectory(),size:s2.size,mtimeMs:s2.mtimeMs}}catch{return null}},realPath:(path7)=>realpathSync(path7)}}function ensureParentDir(filePath){let dir=dirname(filePath);if(!existsSync(dir))mkdirSync(dir,{recursive:!0})}function findProjectRoot2(startDir){let dir=resolvePath2(startDir),root=resolvePath2("/");while(dir!==root){if(existsSync(resolvePath2(dir,"bun.lock"))||existsSync(resolvePath2(dir,"package.json")))return dir;let parent=resolvePath2(dir,"..");if(parent===dir)break;dir=parent}return startDir}var init_file_system_node=()=>{};var DbModuleNotInstalledError2;var init_db_errors=__esm(()=>{DbModuleNotInstalledError2=class DbModuleNotInstalledError2 extends Error{constructor(message="@gobing-ai/ts-db is not installed. It is an optional peer of @gobing-ai/ts-runtime, required only for createDbAdapter on node-bun. Install it (`bun add @gobing-ai/ts-db`) or, when bundling, mark `@gobing-ai/ts-db` external.",options){super(message,options);this.name="DbModuleNotInstalledError"}}});function resolveDeadline(optionTimeout,defaultTimeout){if(optionTimeout===null)return null;let candidate=optionTimeout===void 0?defaultTimeout:optionTimeout;if(candidate===void 0||candidate===null)return candidate;if(!Number.isInteger(candidate)||candidate<=0||candidate>2147483647)throw TypeError(`Process timeout must be a positive integer within the native timer range (1-2147483647 ms), got ${String(candidate)}`);return candidate}function resolveKillGraceMs(optionGraceMs){if(optionGraceMs===void 0)return 5000;if(!Number.isInteger(optionGraceMs)||optionGraceMs<0||optionGraceMs>2147483647)throw TypeError(`Process killGraceMs must be a non-negative integer within the native timer range (0-2147483647 ms), got ${String(optionGraceMs)}`);return optionGraceMs}function groupExists(pid){try{return process.kill(-pid,0),!0}catch(error51){return error51.code==="EPERM"}}function signalGroup(pid,signal){try{return process.kill(-pid,signal),!0}catch{return!1}}async function waitForGroupExit(pid,budgetMs){let giveUpAt=Date.now()+budgetMs;while(groupExists(pid)){if(Date.now()>=giveUpAt)return!1;await new Promise((resolve)=>setTimeout(resolve,25))}return!0}async function reapProcessGroup(pid,graceMs){if(!signalGroup(pid,"SIGTERM"))return!1;if(await waitForGroupExit(pid,graceMs))return!0;return signalGroup(pid,"SIGKILL"),await waitForGroupExit(pid,2000),!0}function ownProcessGroupLifecycle(ownership){let{pid,graceMs}=ownership,trigger,termination,timer,initiate=(reason)=>{if(trigger!==void 0)return;trigger=reason,termination=reapProcessGroup(pid,graceMs)};if(ownership.deadlineMs!==void 0)timer=setTimeout(()=>initiate("timeout"),ownership.deadlineMs);let onAbort=()=>initiate("cancelled");if(ownership.signal!==void 0)if(ownership.signal.aborted)onAbort();else ownership.signal.addEventListener("abort",onAbort,{once:!0});return{finish:async()=>{if(trigger===void 0){await reapProcessGroup(pid,graceMs);return}return await termination?trigger:void 0},stop:()=>{if(timer!==void 0)clearTimeout(timer);ownership.signal?.removeEventListener("abort",onAbort)}}}import{spawnSync as spawnSync2}from"node:child_process";import{isatty}from"node:tty";function processEventSeverity(reason,exitCode){if(reason==="error")return"error";if(reason==="timeout"||reason==="cancelled")return"warning";if(exitCode!==null&&exitCode!==0)return"warning";return"info"}function resolveChildEnv(env2,envMode){if(envMode==="replace")return env2;let merged={};for(let[key,value]of Object.entries(getProcessEnv()))if(value!==void 0)merged[key]=value;return{...merged,...env2}}class NodeProcessExecutor2{config;constructor(config3={}){this.config=config3}async run(options){return this.trace("process.run",()=>this.runUntraced(options))}async runUntraced(options){let args=options.args??[],deadline=resolveDeadline(options.timeout,this.config.defaultTimeout),killGraceMs=resolveKillGraceMs(options.killGraceMs),groupOwned=process.platform!=="win32"&&(typeof deadline==="number"||options.signal!==void 0),execaOptions=buildExecaOptions({cwd:options.cwd??this.config.paths?.cwd,env:options.env,timeout:typeof deadline==="number"?deadline:void 0,maxOutput:options.maxOutput??this.config.defaultMaxOutput,rejectOnError:options.rejectOnError??!1,outputPolicy:this.config.output,forceBuffered:options.forceBuffered??!1,signal:options.signal,groupOwned}),startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"one-shot",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let ownership;try{let subprocess=execa(options.command,args,execaOptions);if(groupOwned&&subprocess.pid!==void 0)ownership=ownProcessGroupLifecycle({pid:subprocess.pid,deadlineMs:typeof deadline==="number"?deadline:void 0,signal:options.signal,graceMs:killGraceMs});if(subprocess.pid!==void 0){if(this.config.registry?.update(registryId,{pid:subprocess.pid}),options.onSpawn!==void 0)try{options.onSpawn(subprocess.pid)}catch{}}let stopOwnedTermination=()=>ownership?.stop();observeOutput(subprocess.stdout,"stdout",options.onOutput),observeOutput(subprocess.stderr,"stderr",options.onOutput);let result=await subprocess.finally(stopOwnedTermination),ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:result.exitCode??null,stdout:asString(result.stdout),stderr:asString(result.stderr),...result.signalDescription!==void 0?{signal:result.signalDescription}:{},durationMs:result.durationMs,outcome:ownedOutcome??(result.signalDescription!==void 0?"signal":"exit")};return this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,result),processResult}catch(error51){let failed=error51,ownedOutcome=ownership!==void 0?await ownership.finish():void 0,processResult={command:options.command,args,exitCode:failed.exitCode??null,stdout:asString(failed.stdout),stderr:asString(failed.stderr),...failed.signalDescription!==void 0?{signal:failed.signalDescription}:failed.signal!==void 0?{signal:failed.signal}:{},durationMs:failed.durationMs??Date.now()-startedAt,outcome:ownedOutcome??classifyFailedCompletion(failed)};if(this.completeRegistry(registryId,processResult.exitCode),this.emitExitedFromResult(options,processResult,error51,error51),options.rejectOnError)throw error51;return processResult}}runStreaming(options){let args=options.args??[],startedAt=Date.now(),startedIso=new Date(startedAt).toISOString(),registryId=this.beginRegistry(options.command,args,{label:options.label,source:options.source??"other",teamId:options.teamId,agentId:options.agentId,startedAt:startedIso});try{this.emitProcessEvent("process.started",{command:options.command,args,exitCode:null,durationMs:0,reason:"exit",timestamp:startedIso,severity:"info",...options.label!==void 0?{label:options.label}:{}});let subprocess=Bun.spawn({cmd:[options.command,...args],stdin:"pipe",stdout:"pipe",stderr:"pipe",...options.cwd!==void 0?{cwd:options.cwd}:{},...options.env!==void 0?{env:resolveChildEnv(options.env,options.envMode)}:{}}),pipe2=new BunPipeProcess(subprocess);if(pipe2.pid!==null)this.config.registry?.update(registryId,{pid:pipe2.pid});return new ObservedPipeProcess(pipe2,this.config.events,{command:options.command,args,startedAt,registry:this.config.registry,registryId,...options.label!==void 0?{label:options.label}:{}})}catch(error51){throw this.completeRegistry(registryId,null),this.emitProcessEvent("process.exited",{command:options.command,args,exitCode:null,durationMs:0,reason:"error",timestamp:new Date().toISOString(),severity:processEventSeverity("error",null),...options.label!==void 0?{label:options.label}:{},error:errorMessage(error51)}),error51}}async trace(name,fn){if(this.config.tracer===void 0)return await fn();return await this.config.tracer.traceAsync(name,async()=>await fn())}beginRegistry(command,args,meta3){let registry2=this.config.registry;if(!registry2)return"";return registry2.begin({command,args,source:meta3.source,startedAt:meta3.startedAt,...meta3.label!==void 0?{label:meta3.label}:{},...meta3.teamId!==void 0?{teamId:meta3.teamId}:{},...meta3.agentId!==void 0?{agentId:meta3.agentId}:{}})}completeRegistry(id,exitCode,pid){if(!id||!this.config.registry)return;this.config.registry.complete(id,{exitCode,...pid!==void 0?{pid}:{}})}emitExitedFromResult(options,result,completion,error51){let reason=result.outcome??(isTimedOut(completion)?"timeout":result.signal!==void 0?"signal":error51?"error":"exit");this.emitProcessEvent("process.exited",{command:result.command,args:result.args,exitCode:result.exitCode,...result.signal!==void 0?{signal:result.signal}:{},durationMs:result.durationMs,reason,timestamp:new Date().toISOString(),severity:processEventSeverity(reason,result.exitCode),...options.label!==void 0?{label:options.label}:{},...error51!==void 0?{error:errorMessage(error51)}:{}})}emitProcessEvent(event,detail){this.config.events?.emit(event,detail)}}class ObservedPipeProcess{inner;killedWith;exited;constructor(inner,events,context2){this.inner=inner,this.exited=inner.exited.then((exitCode)=>{if(context2.registry&&context2.registryId)context2.registry.complete(context2.registryId,{exitCode,...inner.pid!==null?{pid:inner.pid}:{}});return events?.emit("process.exited",{command:context2.command,args:context2.args,exitCode,...this.killedWith!==void 0?{signal:String(this.killedWith)}:{},durationMs:Date.now()-context2.startedAt,reason:this.killedWith!==void 0?"signal":"exit",timestamp:new Date().toISOString(),severity:processEventSeverity(this.killedWith!==void 0?"signal":"exit",exitCode),...context2.label!==void 0?{label:context2.label}:{}}),exitCode})}get pid(){return this.inner.pid}get stdout(){return this.inner.stdout}get stderr(){return this.inner.stderr}writeStdin(input){this.inner.writeStdin(input)}endStdin(){this.inner.endStdin()}kill(signal){this.killedWith=signal,this.inner.kill(signal)}}class BunPipeProcess{subprocess;writer;constructor(subprocess){this.subprocess=subprocess,this.writer=subprocess.stdin}get pid(){return this.subprocess.pid??null}get stdout(){return isReadableStream3(this.subprocess.stdout)?this.subprocess.stdout:null}get stderr(){return isReadableStream3(this.subprocess.stderr)?this.subprocess.stderr:null}get exited(){return this.subprocess.exited}writeStdin(input){this.writer.write(input),this.writer.flush?.()}endStdin(){this.writer.end?.()}kill(signal){this.subprocess.kill(signal)}}class NodeSyncProcessExecutor2{runSync(options){let args=options.args??[],startedAt=Date.now(),result=spawnSync2(options.command,args,{stdio:["ignore","pipe","pipe"],...options.cwd!==void 0?{cwd:options.cwd}:{},...options.env!==void 0?{env:options.env}:{}}),exitCode=result.status??1;if(options.rejectOnError===!0&&exitCode!==0)throw Error(`${options.command} ${args.join(" ")} failed with exit code ${exitCode}: ${stripFinalNewline2(asString(result.stderr))}`);return{command:options.command,args,exitCode,stdout:stripFinalNewline2(asString(result.stdout)),stderr:stripFinalNewline2(asString(result.stderr)),durationMs:Date.now()-startedAt}}}function buildExecaOptions(opts){let mode=opts.forceBuffered?"buffered":opts.outputPolicy?.mode??"buffered",streamToTerminal=mode==="stream"&&(opts.outputPolicy?.mode==="stream"?opts.outputPolicy.isTTY??process.stdout.isTTY??isatty(1):!1);return{reject:opts.rejectOnError,stdin:"ignore",stripFinalNewline:!0,...mode==="pipe"?{stdout:"pipe",stderr:"pipe"}:streamToTerminal?{stdout:["inherit","pipe"],stderr:["inherit","pipe"]}:{all:!0},...opts.cwd!==void 0?{cwd:opts.cwd}:{},...opts.env!==void 0?{env:opts.env}:{},...opts.timeout!==void 0&&!opts.groupOwned?{timeout:opts.timeout}:{},...opts.maxOutput!==void 0?{maxBuffer:opts.maxOutput}:{},...opts.groupOwned?{detached:!0}:{},...opts.signal!==void 0&&!opts.groupOwned?{cancelSignal:opts.signal}:{}}}function classifyFailedCompletion(error51){if(error51.timedOut===!0)return"timeout";if(error51.isCanceled===!0)return"cancelled";if(error51.isTerminated===!0||error51.signalDescription!==void 0||error51.signal!==void 0)return"signal";return"error"}function observeOutput(stream,name,observer){if(!stream||!observer)return;let decoder=new TextDecoder,emit=(chunk)=>{try{observer({stream:name,chunk,timestamp:new Date().toISOString()})}catch{}};stream.on("data",(chunk)=>{emit(typeof chunk==="string"?chunk:decoder.decode(chunk,{stream:!0}))}),stream.on("end",()=>{let tail=decoder.decode();if(tail.length>0)emit(tail)})}function asString(value){if(typeof value==="string")return value;if(value instanceof Uint8Array)return new TextDecoder().decode(value);if(Array.isArray(value))return value.map(String).join("");return""}function stripFinalNewline2(value){return value.endsWith(`\r
288
+ `)?value.slice(0,-2):value.endsWith(`
289
+ `)?value.slice(0,-1):value}function isReadableStream3(value){return value instanceof ReadableStream}function isTimedOut(error51){return typeof error51==="object"&&error51!==null&&"timedOut"in error51&&error51.timedOut===!0}function errorMessage(error51){return error51 instanceof Error?error51.message:String(error51)}var init_process_executor=__esm(()=>{init_execa();init_config2()});import{Database as Database3}from"bun:sqlite";var init_bun_sqlite4=()=>{};var inboxMessages2;var init_inbox_messages2=__esm(()=>{init_sqlite_core();inboxMessages2=sqliteTable("inbox_messages",{id:text("id").primaryKey(),fromId:text("from_id"),toId:text("to_id").notNull(),body:text("body").notNull(),status:text("status").notNull().default("queued"),inReplyTo:text("in_reply_to"),createdAt:integer2("created_at").notNull(),updatedAt:integer2("updated_at").notNull(),deliveredAt:integer2("delivered_at"),injectAttempts:integer2("inject_attempts").notNull().default(0),injectError:text("inject_error"),requestKey:text("request_key")},(table3)=>[index("idx_inbox_messages_to_status").on(table3.toId,table3.status)])});function nowTimestamp2(){return Date.now()}function buildStandardColumns2(){return{createdAt:integer2("created_at").notNull().$defaultFn(nowTimestamp2).default(0),updatedAt:integer2("updated_at").notNull().$defaultFn(nowTimestamp2).default(0)}}function buildStandardColumnsWithSoftDelete2(){return{...buildStandardColumns2(),inUsed:integer2("in_used").notNull().default(1)}}function buildAppendOnlyColumns2(){return{createdAt:integer2("created_at").notNull().$defaultFn(nowTimestamp2).default(0)}}var standardColumns2,standardColumnsWithSoftDelete2,appendOnlyColumns2;var init_common4=__esm(()=>{init_sqlite_core();standardColumns2=buildStandardColumns2();standardColumnsWithSoftDelete2=buildStandardColumnsWithSoftDelete2();appendOnlyColumns2=buildAppendOnlyColumns2()});var queueJobs2;var init_queue_jobs2=__esm(()=>{init_sqlite_core();init_common4();queueJobs2=sqliteTable("queue_jobs",{id:text("id").primaryKey(),type:text("type").notNull(),payload:text("payload").notNull(),status:text("status").notNull().default("pending"),attempts:integer2("attempts").notNull().default(0),maxRetries:integer2("max_retries").notNull().default(3),...standardColumns2,nextRetryAt:integer2("next_retry_at"),lastError:text("last_error"),processingAt:integer2("processing_at"),expiresAt:integer2("expires_at"),timeoutMs:integer2("timeout_ms"),timeoutUnlimited:integer2("timeout_unlimited").notNull().default(0),attemptToken:text("attempt_token"),leaseExpiresAt:integer2("lease_expires_at")},(table3)=>[index("queue_jobs_ready_idx").on(table3.status,table3.nextRetryAt,table3.createdAt)])});var exports_runtime2={};__export(exports_runtime2,{queueJobs:()=>queueJobs2,inboxMessages:()=>inboxMessages2});var init_runtime2=__esm(()=>{init_inbox_messages2();init_queue_jobs2()});var exports_bun_sqlite2={};__export(exports_bun_sqlite2,{BunSqliteAdapter:()=>BunSqliteAdapter2});class BunSqliteAdapter2{sqlite;drizzleDb;stmtCache=new Map;getStatement(sql4){let cached2=this.stmtCache.get(sql4);if(cached2!==void 0)return cached2;let stmt=this.sqlite.prepare(sql4);return this.stmtCache.set(sql4,stmt),stmt}constructor(options){let dbPath=options?.databaseUrl??DEFAULT_DB_PATH2,pragmas={...DEFAULT_PRAGMAS2,...options?.pragmas};if(dbPath!==":memory:"&&!isAbsolutePath2(dbPath))dbPath=resolvePath3(dbPath);this.sqlite=new Database3(dbPath,{create:!0}),this.sqlite.run(pragmas.journalMode),this.sqlite.run(pragmas.synchronous),this.sqlite.run(pragmas.foreignKeys),this.sqlite.run(pragmas.busyTimeout),this.drizzleDb=drizzle({client:this.sqlite,schema:exports_runtime2})}get db(){return this.drizzleDb}getDrizzleDb(){return this.drizzleDb}async exec(sql4){this.sqlite.prepare(sql4).run()}async run(sql4,...params){this.getStatement(sql4).run(...params)}async queryFirst(sql4,...params){return this.getStatement(sql4).get(...params)??void 0}async queryAll(sql4,...params){return this.getStatement(sql4).all(...params)??[]}async batch(operations2){if(operations2.length===0)return;this.sqlite.transaction(()=>{for(let op of operations2)this.getStatement(op.sql).run(...op.params)})()}close(){this.sqlite.close()}}var DEFAULT_PRAGMAS2,DEFAULT_DB_PATH2=".spur/spur.db";var init_bun_sqlite5=__esm(()=>{init_dist6();init_bun_sqlite4();init_bun_sqlite2();init_runtime2();DEFAULT_PRAGMAS2={journalMode:"PRAGMA journal_mode = WAL",synchronous:"PRAGMA synchronous = NORMAL",foreignKeys:"PRAGMA foreign_keys = ON",busyTimeout:"PRAGMA busy_timeout = 5000"}});var exports_d12={};__export(exports_d12,{D1Adapter:()=>D1Adapter2});class D1Adapter2{binding;drizzleDb;constructor(binding){this.binding=binding,this.drizzleDb=drizzle2(this.binding,{schema:exports_runtime2})}get db(){return this.drizzleDb}getDrizzleDb(){return this.drizzleDb}getBinding(){return this.binding}async exec(sql4){await this.binding.exec(sql4)}async run(sql4,...params){let stmt=this.binding.prepare(sql4);await(params.length>0?stmt.bind(...params):stmt).run()}async queryFirst(sql4,...params){let stmt=this.binding.prepare(sql4);return await(params.length>0?stmt.bind(...params):stmt).first()??void 0}async queryAll(sql4,...params){return(await this.binding.prepare(sql4).bind(...params).all()).results??[]}async batch(operations2){if(operations2.length===0)return;if(this.binding.batch===void 0&&operations2.length>1)throw Error(`D1 binding has no batch() — cannot execute ${operations2.length} statements atomically; provide a binding with native batch() support`);let boundStmts=operations2.map((op)=>{let stmt=this.binding.prepare(op.sql);return op.params.length>0?stmt.bind(...op.params):stmt.bind()});if(this.binding.batch!==void 0)await this.binding.batch(boundStmts);else await boundStmts[0]?.run()}close(){}}var init_d13=__esm(()=>{init_d1();init_runtime2()});async function createDbAdapter2(config3){switch(config3.driver){case"bun-sqlite":{let{BunSqliteAdapter:BunSqliteAdapter3}=await Promise.resolve().then(() => (init_bun_sqlite5(),exports_bun_sqlite2));return new BunSqliteAdapter3({...config3.url?{databaseUrl:config3.url}:{},...config3.pragmas?{pragmas:config3.pragmas}:{}})}case"d1":{let{D1Adapter:D1Adapter3}=await Promise.resolve().then(() => (init_d13(),exports_d12));return new D1Adapter3(config3.binding)}}}function compilePredicate2(predicate){if("and"in predicate){let parts=predicate.and.map(compilePredicate2).filter((p)=>p!==void 0);return parts.length>0?and(...parts):void 0}if("or"in predicate){let parts=predicate.or.map(compilePredicate2).filter((p)=>p!==void 0);return parts.length>0?or(...parts):void 0}switch(predicate.op){case"isNull":return isNull(predicate.col);case"isNotNull":return isNotNull(predicate.col);case"in":return inArray(predicate.col,predicate.values);default:return COMPARISON_BUILDERS2[predicate.op](predicate.col,predicate.value)}}function compileOrderBy2(orderBy){return orderBy.map((term)=>term.dir==="desc"?desc(term.col):asc(term.col))}var COMPARISON_BUILDERS2;var init_query_spec2=__esm(()=>{init_drizzle_orm();COMPARISON_BUILDERS2={eq:(col,value)=>eq(col,value),ne:(col,value)=>ne(col,value),gt:(col,value)=>gt(col,value),gte:(col,value)=>gte(col,value),lt:(col,value)=>lt(col,value),lte:(col,value)=>lte(col,value),like:(col,value)=>like(col,value)}});function asSelectQuery2(query){return query}class BaseDao2{adapter;constructor(adapter){this.adapter=adapter}get db(){return this.adapter.db}now(){return Date.now()}async tx(fn){return this.db.transaction((tx)=>fn(tx))}async query(table3,spec={}){let condition=spec.where?compilePredicate2(spec.where):void 0,order=spec.orderBy?compileOrderBy2(spec.orderBy):[],q=asSelectQuery2(this.db.select().from(table3));if(condition)q=q.where(condition);if(order.length>0)q=q.orderBy(...order);if(spec.limit!==void 0)q=q.limit(spec.limit);if(spec.offset!==void 0)q=q.offset(spec.offset);return await q??[]}async one(table3,where){return(await this.query(table3,{where,limit:1}))[0]}}var init_base_dao2=__esm(()=>{init_query_spec2()});var embeddedMigrations2;var init_embedded_migrations2=__esm(()=>{embeddedMigrations2=[{tag:"0000_init",sql:"CREATE TABLE `queue_jobs` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`type` text NOT NULL,\n\t`payload` text NOT NULL,\n\t`status` text DEFAULT 'pending' NOT NULL,\n\t`attempts` integer DEFAULT 0 NOT NULL,\n\t`max_retries` integer DEFAULT 3 NOT NULL,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL,\n\t`next_retry_at` integer,\n\t`last_error` text,\n\t`processing_at` integer\n);\n",hash:"558dea3834348925f79b4d30ca79d0afd0d990b2883341377d369444d50ce76e"},{tag:"0001_salty_red_ghost",sql:"CREATE INDEX `queue_jobs_ready_idx` ON `queue_jobs` (`status`,`next_retry_at`,`created_at`);",hash:"f842da3f49edeec8a17bcab399669410db09996ab258dc4fa781357d0400ddbf"},{tag:"0002_nasty_namora",sql:"ALTER TABLE `queue_jobs` ADD `expires_at` integer;",hash:"7380f8c162352a61b15205af5a87e0e7313a499203dae98fe62151a1dc7fec0e"},{tag:"0003_inbox_messages",sql:"CREATE TABLE `inbox_messages` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`from_id` text,\n\t`to_id` text NOT NULL,\n\t`body` text NOT NULL,\n\t`status` text DEFAULT 'queued' NOT NULL,\n\t`in_reply_to` text,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL,\n\t`delivered_at` integer,\n\t`inject_attempts` integer DEFAULT 0 NOT NULL,\n\t`inject_error` text\n);",hash:"c4ba569172d1be276c42b5c164c668404e6229dcf48b41d7fb2bc93e8d29d11b"},{tag:"0004_inbox_messages_to_status_idx",sql:"CREATE INDEX `idx_inbox_messages_to_status` ON `inbox_messages` (`to_id`,`status`);",hash:"3c00f1bce4f569e442f3142df31ff478d6c9b3d460824d46575f50a324bfae61"},{tag:"0005_queue_attempt_ownership",sql:"ALTER TABLE `queue_jobs` ADD `timeout_ms` integer;\nALTER TABLE `queue_jobs` ADD `timeout_unlimited` integer DEFAULT 0 NOT NULL;\nALTER TABLE `queue_jobs` ADD `attempt_token` text;\nALTER TABLE `queue_jobs` ADD `lease_expires_at` integer;",hash:"f6a4eaf11eee838f424515e57eca3a46539260bb2fb5b0b112870ca5ed38d040"},{tag:"0014_inbox_messages_request_key",sql:"ALTER TABLE `inbox_messages` ADD `request_key` text;\nCREATE UNIQUE INDEX `idx_inbox_messages_request_key` ON `inbox_messages` (`request_key`) WHERE `request_key` IS NOT NULL;\n",hash:"7277e79f8339975b29565e7b33e04f0dbd50995b99b82048fd83079757334f71"}]});var EntityDao2;var init_entity_dao2=__esm(()=>{init_drizzle_orm();init_base_dao2();init_query_spec2();EntityDao2=class EntityDao2 extends BaseDao2{table;primaryKey;collectionName;validation;constructor(adapter,table3,primaryKey,collectionName,options={}){super(adapter);this.table=table3,this.primaryKey=Array.isArray(primaryKey)?primaryKey:[primaryKey],this.collectionName=collectionName,this.validation=options}validate(op,input){let schema=op==="update"?this.validation.updateSchema:this.validation.insertSchema;if(schema===void 0)return;if(!(this.validation.validateOn??["create","createMany","upsert","update"]).includes(op))return;schema.parse(input)}get hasSoftDelete(){return"inUsed"in this.table}get activeCondition(){let table3=this.table;if("inUsed"in table3)return eq(table3.inUsed,1);return}pkCondition(id){let values=Array.isArray(id)?id:[id];if(values.length!==this.primaryKey.length)throw Error(`${this.collectionName}: primary key expects ${this.primaryKey.length} value(s), got ${values.length}`);let parts=this.primaryKey.map((col,i2)=>eq(col,values[i2]));return parts.length===1?parts[0]:and(...parts)}get insertBuilder(){return this.db.insert(this.table)}async create(data){let now=this.now(),record2={createdAt:now,updatedAt:now,...data};return this.validate("create",record2),(await this.insertBuilder.values(record2).returning())[0]}async createMany(data){if(data.length===0)return[];let now=this.now(),records=data.map((d)=>({createdAt:now,updatedAt:now,...d}));for(let record2 of records)this.validate("createMany",record2);return await this.insertBuilder.values(records).returning()}async upsert(data,conflictColumns,updateColumns){let now=this.now(),record2={createdAt:now,updatedAt:now,...data};this.validate("upsert",record2);let identityCols=new Set([...conflictColumns,...this.primaryKey]),identityProps=new Set(Object.entries(this.table).filter(([,col])=>identityCols.has(col)).map(([key])=>key)),defaultSet=Object.fromEntries(Object.entries(data).filter(([key])=>!identityProps.has(key))),setOnConflict={...updateColumns??defaultSet,updatedAt:now};return(await this.insertBuilder.values(record2).onConflictDoUpdate({target:conflictColumns,set:setOnConflict}).returning())[0]}async findById(id,includeDeleted=!1){let conditions2=[this.pkCondition(id)];if(!includeDeleted&&this.activeCondition)conditions2.push(this.activeCondition);return(await this.db.select().from(this.table).where(and(...conditions2)))[0]}async findAll(includeDeleted=!1){return this.list({includeDeleted})}async findBy(column2,value,includeDeleted=!1){return(await this.list({where:{col:column2,op:"eq",value},limit:1,includeDeleted}))[0]}async findAllBy(column2,value,includeDeleted=!1){return this.list({where:{col:column2,op:"eq",value},includeDeleted})}async update(id,data){let updateData={...data,updatedAt:this.now()};return this.validate("update",updateData),(await this.db.update(this.table).set(updateData).where(this.pkCondition(id)).returning())[0]}async delete(id,soft){if((soft??this.hasSoftDelete)&&this.hasSoftDelete)return this.update(id,{inUsed:0});await this.db.delete(this.table).where(this.pkCondition(id));return}async list(spec={}){let where=this.withActive(spec.where,spec.includeDeleted);return this.query(this.table,{...where?{where}:{},...spec.orderBy?{orderBy:spec.orderBy}:{},...spec.limit!==void 0?{limit:spec.limit}:{},...spec.offset!==void 0?{offset:spec.offset}:{}})}async listByCursor(spec){let dir=spec.direction??"asc",filters=[];if(spec.where)filters.push(spec.where);if(spec.cursor!==void 0)filters.push({col:spec.cursorColumn,op:dir==="asc"?"gt":"lt",value:spec.cursor});let where=this.withActive(filters.length>0?{and:filters}:void 0,spec.includeDeleted),rows=await this.query(this.table,{...where?{where}:{},orderBy:[{col:spec.cursorColumn,dir}],limit:spec.limit}),last=rows[rows.length-1],cursorResultKey=this.resultKeyForColumn(spec.cursorColumn),nextCursor=rows.length===spec.limit&&last?last[cursorResultKey]:void 0;return nextCursor!==void 0?{rows,nextCursor}:{rows}}resultKeyForColumn(column2){for(let[key,value]of Object.entries(this.table))if(value===column2)return key;return column2.name}async count(where,includeDeleted=!1){let condition=this.withActive(where,includeDeleted),compiled=condition?compilePredicate2(condition):void 0,base2=this.db.select({value:count2()}).from(this.table);return(await(compiled?base2.where(compiled):base2))[0]?.value??0}withActive(where,includeDeleted){if(includeDeleted||!this.hasSoftDelete)return where;let table3=this.table;if(!("inUsed"in table3))return where;let active={col:table3.inUsed,op:"eq",value:1};if(!where)return active;return{and:[where,active]}}}});function isPromiseLike2(value){return value!==null&&(typeof value==="object"||typeof value==="function")&&typeof value.then==="function"}function isRequestKeyUniqueViolation2(error51){let msg=error51 instanceof Error?error51.message:String(error51);return msg.includes("UNIQUE constraint failed")&&(msg.includes("idx_inbox_messages_request_key")||msg.includes("inbox_messages.request_key"))}var RequestKeyConflictError2,InboxMessageDao2;var init_inbox_message_dao2=__esm(()=>{init_drizzle_orm();init_entity_dao2();init_inbox_messages2();RequestKeyConflictError2=class RequestKeyConflictError2 extends Error{requestKey;existingId;constructor(requestKey,existingId){super("Request key conflict: key is already bound to another payload"+(existingId?` (existing message id: ${existingId})`:""));this.name="RequestKeyConflictError",this.requestKey=requestKey,this.existingId=existingId}};InboxMessageDao2=class InboxMessageDao2 extends EntityDao2{events;constructor(adapter,options={}){super(adapter,inboxMessages2,[inboxMessages2.id],"inbox_messages");this.events=options.events}async enqueue(fromId,toId,body,inReplyTo){let id=crypto.randomUUID(),now=this.now();return await this.create({id,fromId,toId,body,status:"queued",injectAttempts:0,createdAt:now,updatedAt:now,...inReplyTo!==void 0?{inReplyTo}:{}}),this.emitEvent("message.enqueued",{id,fromId,toId,...inReplyTo!==void 0?{inReplyTo}:{},timestamp:now}),id}async enqueueIdempotent(fromId,toId,body,requestKey,inReplyTo){let id=crypto.randomUUID(),now=this.now();try{await this.create({id,fromId,toId,body,status:"queued",injectAttempts:0,requestKey,createdAt:now,updatedAt:now,...inReplyTo!==void 0?{inReplyTo}:{}})}catch(error51){if(isRequestKeyUniqueViolation2(error51)){let existing=await this.findBy(inboxMessages2.requestKey,requestKey);if(existing&&existing.body===body&&existing.toId===toId)return{id:existing.id,replayed:!0};throw new RequestKeyConflictError2(requestKey,existing?.id??"")}throw error51}return this.emitEvent("message.enqueued",{id,fromId,toId,...inReplyTo!==void 0?{inReplyTo}:{},timestamp:now}),{id,replayed:!1}}async drainPending(toId,options){let limit=options?.limit??100;if(!Number.isInteger(limit)||limit<=0)throw RangeError(`drainPending limit must be a positive integer; received ${limit}`);let now=this.now(),rows=await this.db.update(inboxMessages2).set({status:"injected",injectAttempts:sql`${inboxMessages2.injectAttempts} + 1`,updatedAt:now}).where(sql`${inboxMessages2.id} IN (
288
290
  SELECT id
289
291
  FROM ${inboxMessages2}
290
292
  WHERE to_id = ${toId}
@@ -310,8 +312,26 @@ params: ${params}`);if(this.query=query,this.params=params,this.cause=cause,Erro
310
312
  )
311
313
  AND ${reclaimable}`).returning()}async markProcessing(ids){if(ids.length===0)return;let now=this.now();await this.db.update(queueJobs2).set({status:"processing",processingAt:now,updatedAt:now}).where(and(inArray(queueJobs2.id,ids),eq(queueJobs2.status,"pending")))}async markCompleted(id,attemptToken){let where=attemptToken===void 0?eq(queueJobs2.id,id):and(eq(queueJobs2.id,id),eq(queueJobs2.attemptToken,attemptToken));return(await this.db.update(queueJobs2).set({status:"completed",processingAt:null,attemptToken:null,leaseExpiresAt:null,updatedAt:this.now()}).where(where)).changes===1}async markFailed(id,attempts,error51,attemptToken){let where=attemptToken===void 0?eq(queueJobs2.id,id):and(eq(queueJobs2.id,id),eq(queueJobs2.attemptToken,attemptToken));return(await this.db.update(queueJobs2).set({status:"failed",attempts,lastError:error51,processingAt:null,attemptToken:null,leaseExpiresAt:null,updatedAt:this.now()}).where(where)).changes===1}async markForRetry(id,attempts,errorMessage2,nextRetryAt,attemptToken){let where=attemptToken===void 0?eq(queueJobs2.id,id):and(eq(queueJobs2.id,id),eq(queueJobs2.attemptToken,attemptToken));return(await this.db.update(queueJobs2).set({status:"pending",attempts,lastError:errorMessage2,nextRetryAt,processingAt:null,attemptToken:null,leaseExpiresAt:null,updatedAt:this.now()}).where(where)).changes===1}async renewLease(id,attemptToken,leaseMs){let now=this.now();return(await this.db.update(queueJobs2).set({leaseExpiresAt:now+leaseMs,updatedAt:now}).where(and(eq(queueJobs2.id,id),eq(queueJobs2.attemptToken,attemptToken),eq(queueJobs2.status,"processing")))).changes===1}async resetStuckJobs(visibilityTimeout){let cutoff=this.now()-visibilityTimeout;return await this.db.update(queueJobs2).set({status:"failed",attempts:sql`${queueJobs2.attempts} + 1`,lastError:"stuck job: attempts exhausted",processingAt:null,attemptToken:null,leaseExpiresAt:null,updatedAt:this.now()}).where(sql`${queueJobs2.status} = 'processing' AND ${queueJobs2.processingAt} IS NOT NULL AND ${queueJobs2.processingAt} <= ${cutoff}
312
314
  AND ${queueJobs2.attemptToken} IS NULL AND ${queueJobs2.attempts} + 1 >= ${queueJobs2.maxRetries}`),(await this.db.update(queueJobs2).set({status:"pending",processingAt:null,updatedAt:this.now(),attempts:sql`${queueJobs2.attempts} + 1`}).where(sql`${queueJobs2.status} = 'processing' AND ${queueJobs2.processingAt} IS NOT NULL AND ${queueJobs2.processingAt} <= ${cutoff}
313
- AND ${queueJobs2.attemptToken} IS NULL`)).changes}async failExpiredJobs(){let now=this.now();return(await this.db.update(queueJobs2).set({status:"failed",lastError:"Job expired — not processed before TTL deadline",updatedAt:now,attempts:sql`${queueJobs2.attempts} + 1`,processingAt:null}).where(sql`${queueJobs2.status} = 'pending' AND ${queueJobs2.expiresAt} IS NOT NULL AND ${queueJobs2.expiresAt} <= ${now}`)).changes}}});var exports_dist2={};__export(exports_dist2,{embeddedMigrations:()=>embeddedMigrations2,createDbAdapter:()=>createDbAdapter2,compilePredicate:()=>compilePredicate2,compileOrderBy:()=>compileOrderBy2,applyMigrations:()=>applyMigrations2,RequestKeyConflictError:()=>RequestKeyConflictError2,QueueJobDao:()=>QueueJobDao2,InboxMessageDao:()=>InboxMessageDao2,EntityDao:()=>EntityDao2,BaseDao:()=>BaseDao2});var init_dist5=__esm(()=>{init_base_dao2();init_embedded_migrations2();init_entity_dao2();init_inbox_message_dao2();init_migrate2();init_query_spec2();init_queue_job_dao2()});function getNodeFileSystem(){if(!_nodeFileSystem)_nodeFileSystem=createNodeFileSystem2();return _nodeFileSystem}async function loadNodeConfig(options){let fs2=getNodeFileSystem(),raw=await readYamlConfig(fs2);return buildConfigFromObject(raw??{},options)}async function readYamlConfig(fs2){let candidates=[getProcessEnv().CONFIG_PATH,"config/config.yaml","config/config.example.yaml"].filter((p)=>typeof p==="string"&&p.length>0);for(let candidate of candidates){let resolved=fs2.resolve(candidate);if(await fs2.exists(resolved)){let content=await fs2.readFile(resolved);try{return $parse(content)}catch{}}}return null}var _nodeFileSystem,nodeBunFactory2;var init_runtime_node_bun=__esm(()=>{init_dist2();init_config2();init_db_errors();init_file_system_node();init_process_executor();nodeBunFactory2={runtimeName:"node-bun",capabilities:{hasFilesystem:!0,hasProcessExecution:!0,hasPersistentStorage:!0,hasSqlDatabase:!0},createFileSystem:()=>getNodeFileSystem(),createProcessExecutor:(config3)=>new NodeProcessExecutor2(config3),async loadConfig(options){return loadNodeConfig(options)},async createDbAdapter(config3){let mod;try{mod=await Promise.resolve().then(() => (init_dist5(),exports_dist2))}catch(cause){throw new DbModuleNotInstalledError2(void 0,{cause})}if(typeof mod.createDbAdapter!=="function")throw new DbModuleNotInstalledError2("@gobing-ai/ts-db is installed but does not export createDbAdapter — the installed version may be incompatible or partial.");return mod.createDbAdapter({driver:"bun-sqlite",url:config3.url})}}});var init_context2=()=>{};function normalizeSeparators2(path7){return path7.replaceAll("\\","/")}function isAbsolutePath2(path7){return path7.startsWith("/")||/^[A-Za-z]:\//.test(normalizeSeparators2(path7))}function splitRoot2(path7){let normalized=normalizeSeparators2(path7),drive=normalized.match(/^([A-Za-z]:)(?:\/|$)/);if(drive)return{root:drive[1]??"",rest:normalized.slice((drive[1]??"").length).replace(/^\/+/,"")};if(normalized.startsWith("/"))return{root:"/",rest:normalized.replace(/^\/+/,"")};return{root:"",rest:normalized}}function dirnamePath(path7){let input=normalizeSeparators2(path7),{root}=splitRoot2(input);if(root!==""&&input.replace(/\/+$/,"")===root)return root==="/"?"/":`${root}/`;if(/^\/+$/.test(input))return"/";let normalized=input.replace(/\/+$/,"");if(normalized===""||normalized==="/")return normalized||".";let index2=normalized.lastIndexOf("/");if(index2<0)return".";if(index2===0)return"/";return normalized.slice(0,index2)}function joinPath2(...segments){let filtered=segments.filter((segment)=>segment.length>0).map(normalizeSeparators2);if(filtered.length===0)return".";let absolute=isAbsolutePath2(filtered[0]??""),joined=filtered.join("/").replace(/\/+/g,"/");return absolute?joined:joined.replace(/^\//,"")}function resolvePath3(...segments){let candidates=segments.length===0?[getProcessCwd2()]:segments,resolved="";for(let segment of candidates.map(normalizeSeparators2)){if(segment.length===0)continue;resolved=isAbsolutePath2(segment)?segment:joinPath2(resolved||getProcessCwd2(),segment)}let{root,rest}=splitRoot2(resolved),parts=[],absolute=root!=="";for(let part of rest.split("/")){if(part===""||part===".")continue;if(part===".."){if(parts.length>0)parts.pop();continue}parts.push(part)}if(!absolute)return parts.join("/")||".";if(root==="/")return`/${parts.join("/")}`||"/";return parts.length>0?`${root}/${parts.join("/")}`:`${root}/`}function getProcessCwd2(){return globalThis.process?.cwd?.()??"/"}var SEP2;var init_path2=__esm(()=>{SEP2=globalThis.process?.platform==="win32"?"\\":"/"});async function loadStructuredConfig(path7,options={}){let content=await(options.fileSystem??createNodeFileSystem2()).readFile(path7);return await parseStructuredConfig(content,path7,options)}async function parseStructuredConfig(content,source,options={}){let parsed=source.endsWith(".json")?parseJsonContent(content,source):$parse(content);if(options.validateSchema!==!1)await validateDeclaredJsonSchema(parsed,source,options);return parsed}function parseJsonContent(content,source){try{return JSON.parse(content)}catch(error51){throw new StructuredConfigSchemaError(`Failed to parse JSON config "${source}": ${error51.message}`)}}async function validateDeclaredJsonSchema(value,source,options={}){if(!isObject3(value))return;let schemaRef=value.$schema;if(typeof schemaRef!=="string"||schemaRef.length===0)return;let schemaLocation=resolveSchemaRef(schemaRef,source,options.resolve),schemaText=await readSchema(schemaLocation,options),schema;try{schema=JSON.parse(schemaText)}catch(error51){throw new StructuredConfigSchemaError(`Invalid JSON schema "${schemaLocation}" referenced by "${source}": ${errorMessage2(error51)}`)}if(!isObject3(schema))throw new StructuredConfigSchemaError(`JSON schema "${schemaLocation}" referenced by "${source}" must be an object`);let violations=validateJsonSchema(value,schema,"",schema.$defs??{});if(violations.length>0)throw new StructuredConfigSchemaError(`Configuration "${source}" failed JSON schema validation against "${schemaLocation}": ${violations.map((violation)=>`${violation.path}: ${violation.message}`).join("; ")}`,violations)}function validateJsonSchema(value,schema,path7="",defs={},seenRefs=new Set){let violations=[];if(schema.$ref!==void 0){if(!seenRefs.has(schema.$ref)){let resolved=resolveRef2(schema.$ref,defs,schema.$defs);if(resolved!==void 0){let nextSeen=new Set(seenRefs).add(schema.$ref);violations.push(...validateJsonSchema(value,resolved,path7,defs,nextSeen))}}}if(schema.oneOf!==void 0)violations.push(...validateCombinator(value,schema.oneOf,path7,defs,"oneOf",seenRefs));if(schema.anyOf!==void 0)violations.push(...validateCombinator(value,schema.anyOf,path7,defs,"anyOf",seenRefs));if(schema.const!==void 0&&!jsonEqual(value,schema.const))violations.push({path:path7||"(root)",message:`expected constant ${JSON.stringify(schema.const)}`});if(schema.enum!==void 0&&!schema.enum.some((entry)=>jsonEqual(value,entry)))violations.push({path:path7||"(root)",message:`expected one of ${schema.enum.map(String).join(", ")}`});if(schema.type!==void 0){let types2=Array.isArray(schema.type)?schema.type:[schema.type];if(!types2.some((type)=>matchesType(value,type)))return violations.push({path:path7||"(root)",message:`expected ${types2.join(" or ")}, got ${typeName(value)}`}),violations}let hasObjectKeywords=schema.properties!==void 0||schema.required!==void 0||schema.additionalProperties!==void 0;if(schema.type==="object"||hasObjectKeywords&&isObject3(value))violations.push(...validateObject(value,schema,path7,defs,seenRefs));if(schema.type==="array"||schema.items!==void 0&&Array.isArray(value))violations.push(...validateArray(value,schema,path7,defs,seenRefs));return violations}function validateObject(value,schema,path7,defs,seenRefs){if(!isObject3(value))return[{path:path7||"(root)",message:`expected object, got ${typeName(value)}`}];let violations=[];for(let key of schema.required??[])if(!(key in value))violations.push({path:path7?`${path7}.${key}`:key,message:`missing required field "${key}"`});let properties=schema.properties??{};for(let[key,childSchema]of Object.entries(properties))if(key in value)violations.push(...validateJsonSchema(value[key],childSchema,path7?`${path7}.${key}`:key,defs,seenRefs));if(schema.additionalProperties===!1){let allowed=new Set(Object.keys(properties));for(let key of Object.keys(value))if(!allowed.has(key))violations.push({path:path7?`${path7}.${key}`:key,message:`unknown field "${key}"`})}else if(isObject3(schema.additionalProperties)){for(let[key,child]of Object.entries(value))if(!(key in properties))violations.push(...validateJsonSchema(child,schema.additionalProperties,path7?`${path7}.${key}`:key,defs,seenRefs))}return violations}function validateArray(value,schema,path7,defs,seenRefs){if(!Array.isArray(value))return[{path:path7||"(root)",message:`expected array, got ${typeName(value)}`}];if(schema.items===void 0)return[];return value.flatMap((entry,index2)=>validateJsonSchema(entry,schema.items,`${path7}[${index2}]`,defs,seenRefs))}function validateCombinator(value,schemas3,path7,defs,mode,seenRefs){let branchViolations=schemas3.map((schema)=>validateJsonSchema(value,schema,path7,defs,seenRefs)),passing=branchViolations.filter((violations)=>violations.length===0).length;if(mode==="anyOf"&&passing>=1)return[];if(mode==="oneOf"&&passing===1)return[];let at=path7||"(root)";if(mode==="oneOf"&&passing>1)return[{path:at,message:`expected to match exactly one oneOf branch, matched ${passing}`}];let detail=branchViolations.map((branch,index2)=>`[${index2}] ${branch.map((v)=>`${v.path}: ${v.message}`).join(", ")}`).join(" | ");return[{path:at,message:`expected to match ${mode==="oneOf"?"exactly one":"at least one"} branch — ${detail}`}]}function resolveRef2(ref,defs,localDefs){if(!ref.startsWith("#/$defs/"))return;let name=ref.slice(8);return defs[name]??localDefs?.[name]}function resolveSchemaRef(schemaRef,source,resolve){if(isRemoteRef(schemaRef)||isAbsolutePath2(schemaRef))return schemaRef;if(schemaRef.startsWith("./")||schemaRef.startsWith("../"))return joinPath2(isRemoteRef(source)?".":dirnamePath(source),schemaRef);return resolvePackageSchema(schemaRef,source,resolve)}function resolvePackageSchema(specifier,source,resolve){let resolveFn=resolve??defaultResolve;if(resolveFn===void 0)throw new StructuredConfigSchemaError(`Cannot resolve package schema "${specifier}" referenced by "${source}": no module resolver available`);let{pkg,subpath}=splitPackageSpecifier(specifier);if(subpath.length===0)throw new StructuredConfigSchemaError(`Package schema ref "${specifier}" referenced by "${source}" must include a path within the package`);let from=isRemoteRef(source)?getProcessCwd2():dirnamePath(source);try{let manifest=resolveFn(`${pkg}/package.json`,from);return joinPath2(dirnamePath(manifest),subpath)}catch(error51){throw new StructuredConfigSchemaError(`Cannot resolve package schema "${specifier}" referenced by "${source}": ${errorMessage2(error51)}`)}}function splitPackageSpecifier(specifier){let parts=specifier.split("/"),segments=specifier.startsWith("@")?2:1;return{pkg:parts.slice(0,segments).join("/"),subpath:parts.slice(segments).join("/")}}async function readSchema(schemaLocation,options){if(isRemoteRef(schemaLocation)){if(options.allowRemote!==!0||options.fetch===void 0)throw new StructuredConfigSchemaError(`Refusing to fetch remote JSON schema "${schemaLocation}": pass both allowRemote: true and a fetch implementation to opt in`);let response=await options.fetch(schemaLocation);if(!response.ok)throw new StructuredConfigSchemaError(`Failed to fetch JSON schema "${schemaLocation}": HTTP ${response.status}`);return await readBoundedBody(response,schemaLocation)}return await(options.fileSystem??createNodeFileSystem2()).readFile(schemaLocation)}async function readBoundedBody(response,schemaLocation){let declared=Number(response.headers.get("content-length"));if(Number.isFinite(declared)&&declared>REMOTE_SCHEMA_MAX_BYTES)throw new StructuredConfigSchemaError(`Remote JSON schema "${schemaLocation}" exceeds the ${REMOTE_SCHEMA_MAX_BYTES}-byte limit (Content-Length ${declared})`);let body=response.body;if(body===null)return await response.text();let reader=body.getReader(),chunks=[],total=0;try{while(!0){let{done,value}=await reader.read();if(done)break;if(total+=value.byteLength,total>REMOTE_SCHEMA_MAX_BYTES)throw await reader.cancel(),new StructuredConfigSchemaError(`Remote JSON schema "${schemaLocation}" exceeds the ${REMOTE_SCHEMA_MAX_BYTES}-byte limit`);chunks.push(value)}}finally{reader.releaseLock()}let merged=new Uint8Array(total),offset=0;for(let chunk of chunks)merged.set(chunk,offset),offset+=chunk.byteLength;return new TextDecoder().decode(merged)}function isObject3(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function matchesType(value,type){if(type==="object")return isObject3(value);if(type==="array")return Array.isArray(value);if(type==="integer")return typeof value==="number"&&Number.isInteger(value);if(type==="null")return value===null;return typeof value===type}function typeName(value){if(Array.isArray(value))return"array";if(value===null)return"null";return typeof value}function jsonEqual(left,right){if(left===right)return!0;if(Array.isArray(left)||Array.isArray(right)){if(!Array.isArray(left)||!Array.isArray(right)||left.length!==right.length)return!1;return left.every((entry,index2)=>jsonEqual(entry,right[index2]))}if(isObject3(left)&&isObject3(right)){let keys=Object.keys(left);if(keys.length!==Object.keys(right).length)return!1;return keys.every((key)=>(key in right)&&jsonEqual(left[key],right[key]))}return!1}function errorMessage2(error51){return error51 instanceof Error?error51.message:String(error51)}function isRemoteRef(ref){return/^https?:\/\//i.test(ref)}var REMOTE_SCHEMA_MAX_BYTES=5242880,StructuredConfigSchemaError,defaultResolve;var init_schema_validation2=__esm(()=>{init_dist2();init_file_system_node();init_path2();StructuredConfigSchemaError=class StructuredConfigSchemaError extends Error{violations;constructor(message,violations=[]){super(message);this.violations=violations,this.name="StructuredConfigSchemaError"}};defaultResolve=typeof Bun<"u"?(specifier,from)=>Bun.resolveSync(specifier,from):void 0});var init_types2=()=>{};var init_dist6=__esm(()=>{init_file_system_node();init_process_executor();init_runtime_node_bun();init_config2();init_context2();init_path2();init_schema_validation2();init_types2()});var require_version=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.VERSION=void 0;exports.VERSION="1.9.1"});var require_semver=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.isCompatible=exports._makeCompatibilityCheck=void 0;var version_1=require_version(),re=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;function _makeCompatibilityCheck(ownVersion){let acceptedVersions=new Set([ownVersion]),rejectedVersions=new Set,myVersionMatch=ownVersion.match(re);if(!myVersionMatch)return()=>!1;let ownVersionParsed={major:+myVersionMatch[1],minor:+myVersionMatch[2],patch:+myVersionMatch[3],prerelease:myVersionMatch[4]};if(ownVersionParsed.prerelease!=null)return function(globalVersion){return globalVersion===ownVersion};function _reject(v){return rejectedVersions.add(v),!1}function _accept(v){return acceptedVersions.add(v),!0}return function(globalVersion){if(acceptedVersions.has(globalVersion))return!0;if(rejectedVersions.has(globalVersion))return!1;let globalVersionMatch=globalVersion.match(re);if(!globalVersionMatch)return _reject(globalVersion);let globalVersionParsed={major:+globalVersionMatch[1],minor:+globalVersionMatch[2],patch:+globalVersionMatch[3],prerelease:globalVersionMatch[4]};if(globalVersionParsed.prerelease!=null)return _reject(globalVersion);if(ownVersionParsed.major!==globalVersionParsed.major)return _reject(globalVersion);if(ownVersionParsed.major===0){if(ownVersionParsed.minor===globalVersionParsed.minor&&ownVersionParsed.patch<=globalVersionParsed.patch)return _accept(globalVersion);return _reject(globalVersion)}if(ownVersionParsed.minor<=globalVersionParsed.minor)return _accept(globalVersion);return _reject(globalVersion)}}exports._makeCompatibilityCheck=_makeCompatibilityCheck;exports.isCompatible=_makeCompatibilityCheck(version_1.VERSION)});var require_global_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.unregisterGlobal=exports.getGlobal=exports.registerGlobal=void 0;var version_1=require_version(),semver_1=require_semver(),major=version_1.VERSION.split(".")[0],GLOBAL_OPENTELEMETRY_API_KEY=Symbol.for(`opentelemetry.js.api.${major}`),_global=typeof globalThis==="object"?globalThis:typeof self==="object"?self:typeof window==="object"?window:typeof global==="object"?global:{};function registerGlobal(type,instance,diag,allowOverride=!1){var _a3;let api2=_global[GLOBAL_OPENTELEMETRY_API_KEY]=(_a3=_global[GLOBAL_OPENTELEMETRY_API_KEY])!==null&&_a3!==void 0?_a3:{version:version_1.VERSION};if(!allowOverride&&api2[type]){let err=Error(`@opentelemetry/api: Attempted duplicate registration of API: ${type}`);return diag.error(err.stack||err.message),!1}if(api2.version!==version_1.VERSION){let err=Error(`@opentelemetry/api: Registration of version v${api2.version} for ${type} does not match previously registered API v${version_1.VERSION}`);return diag.error(err.stack||err.message),!1}return api2[type]=instance,diag.debug(`@opentelemetry/api: Registered a global for ${type} v${version_1.VERSION}.`),!0}exports.registerGlobal=registerGlobal;function getGlobal(type){var _a3,_b;let globalVersion=(_a3=_global[GLOBAL_OPENTELEMETRY_API_KEY])===null||_a3===void 0?void 0:_a3.version;if(!globalVersion||!(0,semver_1.isCompatible)(globalVersion))return;return(_b=_global[GLOBAL_OPENTELEMETRY_API_KEY])===null||_b===void 0?void 0:_b[type]}exports.getGlobal=getGlobal;function unregisterGlobal(type,diag){diag.debug(`@opentelemetry/api: Unregistering a global for ${type} v${version_1.VERSION}.`);let api2=_global[GLOBAL_OPENTELEMETRY_API_KEY];if(api2)delete api2[type]}exports.unregisterGlobal=unregisterGlobal});var require_ComponentLogger=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagComponentLogger=void 0;var global_utils_1=require_global_utils();class DiagComponentLogger{constructor(props){this._namespace=props.namespace||"DiagComponentLogger"}debug(...args){return logProxy("debug",this._namespace,args)}error(...args){return logProxy("error",this._namespace,args)}info(...args){return logProxy("info",this._namespace,args)}warn(...args){return logProxy("warn",this._namespace,args)}verbose(...args){return logProxy("verbose",this._namespace,args)}}exports.DiagComponentLogger=DiagComponentLogger;function logProxy(funcName,namespace,args){let logger2=(0,global_utils_1.getGlobal)("diag");if(!logger2)return;return logger2[funcName](namespace,...args)}});var require_types=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagLogLevel=void 0;var DiagLogLevel;(function(DiagLogLevel2){DiagLogLevel2[DiagLogLevel2.NONE=0]="NONE",DiagLogLevel2[DiagLogLevel2.ERROR=30]="ERROR",DiagLogLevel2[DiagLogLevel2.WARN=50]="WARN",DiagLogLevel2[DiagLogLevel2.INFO=60]="INFO",DiagLogLevel2[DiagLogLevel2.DEBUG=70]="DEBUG",DiagLogLevel2[DiagLogLevel2.VERBOSE=80]="VERBOSE",DiagLogLevel2[DiagLogLevel2.ALL=9999]="ALL"})(DiagLogLevel=exports.DiagLogLevel||(exports.DiagLogLevel={}))});var require_logLevelLogger=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createLogLevelDiagLogger=void 0;var types_1=require_types();function createLogLevelDiagLogger(maxLevel,logger2){if(maxLevel<types_1.DiagLogLevel.NONE)maxLevel=types_1.DiagLogLevel.NONE;else if(maxLevel>types_1.DiagLogLevel.ALL)maxLevel=types_1.DiagLogLevel.ALL;logger2=logger2||{};function _filterFunc(funcName,theLevel){let theFunc=logger2[funcName];if(typeof theFunc==="function"&&maxLevel>=theLevel)return theFunc.bind(logger2);return function(){}}return{error:_filterFunc("error",types_1.DiagLogLevel.ERROR),warn:_filterFunc("warn",types_1.DiagLogLevel.WARN),info:_filterFunc("info",types_1.DiagLogLevel.INFO),debug:_filterFunc("debug",types_1.DiagLogLevel.DEBUG),verbose:_filterFunc("verbose",types_1.DiagLogLevel.VERBOSE)}}exports.createLogLevelDiagLogger=createLogLevelDiagLogger});var require_diag=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagAPI=void 0;var ComponentLogger_1=require_ComponentLogger(),logLevelLogger_1=require_logLevelLogger(),types_1=require_types(),global_utils_1=require_global_utils(),API_NAME="diag";class DiagAPI{static instance(){if(!this._instance)this._instance=new DiagAPI;return this._instance}constructor(){function _logProxy(funcName){return function(...args){let logger2=(0,global_utils_1.getGlobal)("diag");if(!logger2)return;return logger2[funcName](...args)}}let self2=this,setLogger=(logger2,optionsOrLogLevel={logLevel:types_1.DiagLogLevel.INFO})=>{var _a3,_b,_c;if(logger2===self2){let err=Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return self2.error((_a3=err.stack)!==null&&_a3!==void 0?_a3:err.message),!1}if(typeof optionsOrLogLevel==="number")optionsOrLogLevel={logLevel:optionsOrLogLevel};let oldLogger=(0,global_utils_1.getGlobal)("diag"),newLogger=(0,logLevelLogger_1.createLogLevelDiagLogger)((_b=optionsOrLogLevel.logLevel)!==null&&_b!==void 0?_b:types_1.DiagLogLevel.INFO,logger2);if(oldLogger&&!optionsOrLogLevel.suppressOverrideMessage){let stack=(_c=Error().stack)!==null&&_c!==void 0?_c:"<failed to generate stacktrace>";oldLogger.warn(`Current logger will be overwritten from ${stack}`),newLogger.warn(`Current logger will overwrite one already registered from ${stack}`)}return(0,global_utils_1.registerGlobal)("diag",newLogger,self2,!0)};self2.setLogger=setLogger,self2.disable=()=>{(0,global_utils_1.unregisterGlobal)(API_NAME,self2)},self2.createComponentLogger=(options)=>{return new ComponentLogger_1.DiagComponentLogger(options)},self2.verbose=_logProxy("verbose"),self2.debug=_logProxy("debug"),self2.info=_logProxy("info"),self2.warn=_logProxy("warn"),self2.error=_logProxy("error")}}exports.DiagAPI=DiagAPI});var require_baggage_impl=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.BaggageImpl=void 0;class BaggageImpl{constructor(entries){this._entries=entries?new Map(entries):new Map}getEntry(key){let entry=this._entries.get(key);if(!entry)return;return Object.assign({},entry)}getAllEntries(){return Array.from(this._entries.entries())}setEntry(key,entry){let newBaggage=new BaggageImpl(this._entries);return newBaggage._entries.set(key,entry),newBaggage}removeEntry(key){let newBaggage=new BaggageImpl(this._entries);return newBaggage._entries.delete(key),newBaggage}removeEntries(...keys){let newBaggage=new BaggageImpl(this._entries);for(let key of keys)newBaggage._entries.delete(key);return newBaggage}clear(){return new BaggageImpl}}exports.BaggageImpl=BaggageImpl});var require_symbol=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.baggageEntryMetadataSymbol=void 0;exports.baggageEntryMetadataSymbol=Symbol("BaggageEntryMetadata")});var require_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.baggageEntryMetadataFromString=exports.createBaggage=void 0;var diag_1=require_diag(),baggage_impl_1=require_baggage_impl(),symbol_1=require_symbol(),diag=diag_1.DiagAPI.instance();function createBaggage(entries={}){return new baggage_impl_1.BaggageImpl(new Map(Object.entries(entries)))}exports.createBaggage=createBaggage;function baggageEntryMetadataFromString(str){if(typeof str!=="string")diag.error(`Cannot create baggage metadata from unknown type: ${typeof str}`),str="";return{__TYPE__:symbol_1.baggageEntryMetadataSymbol,toString(){return str}}}exports.baggageEntryMetadataFromString=baggageEntryMetadataFromString});var require_context=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ROOT_CONTEXT=exports.createContextKey=void 0;function createContextKey(description){return Symbol.for(description)}exports.createContextKey=createContextKey;class BaseContext{constructor(parentContext){let self2=this;self2._currentContext=parentContext?new Map(parentContext):new Map,self2.getValue=(key)=>self2._currentContext.get(key),self2.setValue=(key,value)=>{let context3=new BaseContext(self2._currentContext);return context3._currentContext.set(key,value),context3},self2.deleteValue=(key)=>{let context3=new BaseContext(self2._currentContext);return context3._currentContext.delete(key),context3}}}exports.ROOT_CONTEXT=new BaseContext});var require_consoleLogger=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagConsoleLogger=exports._originalConsoleMethods=void 0;var consoleMap=[{n:"error",c:"error"},{n:"warn",c:"warn"},{n:"info",c:"info"},{n:"debug",c:"debug"},{n:"verbose",c:"trace"}];exports._originalConsoleMethods={};if(typeof console<"u"){let keys=["error","warn","info","debug","trace","log"];for(let key of keys)if(typeof console[key]==="function")exports._originalConsoleMethods[key]=console[key]}class DiagConsoleLogger{constructor(){function _consoleFunc(funcName){return function(...args){let theFunc=exports._originalConsoleMethods[funcName];if(typeof theFunc!=="function")theFunc=exports._originalConsoleMethods.log;if(typeof theFunc!=="function"&&console){if(theFunc=console[funcName],typeof theFunc!=="function")theFunc=console.log}if(typeof theFunc==="function")return theFunc.apply(console,args)}}for(let i2=0;i2<consoleMap.length;i2++)this[consoleMap[i2].n]=_consoleFunc(consoleMap[i2].c)}}exports.DiagConsoleLogger=DiagConsoleLogger});var require_NoopMeter=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createNoopMeter=exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=exports.NOOP_OBSERVABLE_GAUGE_METRIC=exports.NOOP_OBSERVABLE_COUNTER_METRIC=exports.NOOP_UP_DOWN_COUNTER_METRIC=exports.NOOP_HISTOGRAM_METRIC=exports.NOOP_GAUGE_METRIC=exports.NOOP_COUNTER_METRIC=exports.NOOP_METER=exports.NoopObservableUpDownCounterMetric=exports.NoopObservableGaugeMetric=exports.NoopObservableCounterMetric=exports.NoopObservableMetric=exports.NoopHistogramMetric=exports.NoopGaugeMetric=exports.NoopUpDownCounterMetric=exports.NoopCounterMetric=exports.NoopMetric=exports.NoopMeter=void 0;class NoopMeter{constructor(){}createGauge(_name,_options){return exports.NOOP_GAUGE_METRIC}createHistogram(_name,_options){return exports.NOOP_HISTOGRAM_METRIC}createCounter(_name,_options){return exports.NOOP_COUNTER_METRIC}createUpDownCounter(_name,_options){return exports.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(_name,_options){return exports.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(_name,_options){return exports.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(_name,_options){return exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(_callback,_observables){}removeBatchObservableCallback(_callback){}}exports.NoopMeter=NoopMeter;class NoopMetric{}exports.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(_value,_attributes){}}exports.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(_value,_attributes){}}exports.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopGaugeMetric extends NoopMetric{record(_value,_attributes){}}exports.NoopGaugeMetric=NoopGaugeMetric;class NoopHistogramMetric extends NoopMetric{record(_value,_attributes){}}exports.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(_callback){}removeCallback(_callback){}}exports.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}exports.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}exports.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}exports.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;exports.NOOP_METER=new NoopMeter;exports.NOOP_COUNTER_METRIC=new NoopCounterMetric;exports.NOOP_GAUGE_METRIC=new NoopGaugeMetric;exports.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;exports.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;exports.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;exports.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return exports.NOOP_METER}exports.createNoopMeter=createNoopMeter});var require_Metric=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ValueType=void 0;var ValueType;(function(ValueType2){ValueType2[ValueType2.INT=0]="INT",ValueType2[ValueType2.DOUBLE=1]="DOUBLE"})(ValueType=exports.ValueType||(exports.ValueType={}))});var require_TextMapPropagator=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.defaultTextMapSetter=exports.defaultTextMapGetter=void 0;exports.defaultTextMapGetter={get(carrier,key){if(carrier==null)return;return carrier[key]},keys(carrier){if(carrier==null)return[];return Object.keys(carrier)}};exports.defaultTextMapSetter={set(carrier,key,value){if(carrier==null)return;carrier[key]=value}}});var require_NoopContextManager=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopContextManager=void 0;var context_1=require_context();class NoopContextManager{active(){return context_1.ROOT_CONTEXT}with(_context,fn,thisArg,...args){return fn.call(thisArg,...args)}bind(_context,target){return target}enable(){return this}disable(){return this}}exports.NoopContextManager=NoopContextManager});var require_context2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ContextAPI=void 0;var NoopContextManager_1=require_NoopContextManager(),global_utils_1=require_global_utils(),diag_1=require_diag(),API_NAME="context",NOOP_CONTEXT_MANAGER=new NoopContextManager_1.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance)this._instance=new ContextAPI;return this._instance}setGlobalContextManager(contextManager){return(0,global_utils_1.registerGlobal)(API_NAME,contextManager,diag_1.DiagAPI.instance())}active(){return this._getContextManager().active()}with(context3,fn,thisArg,...args){return this._getContextManager().with(context3,fn,thisArg,...args)}bind(context3,target){return this._getContextManager().bind(context3,target)}_getContextManager(){return(0,global_utils_1.getGlobal)(API_NAME)||NOOP_CONTEXT_MANAGER}disable(){this._getContextManager().disable(),(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance())}}exports.ContextAPI=ContextAPI});var require_trace_flags=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.TraceFlags=void 0;var TraceFlags;(function(TraceFlags2){TraceFlags2[TraceFlags2.NONE=0]="NONE",TraceFlags2[TraceFlags2.SAMPLED=1]="SAMPLED"})(TraceFlags=exports.TraceFlags||(exports.TraceFlags={}))});var require_invalid_span_constants=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.INVALID_SPAN_CONTEXT=exports.INVALID_TRACEID=exports.INVALID_SPANID=void 0;var trace_flags_1=require_trace_flags();exports.INVALID_SPANID="0000000000000000";exports.INVALID_TRACEID="00000000000000000000000000000000";exports.INVALID_SPAN_CONTEXT={traceId:exports.INVALID_TRACEID,spanId:exports.INVALID_SPANID,traceFlags:trace_flags_1.TraceFlags.NONE}});var require_NonRecordingSpan=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NonRecordingSpan=void 0;var invalid_span_constants_1=require_invalid_span_constants();class NonRecordingSpan{constructor(spanContext=invalid_span_constants_1.INVALID_SPAN_CONTEXT){this._spanContext=spanContext}spanContext(){return this._spanContext}setAttribute(_key,_value){return this}setAttributes(_attributes){return this}addEvent(_name,_attributes){return this}addLink(_link){return this}addLinks(_links){return this}setStatus(_status){return this}updateName(_name){return this}end(_endTime){}isRecording(){return!1}recordException(_exception,_time){}}exports.NonRecordingSpan=NonRecordingSpan});var require_context_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.getSpanContext=exports.setSpanContext=exports.deleteSpan=exports.setSpan=exports.getActiveSpan=exports.getSpan=void 0;var context_1=require_context(),NonRecordingSpan_1=require_NonRecordingSpan(),context_2=require_context2(),SPAN_KEY=(0,context_1.createContextKey)("OpenTelemetry Context Key SPAN");function getSpan(context3){return context3.getValue(SPAN_KEY)||void 0}exports.getSpan=getSpan;function getActiveSpan(){return getSpan(context_2.ContextAPI.getInstance().active())}exports.getActiveSpan=getActiveSpan;function setSpan(context3,span){return context3.setValue(SPAN_KEY,span)}exports.setSpan=setSpan;function deleteSpan(context3){return context3.deleteValue(SPAN_KEY)}exports.deleteSpan=deleteSpan;function setSpanContext(context3,spanContext){return setSpan(context3,new NonRecordingSpan_1.NonRecordingSpan(spanContext))}exports.setSpanContext=setSpanContext;function getSpanContext(context3){var _a3;return(_a3=getSpan(context3))===null||_a3===void 0?void 0:_a3.spanContext()}exports.getSpanContext=getSpanContext});var require_spancontext_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.wrapSpanContext=exports.isSpanContextValid=exports.isValidSpanId=exports.isValidTraceId=void 0;var invalid_span_constants_1=require_invalid_span_constants(),NonRecordingSpan_1=require_NonRecordingSpan(),isHex=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1]);function isValidHex(id,length){if(typeof id!=="string"||id.length!==length)return!1;let r=0;for(let i2=0;i2<id.length;i2+=4)r+=(isHex[id.charCodeAt(i2)]|0)+(isHex[id.charCodeAt(i2+1)]|0)+(isHex[id.charCodeAt(i2+2)]|0)+(isHex[id.charCodeAt(i2+3)]|0);return r===length}function isValidTraceId(traceId){return isValidHex(traceId,32)&&traceId!==invalid_span_constants_1.INVALID_TRACEID}exports.isValidTraceId=isValidTraceId;function isValidSpanId(spanId){return isValidHex(spanId,16)&&spanId!==invalid_span_constants_1.INVALID_SPANID}exports.isValidSpanId=isValidSpanId;function isSpanContextValid(spanContext){return isValidTraceId(spanContext.traceId)&&isValidSpanId(spanContext.spanId)}exports.isSpanContextValid=isSpanContextValid;function wrapSpanContext(spanContext){return new NonRecordingSpan_1.NonRecordingSpan(spanContext)}exports.wrapSpanContext=wrapSpanContext});var require_NoopTracer=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopTracer=void 0;var context_1=require_context2(),context_utils_1=require_context_utils(),NonRecordingSpan_1=require_NonRecordingSpan(),spancontext_utils_1=require_spancontext_utils(),contextApi=context_1.ContextAPI.getInstance();class NoopTracer{startSpan(name,options,context3=contextApi.active()){if(Boolean(options===null||options===void 0?void 0:options.root))return new NonRecordingSpan_1.NonRecordingSpan;let parentFromContext=context3&&(0,context_utils_1.getSpanContext)(context3);if(isSpanContext(parentFromContext)&&(0,spancontext_utils_1.isSpanContextValid)(parentFromContext))return new NonRecordingSpan_1.NonRecordingSpan(parentFromContext);else return new NonRecordingSpan_1.NonRecordingSpan}startActiveSpan(name,arg2,arg3,arg4){let opts,ctx,fn;if(arguments.length<2)return;else if(arguments.length===2)fn=arg2;else if(arguments.length===3)opts=arg2,fn=arg3;else opts=arg2,ctx=arg3,fn=arg4;let parentContext=ctx!==null&&ctx!==void 0?ctx:contextApi.active(),span=this.startSpan(name,opts,parentContext),contextWithSpanSet=(0,context_utils_1.setSpan)(parentContext,span);return contextApi.with(contextWithSpanSet,fn,void 0,span)}}exports.NoopTracer=NoopTracer;function isSpanContext(spanContext){return spanContext!==null&&typeof spanContext==="object"&&"spanId"in spanContext&&typeof spanContext.spanId==="string"&&"traceId"in spanContext&&typeof spanContext.traceId==="string"&&"traceFlags"in spanContext&&typeof spanContext.traceFlags==="number"}});var require_ProxyTracer=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ProxyTracer=void 0;var NoopTracer_1=require_NoopTracer(),NOOP_TRACER=new NoopTracer_1.NoopTracer;class ProxyTracer{constructor(provider,name,version3,options){this._provider=provider,this.name=name,this.version=version3,this.options=options}startSpan(name,options,context3){return this._getTracer().startSpan(name,options,context3)}startActiveSpan(_name,_options,_context,_fn){let tracer2=this._getTracer();return Reflect.apply(tracer2.startActiveSpan,tracer2,arguments)}_getTracer(){if(this._delegate)return this._delegate;let tracer2=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!tracer2)return NOOP_TRACER;return this._delegate=tracer2,this._delegate}}exports.ProxyTracer=ProxyTracer});var require_NoopTracerProvider=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopTracerProvider=void 0;var NoopTracer_1=require_NoopTracer();class NoopTracerProvider{getTracer(_name,_version,_options){return new NoopTracer_1.NoopTracer}}exports.NoopTracerProvider=NoopTracerProvider});var require_ProxyTracerProvider=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ProxyTracerProvider=void 0;var ProxyTracer_1=require_ProxyTracer(),NoopTracerProvider_1=require_NoopTracerProvider(),NOOP_TRACER_PROVIDER=new NoopTracerProvider_1.NoopTracerProvider;class ProxyTracerProvider{getTracer(name,version3,options){var _a3;return(_a3=this.getDelegateTracer(name,version3,options))!==null&&_a3!==void 0?_a3:new ProxyTracer_1.ProxyTracer(this,name,version3,options)}getDelegate(){var _a3;return(_a3=this._delegate)!==null&&_a3!==void 0?_a3:NOOP_TRACER_PROVIDER}setDelegate(delegate){this._delegate=delegate}getDelegateTracer(name,version3,options){var _a3;return(_a3=this._delegate)===null||_a3===void 0?void 0:_a3.getTracer(name,version3,options)}}exports.ProxyTracerProvider=ProxyTracerProvider});var require_SamplingResult=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SamplingDecision=void 0;var SamplingDecision;(function(SamplingDecision2){SamplingDecision2[SamplingDecision2.NOT_RECORD=0]="NOT_RECORD",SamplingDecision2[SamplingDecision2.RECORD=1]="RECORD",SamplingDecision2[SamplingDecision2.RECORD_AND_SAMPLED=2]="RECORD_AND_SAMPLED"})(SamplingDecision=exports.SamplingDecision||(exports.SamplingDecision={}))});var require_span_kind=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SpanKind=void 0;var SpanKind;(function(SpanKind2){SpanKind2[SpanKind2.INTERNAL=0]="INTERNAL",SpanKind2[SpanKind2.SERVER=1]="SERVER",SpanKind2[SpanKind2.CLIENT=2]="CLIENT",SpanKind2[SpanKind2.PRODUCER=3]="PRODUCER",SpanKind2[SpanKind2.CONSUMER=4]="CONSUMER"})(SpanKind=exports.SpanKind||(exports.SpanKind={}))});var require_status=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SpanStatusCode=void 0;var SpanStatusCode;(function(SpanStatusCode2){SpanStatusCode2[SpanStatusCode2.UNSET=0]="UNSET",SpanStatusCode2[SpanStatusCode2.OK=1]="OK",SpanStatusCode2[SpanStatusCode2.ERROR=2]="ERROR"})(SpanStatusCode=exports.SpanStatusCode||(exports.SpanStatusCode={}))});var require_tracestate_validators=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.validateValue=exports.validateKey=void 0;var VALID_KEY_CHAR_RANGE="[_0-9a-z-*/]",VALID_KEY=`[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`,VALID_VENDOR_KEY=`[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`,VALID_KEY_REGEX=new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`),VALID_VALUE_BASE_REGEX=/^[ -~]{0,255}[!-~]$/,INVALID_VALUE_COMMA_EQUAL_REGEX=/,|=/;function validateKey(key){return VALID_KEY_REGEX.test(key)}exports.validateKey=validateKey;function validateValue(value){return VALID_VALUE_BASE_REGEX.test(value)&&!INVALID_VALUE_COMMA_EQUAL_REGEX.test(value)}exports.validateValue=validateValue});var require_tracestate_impl=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.TraceStateImpl=void 0;var tracestate_validators_1=require_tracestate_validators(),MAX_TRACE_STATE_ITEMS=32,MAX_TRACE_STATE_LEN=512,LIST_MEMBERS_SEPARATOR=",",LIST_MEMBER_KEY_VALUE_SPLITTER="=";class TraceStateImpl{constructor(rawTraceState){if(this._internalState=new Map,rawTraceState)this._parse(rawTraceState)}set(key,value){let traceState=this._clone();if(traceState._internalState.has(key))traceState._internalState.delete(key);return traceState._internalState.set(key,value),traceState}unset(key){let traceState=this._clone();return traceState._internalState.delete(key),traceState}get(key){return this._internalState.get(key)}serialize(){return Array.from(this._internalState.keys()).reduceRight((agg,key)=>{return agg.push(key+LIST_MEMBER_KEY_VALUE_SPLITTER+this.get(key)),agg},[]).join(LIST_MEMBERS_SEPARATOR)}_parse(rawTraceState){if(rawTraceState.length>MAX_TRACE_STATE_LEN)return;if(this._internalState=rawTraceState.split(LIST_MEMBERS_SEPARATOR).reduceRight((agg,part)=>{let listMember=part.trim(),i2=listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER);if(i2!==-1){let key=listMember.slice(0,i2),value=listMember.slice(i2+1,part.length);if((0,tracestate_validators_1.validateKey)(key)&&(0,tracestate_validators_1.validateValue)(value))agg.set(key,value)}return agg},new Map),this._internalState.size>MAX_TRACE_STATE_ITEMS)this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,MAX_TRACE_STATE_ITEMS))}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){let traceState=new TraceStateImpl;return traceState._internalState=new Map(this._internalState),traceState}}exports.TraceStateImpl=TraceStateImpl});var require_utils2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createTraceState=void 0;var tracestate_impl_1=require_tracestate_impl();function createTraceState(rawTraceState){return new tracestate_impl_1.TraceStateImpl(rawTraceState)}exports.createTraceState=createTraceState});var require_context_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.context=void 0;var context_1=require_context2();exports.context=context_1.ContextAPI.getInstance()});var require_diag_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.diag=void 0;var diag_1=require_diag();exports.diag=diag_1.DiagAPI.instance()});var require_NoopMeterProvider=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NOOP_METER_PROVIDER=exports.NoopMeterProvider=void 0;var NoopMeter_1=require_NoopMeter();class NoopMeterProvider{getMeter(_name,_version,_options){return NoopMeter_1.NOOP_METER}}exports.NoopMeterProvider=NoopMeterProvider;exports.NOOP_METER_PROVIDER=new NoopMeterProvider});var require_metrics=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.MetricsAPI=void 0;var NoopMeterProvider_1=require_NoopMeterProvider(),global_utils_1=require_global_utils(),diag_1=require_diag(),API_NAME="metrics";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance)this._instance=new MetricsAPI;return this._instance}setGlobalMeterProvider(provider){return(0,global_utils_1.registerGlobal)(API_NAME,provider,diag_1.DiagAPI.instance())}getMeterProvider(){return(0,global_utils_1.getGlobal)(API_NAME)||NoopMeterProvider_1.NOOP_METER_PROVIDER}getMeter(name,version3,options){return this.getMeterProvider().getMeter(name,version3,options)}disable(){(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance())}}exports.MetricsAPI=MetricsAPI});var require_metrics_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.metrics=void 0;var metrics_1=require_metrics();exports.metrics=metrics_1.MetricsAPI.getInstance()});var require_NoopTextMapPropagator=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(_context,_carrier){}extract(context3,_carrier){return context3}fields(){return[]}}exports.NoopTextMapPropagator=NoopTextMapPropagator});var require_context_helpers=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.deleteBaggage=exports.setBaggage=exports.getActiveBaggage=exports.getBaggage=void 0;var context_1=require_context2(),context_2=require_context(),BAGGAGE_KEY=(0,context_2.createContextKey)("OpenTelemetry Baggage Key");function getBaggage(context3){return context3.getValue(BAGGAGE_KEY)||void 0}exports.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(context_1.ContextAPI.getInstance().active())}exports.getActiveBaggage=getActiveBaggage;function setBaggage(context3,baggage){return context3.setValue(BAGGAGE_KEY,baggage)}exports.setBaggage=setBaggage;function deleteBaggage(context3){return context3.deleteValue(BAGGAGE_KEY)}exports.deleteBaggage=deleteBaggage});var require_propagation=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.PropagationAPI=void 0;var global_utils_1=require_global_utils(),NoopTextMapPropagator_1=require_NoopTextMapPropagator(),TextMapPropagator_1=require_TextMapPropagator(),context_helpers_1=require_context_helpers(),utils_1=require_utils(),diag_1=require_diag(),API_NAME="propagation",NOOP_TEXT_MAP_PROPAGATOR=new NoopTextMapPropagator_1.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=utils_1.createBaggage,this.getBaggage=context_helpers_1.getBaggage,this.getActiveBaggage=context_helpers_1.getActiveBaggage,this.setBaggage=context_helpers_1.setBaggage,this.deleteBaggage=context_helpers_1.deleteBaggage}static getInstance(){if(!this._instance)this._instance=new PropagationAPI;return this._instance}setGlobalPropagator(propagator){return(0,global_utils_1.registerGlobal)(API_NAME,propagator,diag_1.DiagAPI.instance())}inject(context3,carrier,setter=TextMapPropagator_1.defaultTextMapSetter){return this._getGlobalPropagator().inject(context3,carrier,setter)}extract(context3,carrier,getter=TextMapPropagator_1.defaultTextMapGetter){return this._getGlobalPropagator().extract(context3,carrier,getter)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance())}_getGlobalPropagator(){return(0,global_utils_1.getGlobal)(API_NAME)||NOOP_TEXT_MAP_PROPAGATOR}}exports.PropagationAPI=PropagationAPI});var require_propagation_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.propagation=void 0;var propagation_1=require_propagation();exports.propagation=propagation_1.PropagationAPI.getInstance()});var require_trace=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.TraceAPI=void 0;var global_utils_1=require_global_utils(),ProxyTracerProvider_1=require_ProxyTracerProvider(),spancontext_utils_1=require_spancontext_utils(),context_utils_1=require_context_utils(),diag_1=require_diag(),API_NAME="trace";class TraceAPI{constructor(){this._proxyTracerProvider=new ProxyTracerProvider_1.ProxyTracerProvider,this.wrapSpanContext=spancontext_utils_1.wrapSpanContext,this.isSpanContextValid=spancontext_utils_1.isSpanContextValid,this.deleteSpan=context_utils_1.deleteSpan,this.getSpan=context_utils_1.getSpan,this.getActiveSpan=context_utils_1.getActiveSpan,this.getSpanContext=context_utils_1.getSpanContext,this.setSpan=context_utils_1.setSpan,this.setSpanContext=context_utils_1.setSpanContext}static getInstance(){if(!this._instance)this._instance=new TraceAPI;return this._instance}setGlobalTracerProvider(provider){let success2=(0,global_utils_1.registerGlobal)(API_NAME,this._proxyTracerProvider,diag_1.DiagAPI.instance());if(success2)this._proxyTracerProvider.setDelegate(provider);return success2}getTracerProvider(){return(0,global_utils_1.getGlobal)(API_NAME)||this._proxyTracerProvider}getTracer(name,version3){return this.getTracerProvider().getTracer(name,version3)}disable(){(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance()),this._proxyTracerProvider=new ProxyTracerProvider_1.ProxyTracerProvider}}exports.TraceAPI=TraceAPI});var require_trace_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.trace=void 0;var trace_1=require_trace();exports.trace=trace_1.TraceAPI.getInstance()});var require_src=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.trace=exports.propagation=exports.metrics=exports.diag=exports.context=exports.INVALID_SPAN_CONTEXT=exports.INVALID_TRACEID=exports.INVALID_SPANID=exports.isValidSpanId=exports.isValidTraceId=exports.isSpanContextValid=exports.createTraceState=exports.TraceFlags=exports.SpanStatusCode=exports.SpanKind=exports.SamplingDecision=exports.ProxyTracerProvider=exports.ProxyTracer=exports.defaultTextMapSetter=exports.defaultTextMapGetter=exports.ValueType=exports.createNoopMeter=exports.DiagLogLevel=exports.DiagConsoleLogger=exports.ROOT_CONTEXT=exports.createContextKey=exports.baggageEntryMetadataFromString=void 0;var utils_1=require_utils();Object.defineProperty(exports,"baggageEntryMetadataFromString",{enumerable:!0,get:function(){return utils_1.baggageEntryMetadataFromString}});var context_1=require_context();Object.defineProperty(exports,"createContextKey",{enumerable:!0,get:function(){return context_1.createContextKey}});Object.defineProperty(exports,"ROOT_CONTEXT",{enumerable:!0,get:function(){return context_1.ROOT_CONTEXT}});var consoleLogger_1=require_consoleLogger();Object.defineProperty(exports,"DiagConsoleLogger",{enumerable:!0,get:function(){return consoleLogger_1.DiagConsoleLogger}});var types_1=require_types();Object.defineProperty(exports,"DiagLogLevel",{enumerable:!0,get:function(){return types_1.DiagLogLevel}});var NoopMeter_1=require_NoopMeter();Object.defineProperty(exports,"createNoopMeter",{enumerable:!0,get:function(){return NoopMeter_1.createNoopMeter}});var Metric_1=require_Metric();Object.defineProperty(exports,"ValueType",{enumerable:!0,get:function(){return Metric_1.ValueType}});var TextMapPropagator_1=require_TextMapPropagator();Object.defineProperty(exports,"defaultTextMapGetter",{enumerable:!0,get:function(){return TextMapPropagator_1.defaultTextMapGetter}});Object.defineProperty(exports,"defaultTextMapSetter",{enumerable:!0,get:function(){return TextMapPropagator_1.defaultTextMapSetter}});var ProxyTracer_1=require_ProxyTracer();Object.defineProperty(exports,"ProxyTracer",{enumerable:!0,get:function(){return ProxyTracer_1.ProxyTracer}});var ProxyTracerProvider_1=require_ProxyTracerProvider();Object.defineProperty(exports,"ProxyTracerProvider",{enumerable:!0,get:function(){return ProxyTracerProvider_1.ProxyTracerProvider}});var SamplingResult_1=require_SamplingResult();Object.defineProperty(exports,"SamplingDecision",{enumerable:!0,get:function(){return SamplingResult_1.SamplingDecision}});var span_kind_1=require_span_kind();Object.defineProperty(exports,"SpanKind",{enumerable:!0,get:function(){return span_kind_1.SpanKind}});var status_1=require_status();Object.defineProperty(exports,"SpanStatusCode",{enumerable:!0,get:function(){return status_1.SpanStatusCode}});var trace_flags_1=require_trace_flags();Object.defineProperty(exports,"TraceFlags",{enumerable:!0,get:function(){return trace_flags_1.TraceFlags}});var utils_2=require_utils2();Object.defineProperty(exports,"createTraceState",{enumerable:!0,get:function(){return utils_2.createTraceState}});var spancontext_utils_1=require_spancontext_utils();Object.defineProperty(exports,"isSpanContextValid",{enumerable:!0,get:function(){return spancontext_utils_1.isSpanContextValid}});Object.defineProperty(exports,"isValidTraceId",{enumerable:!0,get:function(){return spancontext_utils_1.isValidTraceId}});Object.defineProperty(exports,"isValidSpanId",{enumerable:!0,get:function(){return spancontext_utils_1.isValidSpanId}});var invalid_span_constants_1=require_invalid_span_constants();Object.defineProperty(exports,"INVALID_SPANID",{enumerable:!0,get:function(){return invalid_span_constants_1.INVALID_SPANID}});Object.defineProperty(exports,"INVALID_TRACEID",{enumerable:!0,get:function(){return invalid_span_constants_1.INVALID_TRACEID}});Object.defineProperty(exports,"INVALID_SPAN_CONTEXT",{enumerable:!0,get:function(){return invalid_span_constants_1.INVALID_SPAN_CONTEXT}});var context_api_1=require_context_api();Object.defineProperty(exports,"context",{enumerable:!0,get:function(){return context_api_1.context}});var diag_api_1=require_diag_api();Object.defineProperty(exports,"diag",{enumerable:!0,get:function(){return diag_api_1.diag}});var metrics_api_1=require_metrics_api();Object.defineProperty(exports,"metrics",{enumerable:!0,get:function(){return metrics_api_1.metrics}});var propagation_api_1=require_propagation_api();Object.defineProperty(exports,"propagation",{enumerable:!0,get:function(){return propagation_api_1.propagation}});var trace_api_1=require_trace_api();Object.defineProperty(exports,"trace",{enumerable:!0,get:function(){return trace_api_1.trace}});exports.default={context:context_api_1.context,diag:diag_api_1.diag,metrics:metrics_api_1.metrics,propagation:propagation_api_1.propagation,trace:trace_api_1.trace}});function getCategoryPrefix(){let store=LoggerImpl.getLogger().contextLocalStorage?.getStore();if(store==null)return[];let prefix=store[categoryPrefixSymbol];return Array.isArray(prefix)?prefix:[]}function getImplicitContext(){let store=LoggerImpl.getLogger().contextLocalStorage?.getStore();if(store==null)return{};let result={};for(let key of Object.keys(store))result[key]=store[key];return result}var categoryPrefixSymbol;var init_context3=__esm(()=>{init_logger2();categoryPrefixSymbol=Symbol.for("logtape.categoryPrefix")});function compareLogLevel(a2,b){let aIndex=logLevels.indexOf(a2);if(aIndex<0)throw TypeError(`Invalid log level: ${JSON.stringify(a2)}.`);let bIndex=logLevels.indexOf(b);if(bIndex<0)throw TypeError(`Invalid log level: ${JSON.stringify(b)}.`);return aIndex-bIndex}var logLevels;var init_level=__esm(()=>{logLevels=["trace","debug","info","warning","error","fatal"]});function isLazy(value){return value!=null&&typeof value==="object"&&lazySymbol in value&&value[lazySymbol]===!0}function resolveProperties(properties){let resolved={};for(let key in properties){let value=properties[key];resolved[key]=isLazy(value)?value.getter():value}let symbolProperties=properties,symbolResolved=resolved;if(Object.prototype.propertyIsEnumerable.call(properties,throttlingSummaryRecordSymbol)){let value=symbolProperties[throttlingSummaryRecordSymbol];symbolResolved[throttlingSummaryRecordSymbol]=isLazy(value)?value.getter():value}return resolved}function isPromiseObject(value){if(value instanceof Promise)return!0;return Object.prototype.toString.call(value)==="[object Promise]"&&typeof value.then==="function"}function logStringMessage(logger2,level,message,props){if(typeof props!=="function"){let properties=props??{};logger2.log(level,message,properties);return}if(!logger2.isEnabledFor(level))return Promise.resolve();let result=props();if(isPromiseObject(result))return Promise.resolve(result).then((resolvedProps)=>{logger2.log(level,message,resolvedProps)});logger2.log(level,message,result)}function snapshotLogRecordProperties(record2){let properties=resolveProperties(record2.properties),descriptors2=Object.getOwnPropertyDescriptors(record2);return descriptors2.properties={value:properties,enumerable:!0,configurable:!0},Object.defineProperties({},descriptors2)}function getLogger(category=[]){return LoggerImpl.getLogger(category)}function isMetaLoggerCategory(category){return category.length===2&&category[0]==="logtape"&&category[1]==="meta"}function isNestedAccess(key){return key.includes(".")||key.includes("[")||key.includes("?.")}function getOwnProperty(obj,key){if(key==="__proto__"||key==="prototype"||key==="constructor")return;if((typeof obj==="object"||typeof obj==="function")&&obj!==null)return Object.prototype.hasOwnProperty.call(obj,key)?obj[key]:void 0;return}function parseNextSegment(path8,fromIndex){let len=path8.length,i2=fromIndex;if(i2>=len)return null;let segment;if(path8[i2]==="["){if(i2++,i2>=len)return null;if(path8[i2]==='"'||path8[i2]==="'"){let quote=path8[i2];i2++;let segmentStr="";while(i2<len&&path8[i2]!==quote)if(path8[i2]==="\\"){if(i2++,i2<len){let escapeChar=path8[i2];switch(escapeChar){case"n":segmentStr+=`
314
- `;break;case"t":segmentStr+="\t";break;case"r":segmentStr+="\r";break;case"b":segmentStr+="\b";break;case"f":segmentStr+="\f";break;case"v":segmentStr+="\v";break;case"0":segmentStr+="\x00";break;case"\\":segmentStr+="\\";break;case'"':segmentStr+='"';break;case"'":segmentStr+="'";break;case"u":if(i2+4<len){let hex3=path8.slice(i2+1,i2+5),codePoint=Number.parseInt(hex3,16);if(!Number.isNaN(codePoint))segmentStr+=String.fromCharCode(codePoint),i2+=4;else segmentStr+=escapeChar}else segmentStr+=escapeChar;break;default:segmentStr+=escapeChar}i2++}}else segmentStr+=path8[i2],i2++;if(i2>=len)return null;segment=segmentStr,i2++}else{let startIndex=i2;while(i2<len&&path8[i2]!=="]"&&path8[i2]!=="'"&&path8[i2]!=='"')i2++;if(i2>=len)return null;let indexStr=path8.slice(startIndex,i2);if(indexStr.length===0)return null;let indexNum=Number(indexStr);segment=Number.isNaN(indexNum)?indexStr:indexNum}while(i2<len&&path8[i2]!=="]")i2++;if(i2<len)i2++}else{let startIndex=i2;while(i2<len&&path8[i2]!=="."&&path8[i2]!=="["&&path8[i2]!=="?"&&path8[i2]!=="]")i2++;if(segment=path8.slice(startIndex,i2),segment.length===0)return null}if(i2<len&&path8[i2]===".")i2++;return{segment,nextIndex:i2}}function accessProperty(obj,segment){if(typeof segment==="string")return getOwnProperty(obj,segment);if(Array.isArray(obj)&&segment>=0&&segment<obj.length)return obj[segment];return}function resolvePropertyPath(obj,path8){if(obj==null)return;if(path8.length===0||path8.endsWith("."))return;let current=obj,i2=0,len=path8.length;while(i2<len){if(path8.slice(i2,i2+2)==="?."){if(i2+=2,current==null)return}else if(current==null)return;let result=parseNextSegment(path8,i2);if(result===null)return;let{segment,nextIndex}=result;if(i2=nextIndex,current=accessProperty(current,segment),current===void 0)return}return current}function parseMessageTemplate(template,properties){let length=template.length;if(length===0)return[""];if(!template.includes("{"))return[template];let message=[],startIndex=0;for(let i2=0;i2<length;i2++){let char=template[i2];if(char==="{"){if((i2+1<length?template[i2+1]:"")==="{"){i2++;continue}let closeIndex=template.indexOf("}",i2+1);if(closeIndex===-1)continue;let beforeText=template.slice(startIndex,i2);message.push(beforeText.replace(/{{/g,"{").replace(/}}/g,"}"));let key=template.slice(i2+1,closeIndex),prop,trimmedKey=key.trim();if(trimmedKey==="*")prop=key in properties?properties[key]:("*"in properties)?properties["*"]:properties;else{if(key!==trimmedKey)prop=key in properties?properties[key]:properties[trimmedKey];else prop=properties[key];if(prop===void 0&&isNestedAccess(trimmedKey))prop=resolvePropertyPath(properties,trimmedKey)}message.push(prop),i2=closeIndex,startIndex=i2+1}else if(char==="}"&&i2+1<length&&template[i2+1]==="}")i2++}let remainingText=template.slice(startIndex);return message.push(remainingText.replace(/{{/g,"{").replace(/}}/g,"}")),message}function renderMessage(template,values){let args=[];for(let i2=0;i2<template.length;i2++)if(args.push(template[i2]),i2<values.length)args.push(values[i2]);return args}var lazySymbol,throttlingSummaryRecordSymbol,globalRootLoggerSymbol,LoggerImpl=class LoggerImpl2{parent;children;category;sinks;parentSinks="inherit";filters;lowestLevel="trace";contextLocalStorage;static getLogger(category=[]){let rootLogger=globalRootLoggerSymbol in globalThis?globalThis[globalRootLoggerSymbol]??null:null;if(rootLogger==null)rootLogger=new LoggerImpl2(null,[]),globalThis[globalRootLoggerSymbol]=rootLogger;if(typeof category==="string")return rootLogger.getChild(category);if(category.length===0)return rootLogger;return rootLogger.getChild(category)}static getNearestExistingLogger(category){let logger2=LoggerImpl2.getLogger();for(let name of category){let childRef=logger2.children[name],child=childRef instanceof LoggerImpl2?childRef:childRef?.deref();if(child==null)break;logger2=child}return logger2}constructor(parent,category){this.parent=parent,this.children={},this.category=category,this.sinks=[],this.filters=[]}getChild(subcategory){let name=typeof subcategory==="string"?subcategory:subcategory[0],childRef=this.children[name],child=childRef instanceof LoggerImpl2?childRef:childRef?.deref();if(child==null)child=new LoggerImpl2(this,[...this.category,name]),this.children[name]="WeakRef"in globalThis?new WeakRef(child):child;if(typeof subcategory==="string"||subcategory.length===1)return child;return child.getChild(subcategory.slice(1))}reset(){while(this.sinks.length>0)this.sinks.shift();this.parentSinks="inherit";while(this.filters.length>0)this.filters.shift();this.lowestLevel="trace"}resetDescendants(){for(let child of Object.values(this.children)){let logger2=child instanceof LoggerImpl2?child:child.deref();if(logger2!=null)logger2.resetDescendants()}this.reset()}with(properties){return new LoggerCtx(this,{...properties})}filter(record2){for(let filter of this.filters)if(!filter(record2))return!1;if(this.filters.length<1)return this.parent?.filter(record2)??!0;return!0}*getSinks(level){if(this.lowestLevel===null||compareLogLevel(level,this.lowestLevel)<0)return;if(this.parent!=null&&this.parentSinks==="inherit")for(let sink of this.parent.getSinks(level))yield sink;for(let sink of this.sinks)yield sink}isEnabledFor(level){let categoryPrefix=isMetaLoggerCategory(this.category)?[]:getCategoryPrefix();return(categoryPrefix.length>0?LoggerImpl2.getNearestExistingLogger([...categoryPrefix,...this.category]):this).isEnabledForResolved(level)}isEnabledForResolved(level){if(this.lowestLevel===null||compareLogLevel(level,this.lowestLevel)<0)return!1;for(let _ of this.getSinks(level))return!0;return!1}emit(record2,bypassSinks){let baseCategory="category"in record2?record2.category:this.category,categoryPrefix=isMetaLoggerCategory(baseCategory)?[]:getCategoryPrefix(),fullCategory=categoryPrefix.length>0?[...categoryPrefix,...baseCategory]:baseCategory,descriptors2=Object.getOwnPropertyDescriptors(record2);descriptors2.category={value:fullCategory,enumerable:!0,configurable:!0};let fullRecord=Object.defineProperties({},descriptors2);(categoryPrefix.length>0?LoggerImpl2.getNearestExistingLogger(fullCategory):this).emitResolved(fullRecord,bypassSinks)}emitResolved(record2,bypassSinks){if(this.lowestLevel===null||compareLogLevel(record2.level,this.lowestLevel)<0||!this.filter(record2))return;let sinks=[...this.getSinks(record2.level)];if(sinks.length<1)return;let snapshot,snapshotFailed=!1;for(let sink of sinks){if(bypassSinks?.has(sink))continue;try{if(snapshot==null&&!snapshotFailed)try{snapshot=snapshotLogRecordProperties(record2)}catch{snapshotFailed=!0,snapshot=record2}sink(snapshot??record2)}catch(error51){let bypassSinks2=new Set(bypassSinks);bypassSinks2.add(sink),metaLogger.log("fatal","Failed to emit a log record to sink {sink}: {error}",{sink,error:error51,record:record2},bypassSinks2)}}}log(level,rawMessage,properties,bypassSinks){let implicitContext=getImplicitContext(),cachedProps=void 0,cachedMessage=void 0,record2=typeof properties==="function"?{category:this.category,level,timestamp:Date.now(),get message(){if(cachedMessage==null)cachedMessage=parseMessageTemplate(rawMessage,this.properties);return cachedMessage},rawMessage,get properties(){if(cachedProps==null)cachedProps=resolveProperties({...implicitContext,...properties()});return cachedProps}}:{category:this.category,level,timestamp:Date.now(),get message(){if(cachedMessage==null)cachedMessage=parseMessageTemplate(rawMessage,this.properties);return cachedMessage},rawMessage,get properties(){if(cachedProps==null)cachedProps=resolveProperties({...implicitContext,...properties});return cachedProps}};this.emit(record2,bypassSinks)}logLazily(level,callback,properties={}){let implicitContext=getImplicitContext(),rawMessage=void 0,msg=void 0;function realizeMessage(){if(msg==null||rawMessage==null){if(msg=callback((tpl,...values)=>{return rawMessage=tpl,renderMessage(tpl,values)}),rawMessage==null)throw TypeError("No log record was made.")}return[msg,rawMessage]}this.emit({category:this.category,level,get message(){return realizeMessage()[0]},get rawMessage(){return realizeMessage()[1]},timestamp:Date.now(),properties:{...implicitContext,...properties}})}logTemplate(level,messageTemplate,values,properties={}){let implicitContext=getImplicitContext();this.emit({category:this.category,level,message:renderMessage(messageTemplate,values),rawMessage:messageTemplate,timestamp:Date.now(),properties:{...implicitContext,...properties}})}trace(message,...values){if(typeof message==="string")return logStringMessage(this,"trace",message,values[0]);else if(typeof message==="function")this.logLazily("trace",message);else if(!Array.isArray(message))this.log("trace","{*}",message);else this.logTemplate("trace",message,values)}debug(message,...values){if(typeof message==="string")return logStringMessage(this,"debug",message,values[0]);else if(typeof message==="function")this.logLazily("debug",message);else if(!Array.isArray(message))this.log("debug","{*}",message);else this.logTemplate("debug",message,values)}info(message,...values){if(typeof message==="string")return logStringMessage(this,"info",message,values[0]);else if(typeof message==="function")this.logLazily("info",message);else if(!Array.isArray(message))this.log("info","{*}",message);else this.logTemplate("info",message,values)}logError(level,error51,props){if(typeof props!=="function"){this.log(level,"{error.message}",{...props,error:error51});return}if(!this.isEnabledFor(level))return Promise.resolve();let result=props();if(result instanceof Promise)return result.then((resolved)=>{this.log(level,"{error.message}",{...resolved,error:error51})});this.log(level,"{error.message}",{...result,error:error51})}warn(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}warning(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}error(message,...values){if(message instanceof Error)return this.logError("error",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("error",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"error",message,values[0]);else if(typeof message==="function")this.logLazily("error",message);else if(!Array.isArray(message))this.log("error","{*}",message);else this.logTemplate("error",message,values)}fatal(message,...values){if(message instanceof Error)return this.logError("fatal",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("fatal",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"fatal",message,values[0]);else if(typeof message==="function")this.logLazily("fatal",message);else if(!Array.isArray(message))this.log("fatal","{*}",message);else this.logTemplate("fatal",message,values)}},LoggerCtx=class LoggerCtx2{logger;properties;constructor(logger2,properties){this.logger=logger2,this.properties=properties}get category(){return this.logger.category}get parent(){return this.logger.parent}getChild(subcategory){return this.logger.getChild(subcategory).with(this.properties)}with(properties){return new LoggerCtx2(this.logger,{...this.properties,...properties})}log(level,message,properties,bypassSinks){let contextProps=this.properties;this.logger.log(level,message,typeof properties==="function"?()=>resolveProperties({...contextProps,...properties()}):()=>resolveProperties({...contextProps,...properties}),bypassSinks)}logLazily(level,callback){this.logger.logLazily(level,callback,resolveProperties(this.properties))}logTemplate(level,messageTemplate,values){this.logger.logTemplate(level,messageTemplate,values,resolveProperties(this.properties))}emit(record2){let recordWithContext={...record2,properties:resolveProperties({...this.properties,...record2.properties})};this.logger.emit(recordWithContext)}isEnabledFor(level){return this.logger.isEnabledFor(level)}trace(message,...values){if(typeof message==="string")return logStringMessage(this,"trace",message,values[0]);else if(typeof message==="function")this.logLazily("trace",message);else if(!Array.isArray(message))this.log("trace","{*}",message);else this.logTemplate("trace",message,values)}debug(message,...values){if(typeof message==="string")return logStringMessage(this,"debug",message,values[0]);else if(typeof message==="function")this.logLazily("debug",message);else if(!Array.isArray(message))this.log("debug","{*}",message);else this.logTemplate("debug",message,values)}info(message,...values){if(typeof message==="string")return logStringMessage(this,"info",message,values[0]);else if(typeof message==="function")this.logLazily("info",message);else if(!Array.isArray(message))this.log("info","{*}",message);else this.logTemplate("info",message,values)}logError(level,error51,props){if(typeof props!=="function"){this.log(level,"{error.message}",{...props,error:error51});return}if(!this.isEnabledFor(level))return Promise.resolve();let result=props();if(result instanceof Promise)return result.then((resolved)=>{this.log(level,"{error.message}",{...resolved,error:error51})});this.log(level,"{error.message}",{...result,error:error51})}warn(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}warning(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}error(message,...values){if(message instanceof Error)return this.logError("error",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("error",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"error",message,values[0]);else if(typeof message==="function")this.logLazily("error",message);else if(!Array.isArray(message))this.log("error","{*}",message);else this.logTemplate("error",message,values)}fatal(message,...values){if(message instanceof Error)return this.logError("fatal",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("fatal",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"fatal",message,values[0]);else if(typeof message==="function")this.logLazily("fatal",message);else if(!Array.isArray(message))this.log("fatal","{*}",message);else this.logTemplate("fatal",message,values)}},metaLogger;var init_logger2=__esm(()=>{init_context3();init_level();lazySymbol=Symbol.for("logtape.lazy"),throttlingSummaryRecordSymbol=Symbol.for("LogTape.throttlingSummaryRecord");globalRootLoggerSymbol=Symbol.for("logtape.rootLogger");metaLogger=LoggerImpl.getLogger(["logtape","meta"])});var init_mod=__esm(()=>{init_logger2()});class LogTapeLogger{inner;constructor(inner){this.inner=inner}trace(msg,data){if(!muted)this.inner.trace(msg,data??{})}debug(msg,data){if(!muted)this.inner.debug(msg,data??{})}info(msg,data){if(!muted)this.inner.info(msg,data??{})}warn(msg,data){if(!muted)this.inner.warn(msg,data??{})}error(msg,data){if(!muted)this.inner.error(msg,data??{})}fatal(msg,data){if(!muted)this.inner.fatal(msg,data??{})}child(context3){return new LogTapeLogger(this.inner.with(context3))}}function getLogger2(category){return new LogTapeLogger(getLogger([ROOT_CATEGORY,category]))}var ROOT_CATEGORY="app",muted=!1;var init_logger3=__esm(()=>{init_mod()});function getTelemetryConfig(configPartial={}){return{enabled:configPartial.enabled??CONFIG_DEFAULTS.enabled,serviceName:configPartial.serviceName??CONFIG_DEFAULTS.serviceName,environment:configPartial.environment??configPartial.appEnv??CONFIG_DEFAULTS.environment,dbStatementDebug:configPartial.dbStatementDebug??!1}}function getResolvedConfig(){return resolvedConfig}function getTracer(){return import_api.trace.getTracer(TRACER_NAME,TRACER_VERSION)}var import_api,CONFIG_DEFAULTS,TRACER_NAME="@gobing-ai/ts-infra",TRACER_VERSION="0.1.0",resolvedConfig;var init_sdk=__esm(()=>{import_api=__toESM(require_src(),1),CONFIG_DEFAULTS={enabled:!0,serviceName:"ts-libs",environment:"development"};resolvedConfig=getTelemetryConfig()});function isSuppressed(tracer2){return tracer2===void 0&&!getResolvedConfig().enabled}function nonRecordingSpan(){return import_api2.trace.wrapSpanContext(import_api2.INVALID_SPAN_CONTEXT)}async function traceAsync(name,fn,options,tracer2){if(isSuppressed(tracer2))return fn(nonRecordingSpan());return(tracer2??getTracer()).startActiveSpan(name,options??{},async(span)=>{try{return await fn(span)}catch(err){throw span.setStatus({code:2,message:err instanceof Error?err.message:String(err)}),err}finally{span.end()}})}function addSpanEvent(name,attributes){let span=import_api2.trace.getActiveSpan();if(span?.isRecording())span.addEvent(name,attributes)}var import_api2;var init_tracing2=__esm(()=>{init_sdk();import_api2=__toESM(require_src(),1)});function getMeter(){return import_api3.metrics.getMeter(METER_NAME,METER_VERSION)}function noopCounter(){if(!_noopCounter)_noopCounter=import_api3.createNoopMeter().createCounter("noop");return _noopCounter}function getOrCreateCounter(key,name,description,unit="{operation}"){if(!getResolvedConfig().enabled)return noopCounter();if(!instruments[key])instruments[key]=getMeter().createCounter(name,{description,unit});return instruments[key]}function getEventbusEmitsTotal(){return getOrCreateCounter("ebEmit","eventbus.emits.total","Total event bus emits","{emit}")}function getEventbusErrorsTotal(){return getOrCreateCounter("ebErr","eventbus.errors.total","Event bus errors","{error}")}var import_api3,METER_NAME="@gobing-ai/ts-infra",METER_VERSION="0.1.0",instruments,_noopCounter;var init_metrics=__esm(()=>{init_sdk();import_api3=__toESM(require_src(),1);instruments={}});function busLogger(){if(!_busLogger)_busLogger=getLogger2("event-bus");return _busLogger}class EventBus{syncHandlers=new Map;asyncHandlers=new Map;asyncHandlerIds=new Map;asyncHandlersById=new Map;jobQueue;lifecycleBus;logger;nextAsyncHandlerId=0;constructor(opts){this.jobQueue=opts?.jobQueue??null,this.lifecycleBus=opts?.lifecycleBus??null,this.logger=opts?.logger}on(event,handler,opts){if(opts?.async)this.registerAsync(event,handler,opts.name);else this.registerSync(event,handler)}once(event,handler,opts){let wrapped=(...args)=>{this.off(event,wrapped),handler(...args)};this.on(event,wrapped,opts)}off(event,handler){let syncSet=this.syncHandlers.get(event);if(syncSet){if(syncSet.delete(handler),syncSet.size===0)this.syncHandlers.delete(event)}let asyncSet=this.asyncHandlers.get(event);if(asyncSet){if(asyncSet.delete(handler),asyncSet.size===0)this.asyncHandlers.delete(event);this.releaseAsyncIdIfUnsubscribed(handler)}}removeAllListeners(event){if(event!==void 0){this.syncHandlers.delete(event);let asyncSet=this.asyncHandlers.get(event);if(this.asyncHandlers.delete(event),asyncSet)for(let handler of asyncSet)this.releaseAsyncIdIfUnsubscribed(handler)}else this.syncHandlers.clear(),this.asyncHandlers.clear(),this.asyncHandlerIds.clear(),this.asyncHandlersById.clear()}async emit(event,...args){let eventName=String(event),startMs=performance.now(),syncCount=0,asyncCount=0,errors6=0;this.logger?.debug("event.emit",{event:eventName,syncHandlers:this.syncHandlers.get(event)?.size??0,asyncHandlers:this.asyncHandlers.get(event)?.size??0});let syncSet=this.syncHandlers.get(event);if(syncSet){syncCount=syncSet.size;for(let handler of syncSet)try{handler(...args)}catch(error51){errors6++;let message=error51 instanceof Error?error51.message:String(error51);busLogger().error("sync handler threw",{event:eventName,error:message}),this.publishHandlerError(eventName,"sync",message)}}let asyncSet=this.asyncHandlers.get(event);if(asyncSet&&asyncSet.size>0){let handlers=[...asyncSet];asyncCount=handlers.length;for(let handler of handlers){if(this.jobQueue)try{let jobId=await this.jobQueue.enqueue(eventName,{event:eventName,args,handlerId:this.getAsyncHandlerId(handler)});busLogger().debug("async job enqueued",{event:eventName,jobId,handlerCount:1}),this.publishAsyncEnqueued(eventName,jobId,1);continue}catch(error51){errors6++;let message=error51 instanceof Error?error51.message:String(error51);busLogger().error("async enqueue failed",{event:eventName,error:message}),this.publishHandlerError(eventName,"async",message);continue}else busLogger().warn("async handlers registered but no JobQueue injected",{event:eventName});try{await Promise.resolve().then(()=>handler(...args))}catch(error51){errors6++;let message=error51 instanceof Error?error51.message:String(error51);busLogger().error("async handler threw",{event:eventName,error:message}),this.publishHandlerError(eventName,"async",message)}}}let durationMs=performance.now()-startMs,detail=args.length===1?args[0]:args.length>1?args:void 0;if(getEventbusEmitsTotal().add(1,{event:eventName}),errors6>0)getEventbusErrorsTotal().add(errors6,{event:eventName});if(this.publishEmitDone({event:eventName,syncCount,asyncCount,emitDurationMs:durationMs,errors:errors6,detail,severity:errors6>0?"warning":"info"}),syncCount===0&&asyncCount===0)busLogger().debug("emit with zero handlers",{event:eventName}),this.publishEmitNoop(eventName)}listenerCount(event,mode){let sync=mode!=="async"?this.syncHandlers.get(event)?.size??0:0,async=mode!=="sync"?this.asyncHandlers.get(event)?.size??0:0;return sync+async}eventNames(){let names=new Set;for(let key of this.syncHandlers.keys())names.add(String(key));for(let key of this.asyncHandlers.keys())names.add(String(key));return[...names]}registerSync(event,handler){let set2=this.syncHandlers.get(event);if(!set2)set2=new Set,this.syncHandlers.set(event,set2);set2.add(handler)}registerAsync(event,handler,name){let set2=this.asyncHandlers.get(event);if(!set2)set2=new Set,this.asyncHandlers.set(event,set2);if(set2.add(handler),!this.asyncHandlerIds.has(handler)){let id=name??`handler-${++this.nextAsyncHandlerId}`;if(this.asyncHandlersById.has(id))throw Error(`Duplicate async handler name: "${id}"`);this.asyncHandlerIds.set(handler,id),this.asyncHandlersById.set(id,handler)}}getAsyncHandlerId(handler){let existing=this.asyncHandlerIds.get(handler);if(existing)return existing;let id=`handler-${++this.nextAsyncHandlerId}`;return this.asyncHandlerIds.set(handler,id),this.asyncHandlersById.set(id,handler),id}releaseAsyncIdIfUnsubscribed(handler){for(let set2 of this.asyncHandlers.values())if(set2.has(handler))return;let id=this.asyncHandlerIds.get(handler);if(id!==void 0)this.asyncHandlerIds.delete(handler),this.asyncHandlersById.delete(id)}createJobHandler(){return async(job)=>{let{event,args,handlerId}=job.payload,handler=this.asyncHandlersById.get(handlerId);if(!handler)throw Error(`No async handler registered for id "${handlerId}" (event "${event}")`);await handler(...args)}}publishEmitDone(detail){if(this.lifecycleBus)try{this.lifecycleBus.emit("bus.emit.done",detail)}catch{}}publishEmitNoop(event){if(this.lifecycleBus)try{this.lifecycleBus.emit("bus.emit.noop",{event,severity:"info"})}catch{}}publishHandlerError(event,mode,error51){if(this.lifecycleBus){let detail={event,mode,error:error51,severity:"error"};try{this.lifecycleBus.emit("bus.handler.error",detail)}catch{}}}publishAsyncEnqueued(event,jobId,handlerCount){if(this.lifecycleBus){let detail={event,jobId,handlerCount,severity:"info"};try{this.lifecycleBus.emit("bus.handler.async.enqueued",detail)}catch{}}}}var _busLogger;var init_event_bus=__esm(()=>{init_logger3();init_metrics()});var init_event_bus2=__esm(()=>{init_event_bus()});var init_telemetry=__esm(()=>{init_tracing2()});var init_dist7=__esm(()=>{init_event_bus2();init_logger3();init_telemetry()});import{join as join5,resolve as resolve4}from"node:path";var ARTIFACT_ARRAY_CLASSIFICATION={byTool:"ranked",bySession:"ranked",topStepsByTokens:"ranked",topStepsByDuration:"ranked",topSteps:"ranked",bottlenecks:"ranked",coverage:"set",daily:"set",loops:"set",warnings:"set",pairings:"set",ladderSnapshot:"set",stepSupport:"set",phases:"set",tools:"set",skills:"set",sources:"set",models:"set"},RANKED_ARTIFACT_KEYS=new Set(Object.entries(ARTIFACT_ARRAY_CLASSIFICATION).filter(([,kind])=>kind==="ranked").map(([key])=>key));var RESOLVED_TOOL_NAME_SQL=`CASE
315
+ AND ${queueJobs2.attemptToken} IS NULL`)).changes}async failExpiredJobs(){let now=this.now();return(await this.db.update(queueJobs2).set({status:"failed",lastError:"Job expired — not processed before TTL deadline",updatedAt:now,attempts:sql`${queueJobs2.attempts} + 1`,processingAt:null}).where(sql`${queueJobs2.status} = 'pending' AND ${queueJobs2.expiresAt} IS NOT NULL AND ${queueJobs2.expiresAt} <= ${now}`)).changes}}});var exports_dist2={};__export(exports_dist2,{embeddedMigrations:()=>embeddedMigrations2,createDbAdapter:()=>createDbAdapter2,compilePredicate:()=>compilePredicate2,compileOrderBy:()=>compileOrderBy2,applyMigrations:()=>applyMigrations2,RequestKeyConflictError:()=>RequestKeyConflictError2,QueueJobDao:()=>QueueJobDao2,InboxMessageDao:()=>InboxMessageDao2,EntityDao:()=>EntityDao2,BaseDao:()=>BaseDao2});var init_dist5=__esm(()=>{init_base_dao2();init_embedded_migrations2();init_entity_dao2();init_inbox_message_dao2();init_migrate2();init_query_spec2();init_queue_job_dao2()});function getNodeFileSystem(){if(!_nodeFileSystem)_nodeFileSystem=createNodeFileSystem2();return _nodeFileSystem}async function loadNodeConfig(options){let fs2=getNodeFileSystem(),raw=await readYamlConfig(fs2);return buildConfigFromObject(raw??{},options)}async function readYamlConfig(fs2){let candidates=[getProcessEnv().CONFIG_PATH,"config/config.yaml","config/config.example.yaml"].filter((p)=>typeof p==="string"&&p.length>0);for(let candidate of candidates){let resolved=fs2.resolve(candidate);if(await fs2.exists(resolved)){let content=await fs2.readFile(resolved);try{return $parse(content)}catch{}}}return null}var _nodeFileSystem,nodeBunFactory2;var init_runtime_node_bun=__esm(()=>{init_dist2();init_config2();init_db_errors();init_file_system_node();init_process_executor();nodeBunFactory2={runtimeName:"node-bun",capabilities:{hasFilesystem:!0,hasProcessExecution:!0,hasPersistentStorage:!0,hasSqlDatabase:!0},createFileSystem:()=>getNodeFileSystem(),createProcessExecutor:(config3)=>new NodeProcessExecutor2(config3),async loadConfig(options){return loadNodeConfig(options)},async createDbAdapter(config3){let mod;try{mod=await Promise.resolve().then(() => (init_dist5(),exports_dist2))}catch(cause){throw new DbModuleNotInstalledError2(void 0,{cause})}if(typeof mod.createDbAdapter!=="function")throw new DbModuleNotInstalledError2("@gobing-ai/ts-db is installed but does not export createDbAdapter — the installed version may be incompatible or partial.");return mod.createDbAdapter({driver:"bun-sqlite",url:config3.url})}}});var init_context2=()=>{};function normalizeSeparators2(path7){return path7.replaceAll("\\","/")}function isAbsolutePath2(path7){return path7.startsWith("/")||/^[A-Za-z]:\//.test(normalizeSeparators2(path7))}function splitRoot2(path7){let normalized=normalizeSeparators2(path7),drive=normalized.match(/^([A-Za-z]:)(?:\/|$)/);if(drive)return{root:drive[1]??"",rest:normalized.slice((drive[1]??"").length).replace(/^\/+/,"")};if(normalized.startsWith("/"))return{root:"/",rest:normalized.replace(/^\/+/,"")};return{root:"",rest:normalized}}function dirnamePath(path7){let input=normalizeSeparators2(path7),{root}=splitRoot2(input);if(root!==""&&input.replace(/\/+$/,"")===root)return root==="/"?"/":`${root}/`;if(/^\/+$/.test(input))return"/";let normalized=input.replace(/\/+$/,"");if(normalized===""||normalized==="/")return normalized||".";let index2=normalized.lastIndexOf("/");if(index2<0)return".";if(index2===0)return"/";return normalized.slice(0,index2)}function basenamePath(p,ext){let normalized=normalizeSeparators2(p).replace(/\/+$/,""),index2=normalized.lastIndexOf("/"),base2=index2<0?normalized:normalized.slice(index2+1);if(ext!==void 0&&base2!==ext&&base2.endsWith(ext))base2=base2.slice(0,-ext.length);return base2}function joinPath2(...segments){let filtered=segments.filter((segment)=>segment.length>0).map(normalizeSeparators2);if(filtered.length===0)return".";let absolute=isAbsolutePath2(filtered[0]??""),joined=filtered.join("/").replace(/\/+/g,"/");return absolute?joined:joined.replace(/^\//,"")}function resolvePath3(...segments){let candidates=segments.length===0?[getProcessCwd2()]:segments,resolved="";for(let segment of candidates.map(normalizeSeparators2)){if(segment.length===0)continue;resolved=isAbsolutePath2(segment)?segment:joinPath2(resolved||getProcessCwd2(),segment)}let{root,rest}=splitRoot2(resolved),parts=[],absolute=root!=="";for(let part of rest.split("/")){if(part===""||part===".")continue;if(part===".."){if(parts.length>0)parts.pop();continue}parts.push(part)}if(!absolute)return parts.join("/")||".";if(root==="/")return`/${parts.join("/")}`||"/";return parts.length>0?`${root}/${parts.join("/")}`:`${root}/`}function getProcessCwd2(){return globalThis.process?.cwd?.()??"/"}var SEP2;var init_path2=__esm(()=>{SEP2=globalThis.process?.platform==="win32"?"\\":"/"});async function loadStructuredConfig(path7,options={}){let content=await(options.fileSystem??createNodeFileSystem2()).readFile(path7);return await parseStructuredConfig(content,path7,options)}async function parseStructuredConfig(content,source,options={}){let parsed=source.endsWith(".json")?parseJsonContent(content,source):$parse(content);if(options.validateSchema!==!1)await validateDeclaredJsonSchema(parsed,source,options);return parsed}function parseJsonContent(content,source){try{return JSON.parse(content)}catch(error51){throw new StructuredConfigSchemaError(`Failed to parse JSON config "${source}": ${error51.message}`)}}async function validateDeclaredJsonSchema(value,source,options={}){if(!isObject3(value))return;let schemaRef=value.$schema;if(typeof schemaRef!=="string"||schemaRef.length===0)return;let schemaLocation=resolveSchemaRef(schemaRef,source,options.resolve),schemaText=await readSchema(schemaLocation,options),schema;try{schema=JSON.parse(schemaText)}catch(error51){throw new StructuredConfigSchemaError(`Invalid JSON schema "${schemaLocation}" referenced by "${source}": ${errorMessage2(error51)}`)}if(!isObject3(schema))throw new StructuredConfigSchemaError(`JSON schema "${schemaLocation}" referenced by "${source}" must be an object`);let violations=validateJsonSchema(value,schema,"",schema.$defs??{});if(violations.length>0)throw new StructuredConfigSchemaError(`Configuration "${source}" failed JSON schema validation against "${schemaLocation}": ${violations.map((violation)=>`${violation.path}: ${violation.message}`).join("; ")}`,violations)}function validateJsonSchema(value,schema,path7="",defs={},seenRefs=new Set){let violations=[];if(schema.$ref!==void 0){if(!seenRefs.has(schema.$ref)){let resolved=resolveRef2(schema.$ref,defs,schema.$defs);if(resolved!==void 0){let nextSeen=new Set(seenRefs).add(schema.$ref);violations.push(...validateJsonSchema(value,resolved,path7,defs,nextSeen))}}}if(schema.oneOf!==void 0)violations.push(...validateCombinator(value,schema.oneOf,path7,defs,"oneOf",seenRefs));if(schema.anyOf!==void 0)violations.push(...validateCombinator(value,schema.anyOf,path7,defs,"anyOf",seenRefs));if(schema.const!==void 0&&!jsonEqual(value,schema.const))violations.push({path:path7||"(root)",message:`expected constant ${JSON.stringify(schema.const)}`});if(schema.enum!==void 0&&!schema.enum.some((entry)=>jsonEqual(value,entry)))violations.push({path:path7||"(root)",message:`expected one of ${schema.enum.map(String).join(", ")}`});if(schema.type!==void 0){let types2=Array.isArray(schema.type)?schema.type:[schema.type];if(!types2.some((type)=>matchesType(value,type)))return violations.push({path:path7||"(root)",message:`expected ${types2.join(" or ")}, got ${typeName(value)}`}),violations}let hasObjectKeywords=schema.properties!==void 0||schema.required!==void 0||schema.additionalProperties!==void 0;if(schema.type==="object"||hasObjectKeywords&&isObject3(value))violations.push(...validateObject(value,schema,path7,defs,seenRefs));if(schema.type==="array"||schema.items!==void 0&&Array.isArray(value))violations.push(...validateArray(value,schema,path7,defs,seenRefs));return violations}function validateObject(value,schema,path7,defs,seenRefs){if(!isObject3(value))return[{path:path7||"(root)",message:`expected object, got ${typeName(value)}`}];let violations=[];for(let key of schema.required??[])if(!(key in value))violations.push({path:path7?`${path7}.${key}`:key,message:`missing required field "${key}"`});let properties=schema.properties??{};for(let[key,childSchema]of Object.entries(properties))if(key in value)violations.push(...validateJsonSchema(value[key],childSchema,path7?`${path7}.${key}`:key,defs,seenRefs));if(schema.additionalProperties===!1){let allowed=new Set(Object.keys(properties));for(let key of Object.keys(value))if(!allowed.has(key))violations.push({path:path7?`${path7}.${key}`:key,message:`unknown field "${key}"`})}else if(isObject3(schema.additionalProperties)){for(let[key,child]of Object.entries(value))if(!(key in properties))violations.push(...validateJsonSchema(child,schema.additionalProperties,path7?`${path7}.${key}`:key,defs,seenRefs))}return violations}function validateArray(value,schema,path7,defs,seenRefs){if(!Array.isArray(value))return[{path:path7||"(root)",message:`expected array, got ${typeName(value)}`}];if(schema.items===void 0)return[];return value.flatMap((entry,index2)=>validateJsonSchema(entry,schema.items,`${path7}[${index2}]`,defs,seenRefs))}function validateCombinator(value,schemas3,path7,defs,mode,seenRefs){let branchViolations=schemas3.map((schema)=>validateJsonSchema(value,schema,path7,defs,seenRefs)),passing=branchViolations.filter((violations)=>violations.length===0).length;if(mode==="anyOf"&&passing>=1)return[];if(mode==="oneOf"&&passing===1)return[];let at=path7||"(root)";if(mode==="oneOf"&&passing>1)return[{path:at,message:`expected to match exactly one oneOf branch, matched ${passing}`}];let detail=branchViolations.map((branch,index2)=>`[${index2}] ${branch.map((v)=>`${v.path}: ${v.message}`).join(", ")}`).join(" | ");return[{path:at,message:`expected to match ${mode==="oneOf"?"exactly one":"at least one"} branch — ${detail}`}]}function resolveRef2(ref,defs,localDefs){if(!ref.startsWith("#/$defs/"))return;let name=ref.slice(8);return defs[name]??localDefs?.[name]}function resolveSchemaRef(schemaRef,source,resolve){if(isRemoteRef(schemaRef)||isAbsolutePath2(schemaRef))return schemaRef;if(schemaRef.startsWith("./")||schemaRef.startsWith("../"))return joinPath2(isRemoteRef(source)?".":dirnamePath(source),schemaRef);return resolvePackageSchema(schemaRef,source,resolve)}function resolvePackageSchema(specifier,source,resolve){let resolveFn=resolve??defaultResolve;if(resolveFn===void 0)throw new StructuredConfigSchemaError(`Cannot resolve package schema "${specifier}" referenced by "${source}": no module resolver available`);let{pkg,subpath}=splitPackageSpecifier(specifier);if(subpath.length===0)throw new StructuredConfigSchemaError(`Package schema ref "${specifier}" referenced by "${source}" must include a path within the package`);let from=isRemoteRef(source)?getProcessCwd2():dirnamePath(source);try{let manifest=resolveFn(`${pkg}/package.json`,from);return joinPath2(dirnamePath(manifest),subpath)}catch(error51){throw new StructuredConfigSchemaError(`Cannot resolve package schema "${specifier}" referenced by "${source}": ${errorMessage2(error51)}`)}}function splitPackageSpecifier(specifier){let parts=specifier.split("/"),segments=specifier.startsWith("@")?2:1;return{pkg:parts.slice(0,segments).join("/"),subpath:parts.slice(segments).join("/")}}async function readSchema(schemaLocation,options){if(isRemoteRef(schemaLocation)){if(options.allowRemote!==!0||options.fetch===void 0)throw new StructuredConfigSchemaError(`Refusing to fetch remote JSON schema "${schemaLocation}": pass both allowRemote: true and a fetch implementation to opt in`);let response=await options.fetch(schemaLocation);if(!response.ok)throw new StructuredConfigSchemaError(`Failed to fetch JSON schema "${schemaLocation}": HTTP ${response.status}`);return await readBoundedBody(response,schemaLocation)}return await(options.fileSystem??createNodeFileSystem2()).readFile(schemaLocation)}async function readBoundedBody(response,schemaLocation){let declared=Number(response.headers.get("content-length"));if(Number.isFinite(declared)&&declared>REMOTE_SCHEMA_MAX_BYTES)throw new StructuredConfigSchemaError(`Remote JSON schema "${schemaLocation}" exceeds the ${REMOTE_SCHEMA_MAX_BYTES}-byte limit (Content-Length ${declared})`);let body=response.body;if(body===null)return await response.text();let reader=body.getReader(),chunks=[],total=0;try{while(!0){let{done,value}=await reader.read();if(done)break;if(total+=value.byteLength,total>REMOTE_SCHEMA_MAX_BYTES)throw await reader.cancel(),new StructuredConfigSchemaError(`Remote JSON schema "${schemaLocation}" exceeds the ${REMOTE_SCHEMA_MAX_BYTES}-byte limit`);chunks.push(value)}}finally{reader.releaseLock()}let merged=new Uint8Array(total),offset=0;for(let chunk of chunks)merged.set(chunk,offset),offset+=chunk.byteLength;return new TextDecoder().decode(merged)}function isObject3(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function matchesType(value,type){if(type==="object")return isObject3(value);if(type==="array")return Array.isArray(value);if(type==="integer")return typeof value==="number"&&Number.isInteger(value);if(type==="null")return value===null;return typeof value===type}function typeName(value){if(Array.isArray(value))return"array";if(value===null)return"null";return typeof value}function jsonEqual(left,right){if(left===right)return!0;if(Array.isArray(left)||Array.isArray(right)){if(!Array.isArray(left)||!Array.isArray(right)||left.length!==right.length)return!1;return left.every((entry,index2)=>jsonEqual(entry,right[index2]))}if(isObject3(left)&&isObject3(right)){let keys=Object.keys(left);if(keys.length!==Object.keys(right).length)return!1;return keys.every((key)=>(key in right)&&jsonEqual(left[key],right[key]))}return!1}function errorMessage2(error51){return error51 instanceof Error?error51.message:String(error51)}function isRemoteRef(ref){return/^https?:\/\//i.test(ref)}var REMOTE_SCHEMA_MAX_BYTES=5242880,StructuredConfigSchemaError,defaultResolve;var init_schema_validation2=__esm(()=>{init_dist2();init_file_system_node();init_path2();StructuredConfigSchemaError=class StructuredConfigSchemaError extends Error{violations;constructor(message,violations=[]){super(message);this.violations=violations,this.name="StructuredConfigSchemaError"}};defaultResolve=typeof Bun<"u"?(specifier,from)=>Bun.resolveSync(specifier,from):void 0});var init_types2=()=>{};var init_dist6=__esm(()=>{init_file_system_node();init_process_executor();init_runtime_node_bun();init_process_executor();init_config2();init_context2();init_path2();init_schema_validation2();init_types2()});var require_version=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.VERSION=void 0;exports.VERSION="1.9.1"});var require_semver=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.isCompatible=exports._makeCompatibilityCheck=void 0;var version_1=require_version(),re=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;function _makeCompatibilityCheck(ownVersion){let acceptedVersions=new Set([ownVersion]),rejectedVersions=new Set,myVersionMatch=ownVersion.match(re);if(!myVersionMatch)return()=>!1;let ownVersionParsed={major:+myVersionMatch[1],minor:+myVersionMatch[2],patch:+myVersionMatch[3],prerelease:myVersionMatch[4]};if(ownVersionParsed.prerelease!=null)return function(globalVersion){return globalVersion===ownVersion};function _reject(v){return rejectedVersions.add(v),!1}function _accept(v){return acceptedVersions.add(v),!0}return function(globalVersion){if(acceptedVersions.has(globalVersion))return!0;if(rejectedVersions.has(globalVersion))return!1;let globalVersionMatch=globalVersion.match(re);if(!globalVersionMatch)return _reject(globalVersion);let globalVersionParsed={major:+globalVersionMatch[1],minor:+globalVersionMatch[2],patch:+globalVersionMatch[3],prerelease:globalVersionMatch[4]};if(globalVersionParsed.prerelease!=null)return _reject(globalVersion);if(ownVersionParsed.major!==globalVersionParsed.major)return _reject(globalVersion);if(ownVersionParsed.major===0){if(ownVersionParsed.minor===globalVersionParsed.minor&&ownVersionParsed.patch<=globalVersionParsed.patch)return _accept(globalVersion);return _reject(globalVersion)}if(ownVersionParsed.minor<=globalVersionParsed.minor)return _accept(globalVersion);return _reject(globalVersion)}}exports._makeCompatibilityCheck=_makeCompatibilityCheck;exports.isCompatible=_makeCompatibilityCheck(version_1.VERSION)});var require_global_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.unregisterGlobal=exports.getGlobal=exports.registerGlobal=void 0;var version_1=require_version(),semver_1=require_semver(),major=version_1.VERSION.split(".")[0],GLOBAL_OPENTELEMETRY_API_KEY=Symbol.for(`opentelemetry.js.api.${major}`),_global=typeof globalThis==="object"?globalThis:typeof self==="object"?self:typeof window==="object"?window:typeof global==="object"?global:{};function registerGlobal(type,instance,diag,allowOverride=!1){var _a3;let api2=_global[GLOBAL_OPENTELEMETRY_API_KEY]=(_a3=_global[GLOBAL_OPENTELEMETRY_API_KEY])!==null&&_a3!==void 0?_a3:{version:version_1.VERSION};if(!allowOverride&&api2[type]){let err=Error(`@opentelemetry/api: Attempted duplicate registration of API: ${type}`);return diag.error(err.stack||err.message),!1}if(api2.version!==version_1.VERSION){let err=Error(`@opentelemetry/api: Registration of version v${api2.version} for ${type} does not match previously registered API v${version_1.VERSION}`);return diag.error(err.stack||err.message),!1}return api2[type]=instance,diag.debug(`@opentelemetry/api: Registered a global for ${type} v${version_1.VERSION}.`),!0}exports.registerGlobal=registerGlobal;function getGlobal(type){var _a3,_b;let globalVersion=(_a3=_global[GLOBAL_OPENTELEMETRY_API_KEY])===null||_a3===void 0?void 0:_a3.version;if(!globalVersion||!(0,semver_1.isCompatible)(globalVersion))return;return(_b=_global[GLOBAL_OPENTELEMETRY_API_KEY])===null||_b===void 0?void 0:_b[type]}exports.getGlobal=getGlobal;function unregisterGlobal(type,diag){diag.debug(`@opentelemetry/api: Unregistering a global for ${type} v${version_1.VERSION}.`);let api2=_global[GLOBAL_OPENTELEMETRY_API_KEY];if(api2)delete api2[type]}exports.unregisterGlobal=unregisterGlobal});var require_ComponentLogger=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagComponentLogger=void 0;var global_utils_1=require_global_utils();class DiagComponentLogger{constructor(props){this._namespace=props.namespace||"DiagComponentLogger"}debug(...args){return logProxy("debug",this._namespace,args)}error(...args){return logProxy("error",this._namespace,args)}info(...args){return logProxy("info",this._namespace,args)}warn(...args){return logProxy("warn",this._namespace,args)}verbose(...args){return logProxy("verbose",this._namespace,args)}}exports.DiagComponentLogger=DiagComponentLogger;function logProxy(funcName,namespace,args){let logger2=(0,global_utils_1.getGlobal)("diag");if(!logger2)return;return logger2[funcName](namespace,...args)}});var require_types=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagLogLevel=void 0;var DiagLogLevel;(function(DiagLogLevel2){DiagLogLevel2[DiagLogLevel2.NONE=0]="NONE",DiagLogLevel2[DiagLogLevel2.ERROR=30]="ERROR",DiagLogLevel2[DiagLogLevel2.WARN=50]="WARN",DiagLogLevel2[DiagLogLevel2.INFO=60]="INFO",DiagLogLevel2[DiagLogLevel2.DEBUG=70]="DEBUG",DiagLogLevel2[DiagLogLevel2.VERBOSE=80]="VERBOSE",DiagLogLevel2[DiagLogLevel2.ALL=9999]="ALL"})(DiagLogLevel=exports.DiagLogLevel||(exports.DiagLogLevel={}))});var require_logLevelLogger=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createLogLevelDiagLogger=void 0;var types_1=require_types();function createLogLevelDiagLogger(maxLevel,logger2){if(maxLevel<types_1.DiagLogLevel.NONE)maxLevel=types_1.DiagLogLevel.NONE;else if(maxLevel>types_1.DiagLogLevel.ALL)maxLevel=types_1.DiagLogLevel.ALL;logger2=logger2||{};function _filterFunc(funcName,theLevel){let theFunc=logger2[funcName];if(typeof theFunc==="function"&&maxLevel>=theLevel)return theFunc.bind(logger2);return function(){}}return{error:_filterFunc("error",types_1.DiagLogLevel.ERROR),warn:_filterFunc("warn",types_1.DiagLogLevel.WARN),info:_filterFunc("info",types_1.DiagLogLevel.INFO),debug:_filterFunc("debug",types_1.DiagLogLevel.DEBUG),verbose:_filterFunc("verbose",types_1.DiagLogLevel.VERBOSE)}}exports.createLogLevelDiagLogger=createLogLevelDiagLogger});var require_diag=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagAPI=void 0;var ComponentLogger_1=require_ComponentLogger(),logLevelLogger_1=require_logLevelLogger(),types_1=require_types(),global_utils_1=require_global_utils(),API_NAME="diag";class DiagAPI{static instance(){if(!this._instance)this._instance=new DiagAPI;return this._instance}constructor(){function _logProxy(funcName){return function(...args){let logger2=(0,global_utils_1.getGlobal)("diag");if(!logger2)return;return logger2[funcName](...args)}}let self2=this,setLogger=(logger2,optionsOrLogLevel={logLevel:types_1.DiagLogLevel.INFO})=>{var _a3,_b,_c;if(logger2===self2){let err=Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");return self2.error((_a3=err.stack)!==null&&_a3!==void 0?_a3:err.message),!1}if(typeof optionsOrLogLevel==="number")optionsOrLogLevel={logLevel:optionsOrLogLevel};let oldLogger=(0,global_utils_1.getGlobal)("diag"),newLogger=(0,logLevelLogger_1.createLogLevelDiagLogger)((_b=optionsOrLogLevel.logLevel)!==null&&_b!==void 0?_b:types_1.DiagLogLevel.INFO,logger2);if(oldLogger&&!optionsOrLogLevel.suppressOverrideMessage){let stack=(_c=Error().stack)!==null&&_c!==void 0?_c:"<failed to generate stacktrace>";oldLogger.warn(`Current logger will be overwritten from ${stack}`),newLogger.warn(`Current logger will overwrite one already registered from ${stack}`)}return(0,global_utils_1.registerGlobal)("diag",newLogger,self2,!0)};self2.setLogger=setLogger,self2.disable=()=>{(0,global_utils_1.unregisterGlobal)(API_NAME,self2)},self2.createComponentLogger=(options)=>{return new ComponentLogger_1.DiagComponentLogger(options)},self2.verbose=_logProxy("verbose"),self2.debug=_logProxy("debug"),self2.info=_logProxy("info"),self2.warn=_logProxy("warn"),self2.error=_logProxy("error")}}exports.DiagAPI=DiagAPI});var require_baggage_impl=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.BaggageImpl=void 0;class BaggageImpl{constructor(entries){this._entries=entries?new Map(entries):new Map}getEntry(key){let entry=this._entries.get(key);if(!entry)return;return Object.assign({},entry)}getAllEntries(){return Array.from(this._entries.entries())}setEntry(key,entry){let newBaggage=new BaggageImpl(this._entries);return newBaggage._entries.set(key,entry),newBaggage}removeEntry(key){let newBaggage=new BaggageImpl(this._entries);return newBaggage._entries.delete(key),newBaggage}removeEntries(...keys){let newBaggage=new BaggageImpl(this._entries);for(let key of keys)newBaggage._entries.delete(key);return newBaggage}clear(){return new BaggageImpl}}exports.BaggageImpl=BaggageImpl});var require_symbol=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.baggageEntryMetadataSymbol=void 0;exports.baggageEntryMetadataSymbol=Symbol("BaggageEntryMetadata")});var require_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.baggageEntryMetadataFromString=exports.createBaggage=void 0;var diag_1=require_diag(),baggage_impl_1=require_baggage_impl(),symbol_1=require_symbol(),diag=diag_1.DiagAPI.instance();function createBaggage(entries={}){return new baggage_impl_1.BaggageImpl(new Map(Object.entries(entries)))}exports.createBaggage=createBaggage;function baggageEntryMetadataFromString(str){if(typeof str!=="string")diag.error(`Cannot create baggage metadata from unknown type: ${typeof str}`),str="";return{__TYPE__:symbol_1.baggageEntryMetadataSymbol,toString(){return str}}}exports.baggageEntryMetadataFromString=baggageEntryMetadataFromString});var require_context=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ROOT_CONTEXT=exports.createContextKey=void 0;function createContextKey(description){return Symbol.for(description)}exports.createContextKey=createContextKey;class BaseContext{constructor(parentContext){let self2=this;self2._currentContext=parentContext?new Map(parentContext):new Map,self2.getValue=(key)=>self2._currentContext.get(key),self2.setValue=(key,value)=>{let context3=new BaseContext(self2._currentContext);return context3._currentContext.set(key,value),context3},self2.deleteValue=(key)=>{let context3=new BaseContext(self2._currentContext);return context3._currentContext.delete(key),context3}}}exports.ROOT_CONTEXT=new BaseContext});var require_consoleLogger=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.DiagConsoleLogger=exports._originalConsoleMethods=void 0;var consoleMap=[{n:"error",c:"error"},{n:"warn",c:"warn"},{n:"info",c:"info"},{n:"debug",c:"debug"},{n:"verbose",c:"trace"}];exports._originalConsoleMethods={};if(typeof console<"u"){let keys=["error","warn","info","debug","trace","log"];for(let key of keys)if(typeof console[key]==="function")exports._originalConsoleMethods[key]=console[key]}class DiagConsoleLogger{constructor(){function _consoleFunc(funcName){return function(...args){let theFunc=exports._originalConsoleMethods[funcName];if(typeof theFunc!=="function")theFunc=exports._originalConsoleMethods.log;if(typeof theFunc!=="function"&&console){if(theFunc=console[funcName],typeof theFunc!=="function")theFunc=console.log}if(typeof theFunc==="function")return theFunc.apply(console,args)}}for(let i2=0;i2<consoleMap.length;i2++)this[consoleMap[i2].n]=_consoleFunc(consoleMap[i2].c)}}exports.DiagConsoleLogger=DiagConsoleLogger});var require_NoopMeter=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createNoopMeter=exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=exports.NOOP_OBSERVABLE_GAUGE_METRIC=exports.NOOP_OBSERVABLE_COUNTER_METRIC=exports.NOOP_UP_DOWN_COUNTER_METRIC=exports.NOOP_HISTOGRAM_METRIC=exports.NOOP_GAUGE_METRIC=exports.NOOP_COUNTER_METRIC=exports.NOOP_METER=exports.NoopObservableUpDownCounterMetric=exports.NoopObservableGaugeMetric=exports.NoopObservableCounterMetric=exports.NoopObservableMetric=exports.NoopHistogramMetric=exports.NoopGaugeMetric=exports.NoopUpDownCounterMetric=exports.NoopCounterMetric=exports.NoopMetric=exports.NoopMeter=void 0;class NoopMeter{constructor(){}createGauge(_name,_options){return exports.NOOP_GAUGE_METRIC}createHistogram(_name,_options){return exports.NOOP_HISTOGRAM_METRIC}createCounter(_name,_options){return exports.NOOP_COUNTER_METRIC}createUpDownCounter(_name,_options){return exports.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(_name,_options){return exports.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(_name,_options){return exports.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(_name,_options){return exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(_callback,_observables){}removeBatchObservableCallback(_callback){}}exports.NoopMeter=NoopMeter;class NoopMetric{}exports.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(_value,_attributes){}}exports.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(_value,_attributes){}}exports.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopGaugeMetric extends NoopMetric{record(_value,_attributes){}}exports.NoopGaugeMetric=NoopGaugeMetric;class NoopHistogramMetric extends NoopMetric{record(_value,_attributes){}}exports.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(_callback){}removeCallback(_callback){}}exports.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}exports.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}exports.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}exports.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;exports.NOOP_METER=new NoopMeter;exports.NOOP_COUNTER_METRIC=new NoopCounterMetric;exports.NOOP_GAUGE_METRIC=new NoopGaugeMetric;exports.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;exports.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;exports.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;exports.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;exports.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return exports.NOOP_METER}exports.createNoopMeter=createNoopMeter});var require_Metric=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ValueType=void 0;var ValueType;(function(ValueType2){ValueType2[ValueType2.INT=0]="INT",ValueType2[ValueType2.DOUBLE=1]="DOUBLE"})(ValueType=exports.ValueType||(exports.ValueType={}))});var require_TextMapPropagator=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.defaultTextMapSetter=exports.defaultTextMapGetter=void 0;exports.defaultTextMapGetter={get(carrier,key){if(carrier==null)return;return carrier[key]},keys(carrier){if(carrier==null)return[];return Object.keys(carrier)}};exports.defaultTextMapSetter={set(carrier,key,value){if(carrier==null)return;carrier[key]=value}}});var require_NoopContextManager=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopContextManager=void 0;var context_1=require_context();class NoopContextManager{active(){return context_1.ROOT_CONTEXT}with(_context,fn,thisArg,...args){return fn.call(thisArg,...args)}bind(_context,target){return target}enable(){return this}disable(){return this}}exports.NoopContextManager=NoopContextManager});var require_context2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ContextAPI=void 0;var NoopContextManager_1=require_NoopContextManager(),global_utils_1=require_global_utils(),diag_1=require_diag(),API_NAME="context",NOOP_CONTEXT_MANAGER=new NoopContextManager_1.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance)this._instance=new ContextAPI;return this._instance}setGlobalContextManager(contextManager){return(0,global_utils_1.registerGlobal)(API_NAME,contextManager,diag_1.DiagAPI.instance())}active(){return this._getContextManager().active()}with(context3,fn,thisArg,...args){return this._getContextManager().with(context3,fn,thisArg,...args)}bind(context3,target){return this._getContextManager().bind(context3,target)}_getContextManager(){return(0,global_utils_1.getGlobal)(API_NAME)||NOOP_CONTEXT_MANAGER}disable(){this._getContextManager().disable(),(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance())}}exports.ContextAPI=ContextAPI});var require_trace_flags=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.TraceFlags=void 0;var TraceFlags;(function(TraceFlags2){TraceFlags2[TraceFlags2.NONE=0]="NONE",TraceFlags2[TraceFlags2.SAMPLED=1]="SAMPLED"})(TraceFlags=exports.TraceFlags||(exports.TraceFlags={}))});var require_invalid_span_constants=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.INVALID_SPAN_CONTEXT=exports.INVALID_TRACEID=exports.INVALID_SPANID=void 0;var trace_flags_1=require_trace_flags();exports.INVALID_SPANID="0000000000000000";exports.INVALID_TRACEID="00000000000000000000000000000000";exports.INVALID_SPAN_CONTEXT={traceId:exports.INVALID_TRACEID,spanId:exports.INVALID_SPANID,traceFlags:trace_flags_1.TraceFlags.NONE}});var require_NonRecordingSpan=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NonRecordingSpan=void 0;var invalid_span_constants_1=require_invalid_span_constants();class NonRecordingSpan{constructor(spanContext=invalid_span_constants_1.INVALID_SPAN_CONTEXT){this._spanContext=spanContext}spanContext(){return this._spanContext}setAttribute(_key,_value){return this}setAttributes(_attributes){return this}addEvent(_name,_attributes){return this}addLink(_link){return this}addLinks(_links){return this}setStatus(_status){return this}updateName(_name){return this}end(_endTime){}isRecording(){return!1}recordException(_exception,_time){}}exports.NonRecordingSpan=NonRecordingSpan});var require_context_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.getSpanContext=exports.setSpanContext=exports.deleteSpan=exports.setSpan=exports.getActiveSpan=exports.getSpan=void 0;var context_1=require_context(),NonRecordingSpan_1=require_NonRecordingSpan(),context_2=require_context2(),SPAN_KEY=(0,context_1.createContextKey)("OpenTelemetry Context Key SPAN");function getSpan(context3){return context3.getValue(SPAN_KEY)||void 0}exports.getSpan=getSpan;function getActiveSpan(){return getSpan(context_2.ContextAPI.getInstance().active())}exports.getActiveSpan=getActiveSpan;function setSpan(context3,span){return context3.setValue(SPAN_KEY,span)}exports.setSpan=setSpan;function deleteSpan(context3){return context3.deleteValue(SPAN_KEY)}exports.deleteSpan=deleteSpan;function setSpanContext(context3,spanContext){return setSpan(context3,new NonRecordingSpan_1.NonRecordingSpan(spanContext))}exports.setSpanContext=setSpanContext;function getSpanContext(context3){var _a3;return(_a3=getSpan(context3))===null||_a3===void 0?void 0:_a3.spanContext()}exports.getSpanContext=getSpanContext});var require_spancontext_utils=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.wrapSpanContext=exports.isSpanContextValid=exports.isValidSpanId=exports.isValidTraceId=void 0;var invalid_span_constants_1=require_invalid_span_constants(),NonRecordingSpan_1=require_NonRecordingSpan(),isHex=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1]);function isValidHex(id,length){if(typeof id!=="string"||id.length!==length)return!1;let r=0;for(let i2=0;i2<id.length;i2+=4)r+=(isHex[id.charCodeAt(i2)]|0)+(isHex[id.charCodeAt(i2+1)]|0)+(isHex[id.charCodeAt(i2+2)]|0)+(isHex[id.charCodeAt(i2+3)]|0);return r===length}function isValidTraceId(traceId){return isValidHex(traceId,32)&&traceId!==invalid_span_constants_1.INVALID_TRACEID}exports.isValidTraceId=isValidTraceId;function isValidSpanId(spanId){return isValidHex(spanId,16)&&spanId!==invalid_span_constants_1.INVALID_SPANID}exports.isValidSpanId=isValidSpanId;function isSpanContextValid(spanContext){return isValidTraceId(spanContext.traceId)&&isValidSpanId(spanContext.spanId)}exports.isSpanContextValid=isSpanContextValid;function wrapSpanContext(spanContext){return new NonRecordingSpan_1.NonRecordingSpan(spanContext)}exports.wrapSpanContext=wrapSpanContext});var require_NoopTracer=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopTracer=void 0;var context_1=require_context2(),context_utils_1=require_context_utils(),NonRecordingSpan_1=require_NonRecordingSpan(),spancontext_utils_1=require_spancontext_utils(),contextApi=context_1.ContextAPI.getInstance();class NoopTracer{startSpan(name,options,context3=contextApi.active()){if(Boolean(options===null||options===void 0?void 0:options.root))return new NonRecordingSpan_1.NonRecordingSpan;let parentFromContext=context3&&(0,context_utils_1.getSpanContext)(context3);if(isSpanContext(parentFromContext)&&(0,spancontext_utils_1.isSpanContextValid)(parentFromContext))return new NonRecordingSpan_1.NonRecordingSpan(parentFromContext);else return new NonRecordingSpan_1.NonRecordingSpan}startActiveSpan(name,arg2,arg3,arg4){let opts,ctx,fn;if(arguments.length<2)return;else if(arguments.length===2)fn=arg2;else if(arguments.length===3)opts=arg2,fn=arg3;else opts=arg2,ctx=arg3,fn=arg4;let parentContext=ctx!==null&&ctx!==void 0?ctx:contextApi.active(),span=this.startSpan(name,opts,parentContext),contextWithSpanSet=(0,context_utils_1.setSpan)(parentContext,span);return contextApi.with(contextWithSpanSet,fn,void 0,span)}}exports.NoopTracer=NoopTracer;function isSpanContext(spanContext){return spanContext!==null&&typeof spanContext==="object"&&"spanId"in spanContext&&typeof spanContext.spanId==="string"&&"traceId"in spanContext&&typeof spanContext.traceId==="string"&&"traceFlags"in spanContext&&typeof spanContext.traceFlags==="number"}});var require_ProxyTracer=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ProxyTracer=void 0;var NoopTracer_1=require_NoopTracer(),NOOP_TRACER=new NoopTracer_1.NoopTracer;class ProxyTracer{constructor(provider,name,version3,options){this._provider=provider,this.name=name,this.version=version3,this.options=options}startSpan(name,options,context3){return this._getTracer().startSpan(name,options,context3)}startActiveSpan(_name,_options,_context,_fn){let tracer2=this._getTracer();return Reflect.apply(tracer2.startActiveSpan,tracer2,arguments)}_getTracer(){if(this._delegate)return this._delegate;let tracer2=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!tracer2)return NOOP_TRACER;return this._delegate=tracer2,this._delegate}}exports.ProxyTracer=ProxyTracer});var require_NoopTracerProvider=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopTracerProvider=void 0;var NoopTracer_1=require_NoopTracer();class NoopTracerProvider{getTracer(_name,_version,_options){return new NoopTracer_1.NoopTracer}}exports.NoopTracerProvider=NoopTracerProvider});var require_ProxyTracerProvider=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ProxyTracerProvider=void 0;var ProxyTracer_1=require_ProxyTracer(),NoopTracerProvider_1=require_NoopTracerProvider(),NOOP_TRACER_PROVIDER=new NoopTracerProvider_1.NoopTracerProvider;class ProxyTracerProvider{getTracer(name,version3,options){var _a3;return(_a3=this.getDelegateTracer(name,version3,options))!==null&&_a3!==void 0?_a3:new ProxyTracer_1.ProxyTracer(this,name,version3,options)}getDelegate(){var _a3;return(_a3=this._delegate)!==null&&_a3!==void 0?_a3:NOOP_TRACER_PROVIDER}setDelegate(delegate){this._delegate=delegate}getDelegateTracer(name,version3,options){var _a3;return(_a3=this._delegate)===null||_a3===void 0?void 0:_a3.getTracer(name,version3,options)}}exports.ProxyTracerProvider=ProxyTracerProvider});var require_SamplingResult=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SamplingDecision=void 0;var SamplingDecision;(function(SamplingDecision2){SamplingDecision2[SamplingDecision2.NOT_RECORD=0]="NOT_RECORD",SamplingDecision2[SamplingDecision2.RECORD=1]="RECORD",SamplingDecision2[SamplingDecision2.RECORD_AND_SAMPLED=2]="RECORD_AND_SAMPLED"})(SamplingDecision=exports.SamplingDecision||(exports.SamplingDecision={}))});var require_span_kind=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SpanKind=void 0;var SpanKind;(function(SpanKind2){SpanKind2[SpanKind2.INTERNAL=0]="INTERNAL",SpanKind2[SpanKind2.SERVER=1]="SERVER",SpanKind2[SpanKind2.CLIENT=2]="CLIENT",SpanKind2[SpanKind2.PRODUCER=3]="PRODUCER",SpanKind2[SpanKind2.CONSUMER=4]="CONSUMER"})(SpanKind=exports.SpanKind||(exports.SpanKind={}))});var require_status=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SpanStatusCode=void 0;var SpanStatusCode;(function(SpanStatusCode2){SpanStatusCode2[SpanStatusCode2.UNSET=0]="UNSET",SpanStatusCode2[SpanStatusCode2.OK=1]="OK",SpanStatusCode2[SpanStatusCode2.ERROR=2]="ERROR"})(SpanStatusCode=exports.SpanStatusCode||(exports.SpanStatusCode={}))});var require_tracestate_validators=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.validateValue=exports.validateKey=void 0;var VALID_KEY_CHAR_RANGE="[_0-9a-z-*/]",VALID_KEY=`[a-z]${VALID_KEY_CHAR_RANGE}{0,255}`,VALID_VENDOR_KEY=`[a-z0-9]${VALID_KEY_CHAR_RANGE}{0,240}@[a-z]${VALID_KEY_CHAR_RANGE}{0,13}`,VALID_KEY_REGEX=new RegExp(`^(?:${VALID_KEY}|${VALID_VENDOR_KEY})$`),VALID_VALUE_BASE_REGEX=/^[ -~]{0,255}[!-~]$/,INVALID_VALUE_COMMA_EQUAL_REGEX=/,|=/;function validateKey(key){return VALID_KEY_REGEX.test(key)}exports.validateKey=validateKey;function validateValue(value){return VALID_VALUE_BASE_REGEX.test(value)&&!INVALID_VALUE_COMMA_EQUAL_REGEX.test(value)}exports.validateValue=validateValue});var require_tracestate_impl=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.TraceStateImpl=void 0;var tracestate_validators_1=require_tracestate_validators(),MAX_TRACE_STATE_ITEMS=32,MAX_TRACE_STATE_LEN=512,LIST_MEMBERS_SEPARATOR=",",LIST_MEMBER_KEY_VALUE_SPLITTER="=";class TraceStateImpl{constructor(rawTraceState){if(this._internalState=new Map,rawTraceState)this._parse(rawTraceState)}set(key,value){let traceState=this._clone();if(traceState._internalState.has(key))traceState._internalState.delete(key);return traceState._internalState.set(key,value),traceState}unset(key){let traceState=this._clone();return traceState._internalState.delete(key),traceState}get(key){return this._internalState.get(key)}serialize(){return Array.from(this._internalState.keys()).reduceRight((agg,key)=>{return agg.push(key+LIST_MEMBER_KEY_VALUE_SPLITTER+this.get(key)),agg},[]).join(LIST_MEMBERS_SEPARATOR)}_parse(rawTraceState){if(rawTraceState.length>MAX_TRACE_STATE_LEN)return;if(this._internalState=rawTraceState.split(LIST_MEMBERS_SEPARATOR).reduceRight((agg,part)=>{let listMember=part.trim(),i2=listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER);if(i2!==-1){let key=listMember.slice(0,i2),value=listMember.slice(i2+1,part.length);if((0,tracestate_validators_1.validateKey)(key)&&(0,tracestate_validators_1.validateValue)(value))agg.set(key,value)}return agg},new Map),this._internalState.size>MAX_TRACE_STATE_ITEMS)this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,MAX_TRACE_STATE_ITEMS))}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){let traceState=new TraceStateImpl;return traceState._internalState=new Map(this._internalState),traceState}}exports.TraceStateImpl=TraceStateImpl});var require_utils2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createTraceState=void 0;var tracestate_impl_1=require_tracestate_impl();function createTraceState(rawTraceState){return new tracestate_impl_1.TraceStateImpl(rawTraceState)}exports.createTraceState=createTraceState});var require_context_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.context=void 0;var context_1=require_context2();exports.context=context_1.ContextAPI.getInstance()});var require_diag_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.diag=void 0;var diag_1=require_diag();exports.diag=diag_1.DiagAPI.instance()});var require_NoopMeterProvider=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NOOP_METER_PROVIDER=exports.NoopMeterProvider=void 0;var NoopMeter_1=require_NoopMeter();class NoopMeterProvider{getMeter(_name,_version,_options){return NoopMeter_1.NOOP_METER}}exports.NoopMeterProvider=NoopMeterProvider;exports.NOOP_METER_PROVIDER=new NoopMeterProvider});var require_metrics=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.MetricsAPI=void 0;var NoopMeterProvider_1=require_NoopMeterProvider(),global_utils_1=require_global_utils(),diag_1=require_diag(),API_NAME="metrics";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance)this._instance=new MetricsAPI;return this._instance}setGlobalMeterProvider(provider){return(0,global_utils_1.registerGlobal)(API_NAME,provider,diag_1.DiagAPI.instance())}getMeterProvider(){return(0,global_utils_1.getGlobal)(API_NAME)||NoopMeterProvider_1.NOOP_METER_PROVIDER}getMeter(name,version3,options){return this.getMeterProvider().getMeter(name,version3,options)}disable(){(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance())}}exports.MetricsAPI=MetricsAPI});var require_metrics_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.metrics=void 0;var metrics_1=require_metrics();exports.metrics=metrics_1.MetricsAPI.getInstance()});var require_NoopTextMapPropagator=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(_context,_carrier){}extract(context3,_carrier){return context3}fields(){return[]}}exports.NoopTextMapPropagator=NoopTextMapPropagator});var require_context_helpers=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.deleteBaggage=exports.setBaggage=exports.getActiveBaggage=exports.getBaggage=void 0;var context_1=require_context2(),context_2=require_context(),BAGGAGE_KEY=(0,context_2.createContextKey)("OpenTelemetry Baggage Key");function getBaggage(context3){return context3.getValue(BAGGAGE_KEY)||void 0}exports.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(context_1.ContextAPI.getInstance().active())}exports.getActiveBaggage=getActiveBaggage;function setBaggage(context3,baggage){return context3.setValue(BAGGAGE_KEY,baggage)}exports.setBaggage=setBaggage;function deleteBaggage(context3){return context3.deleteValue(BAGGAGE_KEY)}exports.deleteBaggage=deleteBaggage});var require_propagation=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.PropagationAPI=void 0;var global_utils_1=require_global_utils(),NoopTextMapPropagator_1=require_NoopTextMapPropagator(),TextMapPropagator_1=require_TextMapPropagator(),context_helpers_1=require_context_helpers(),utils_1=require_utils(),diag_1=require_diag(),API_NAME="propagation",NOOP_TEXT_MAP_PROPAGATOR=new NoopTextMapPropagator_1.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=utils_1.createBaggage,this.getBaggage=context_helpers_1.getBaggage,this.getActiveBaggage=context_helpers_1.getActiveBaggage,this.setBaggage=context_helpers_1.setBaggage,this.deleteBaggage=context_helpers_1.deleteBaggage}static getInstance(){if(!this._instance)this._instance=new PropagationAPI;return this._instance}setGlobalPropagator(propagator){return(0,global_utils_1.registerGlobal)(API_NAME,propagator,diag_1.DiagAPI.instance())}inject(context3,carrier,setter=TextMapPropagator_1.defaultTextMapSetter){return this._getGlobalPropagator().inject(context3,carrier,setter)}extract(context3,carrier,getter=TextMapPropagator_1.defaultTextMapGetter){return this._getGlobalPropagator().extract(context3,carrier,getter)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance())}_getGlobalPropagator(){return(0,global_utils_1.getGlobal)(API_NAME)||NOOP_TEXT_MAP_PROPAGATOR}}exports.PropagationAPI=PropagationAPI});var require_propagation_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.propagation=void 0;var propagation_1=require_propagation();exports.propagation=propagation_1.PropagationAPI.getInstance()});var require_trace=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.TraceAPI=void 0;var global_utils_1=require_global_utils(),ProxyTracerProvider_1=require_ProxyTracerProvider(),spancontext_utils_1=require_spancontext_utils(),context_utils_1=require_context_utils(),diag_1=require_diag(),API_NAME="trace";class TraceAPI{constructor(){this._proxyTracerProvider=new ProxyTracerProvider_1.ProxyTracerProvider,this.wrapSpanContext=spancontext_utils_1.wrapSpanContext,this.isSpanContextValid=spancontext_utils_1.isSpanContextValid,this.deleteSpan=context_utils_1.deleteSpan,this.getSpan=context_utils_1.getSpan,this.getActiveSpan=context_utils_1.getActiveSpan,this.getSpanContext=context_utils_1.getSpanContext,this.setSpan=context_utils_1.setSpan,this.setSpanContext=context_utils_1.setSpanContext}static getInstance(){if(!this._instance)this._instance=new TraceAPI;return this._instance}setGlobalTracerProvider(provider){let success2=(0,global_utils_1.registerGlobal)(API_NAME,this._proxyTracerProvider,diag_1.DiagAPI.instance());if(success2)this._proxyTracerProvider.setDelegate(provider);return success2}getTracerProvider(){return(0,global_utils_1.getGlobal)(API_NAME)||this._proxyTracerProvider}getTracer(name,version3){return this.getTracerProvider().getTracer(name,version3)}disable(){(0,global_utils_1.unregisterGlobal)(API_NAME,diag_1.DiagAPI.instance()),this._proxyTracerProvider=new ProxyTracerProvider_1.ProxyTracerProvider}}exports.TraceAPI=TraceAPI});var require_trace_api=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.trace=void 0;var trace_1=require_trace();exports.trace=trace_1.TraceAPI.getInstance()});var require_src=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.trace=exports.propagation=exports.metrics=exports.diag=exports.context=exports.INVALID_SPAN_CONTEXT=exports.INVALID_TRACEID=exports.INVALID_SPANID=exports.isValidSpanId=exports.isValidTraceId=exports.isSpanContextValid=exports.createTraceState=exports.TraceFlags=exports.SpanStatusCode=exports.SpanKind=exports.SamplingDecision=exports.ProxyTracerProvider=exports.ProxyTracer=exports.defaultTextMapSetter=exports.defaultTextMapGetter=exports.ValueType=exports.createNoopMeter=exports.DiagLogLevel=exports.DiagConsoleLogger=exports.ROOT_CONTEXT=exports.createContextKey=exports.baggageEntryMetadataFromString=void 0;var utils_1=require_utils();Object.defineProperty(exports,"baggageEntryMetadataFromString",{enumerable:!0,get:function(){return utils_1.baggageEntryMetadataFromString}});var context_1=require_context();Object.defineProperty(exports,"createContextKey",{enumerable:!0,get:function(){return context_1.createContextKey}});Object.defineProperty(exports,"ROOT_CONTEXT",{enumerable:!0,get:function(){return context_1.ROOT_CONTEXT}});var consoleLogger_1=require_consoleLogger();Object.defineProperty(exports,"DiagConsoleLogger",{enumerable:!0,get:function(){return consoleLogger_1.DiagConsoleLogger}});var types_1=require_types();Object.defineProperty(exports,"DiagLogLevel",{enumerable:!0,get:function(){return types_1.DiagLogLevel}});var NoopMeter_1=require_NoopMeter();Object.defineProperty(exports,"createNoopMeter",{enumerable:!0,get:function(){return NoopMeter_1.createNoopMeter}});var Metric_1=require_Metric();Object.defineProperty(exports,"ValueType",{enumerable:!0,get:function(){return Metric_1.ValueType}});var TextMapPropagator_1=require_TextMapPropagator();Object.defineProperty(exports,"defaultTextMapGetter",{enumerable:!0,get:function(){return TextMapPropagator_1.defaultTextMapGetter}});Object.defineProperty(exports,"defaultTextMapSetter",{enumerable:!0,get:function(){return TextMapPropagator_1.defaultTextMapSetter}});var ProxyTracer_1=require_ProxyTracer();Object.defineProperty(exports,"ProxyTracer",{enumerable:!0,get:function(){return ProxyTracer_1.ProxyTracer}});var ProxyTracerProvider_1=require_ProxyTracerProvider();Object.defineProperty(exports,"ProxyTracerProvider",{enumerable:!0,get:function(){return ProxyTracerProvider_1.ProxyTracerProvider}});var SamplingResult_1=require_SamplingResult();Object.defineProperty(exports,"SamplingDecision",{enumerable:!0,get:function(){return SamplingResult_1.SamplingDecision}});var span_kind_1=require_span_kind();Object.defineProperty(exports,"SpanKind",{enumerable:!0,get:function(){return span_kind_1.SpanKind}});var status_1=require_status();Object.defineProperty(exports,"SpanStatusCode",{enumerable:!0,get:function(){return status_1.SpanStatusCode}});var trace_flags_1=require_trace_flags();Object.defineProperty(exports,"TraceFlags",{enumerable:!0,get:function(){return trace_flags_1.TraceFlags}});var utils_2=require_utils2();Object.defineProperty(exports,"createTraceState",{enumerable:!0,get:function(){return utils_2.createTraceState}});var spancontext_utils_1=require_spancontext_utils();Object.defineProperty(exports,"isSpanContextValid",{enumerable:!0,get:function(){return spancontext_utils_1.isSpanContextValid}});Object.defineProperty(exports,"isValidTraceId",{enumerable:!0,get:function(){return spancontext_utils_1.isValidTraceId}});Object.defineProperty(exports,"isValidSpanId",{enumerable:!0,get:function(){return spancontext_utils_1.isValidSpanId}});var invalid_span_constants_1=require_invalid_span_constants();Object.defineProperty(exports,"INVALID_SPANID",{enumerable:!0,get:function(){return invalid_span_constants_1.INVALID_SPANID}});Object.defineProperty(exports,"INVALID_TRACEID",{enumerable:!0,get:function(){return invalid_span_constants_1.INVALID_TRACEID}});Object.defineProperty(exports,"INVALID_SPAN_CONTEXT",{enumerable:!0,get:function(){return invalid_span_constants_1.INVALID_SPAN_CONTEXT}});var context_api_1=require_context_api();Object.defineProperty(exports,"context",{enumerable:!0,get:function(){return context_api_1.context}});var diag_api_1=require_diag_api();Object.defineProperty(exports,"diag",{enumerable:!0,get:function(){return diag_api_1.diag}});var metrics_api_1=require_metrics_api();Object.defineProperty(exports,"metrics",{enumerable:!0,get:function(){return metrics_api_1.metrics}});var propagation_api_1=require_propagation_api();Object.defineProperty(exports,"propagation",{enumerable:!0,get:function(){return propagation_api_1.propagation}});var trace_api_1=require_trace_api();Object.defineProperty(exports,"trace",{enumerable:!0,get:function(){return trace_api_1.trace}});exports.default={context:context_api_1.context,diag:diag_api_1.diag,metrics:metrics_api_1.metrics,propagation:propagation_api_1.propagation,trace:trace_api_1.trace}});var require_utils3=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createConstMap=void 0;function createConstMap(values){let res={},len=values.length;for(let lp=0;lp<len;lp++){let val=values[lp];if(val)res[String(val).toUpperCase().replace(/[-.]/g,"_")]=val}return res}exports.createConstMap=createConstMap});var require_SemanticAttributes=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SEMATTRS_NET_HOST_CARRIER_ICC=exports.SEMATTRS_NET_HOST_CARRIER_MNC=exports.SEMATTRS_NET_HOST_CARRIER_MCC=exports.SEMATTRS_NET_HOST_CARRIER_NAME=exports.SEMATTRS_NET_HOST_CONNECTION_SUBTYPE=exports.SEMATTRS_NET_HOST_CONNECTION_TYPE=exports.SEMATTRS_NET_HOST_NAME=exports.SEMATTRS_NET_HOST_PORT=exports.SEMATTRS_NET_HOST_IP=exports.SEMATTRS_NET_PEER_NAME=exports.SEMATTRS_NET_PEER_PORT=exports.SEMATTRS_NET_PEER_IP=exports.SEMATTRS_NET_TRANSPORT=exports.SEMATTRS_FAAS_INVOKED_REGION=exports.SEMATTRS_FAAS_INVOKED_PROVIDER=exports.SEMATTRS_FAAS_INVOKED_NAME=exports.SEMATTRS_FAAS_COLDSTART=exports.SEMATTRS_FAAS_CRON=exports.SEMATTRS_FAAS_TIME=exports.SEMATTRS_FAAS_DOCUMENT_NAME=exports.SEMATTRS_FAAS_DOCUMENT_TIME=exports.SEMATTRS_FAAS_DOCUMENT_OPERATION=exports.SEMATTRS_FAAS_DOCUMENT_COLLECTION=exports.SEMATTRS_FAAS_EXECUTION=exports.SEMATTRS_FAAS_TRIGGER=exports.SEMATTRS_EXCEPTION_ESCAPED=exports.SEMATTRS_EXCEPTION_STACKTRACE=exports.SEMATTRS_EXCEPTION_MESSAGE=exports.SEMATTRS_EXCEPTION_TYPE=exports.SEMATTRS_DB_SQL_TABLE=exports.SEMATTRS_DB_MONGODB_COLLECTION=exports.SEMATTRS_DB_REDIS_DATABASE_INDEX=exports.SEMATTRS_DB_HBASE_NAMESPACE=exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_DC=exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_ID=exports.SEMATTRS_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT=exports.SEMATTRS_DB_CASSANDRA_IDEMPOTENCE=exports.SEMATTRS_DB_CASSANDRA_TABLE=exports.SEMATTRS_DB_CASSANDRA_CONSISTENCY_LEVEL=exports.SEMATTRS_DB_CASSANDRA_PAGE_SIZE=exports.SEMATTRS_DB_CASSANDRA_KEYSPACE=exports.SEMATTRS_DB_MSSQL_INSTANCE_NAME=exports.SEMATTRS_DB_OPERATION=exports.SEMATTRS_DB_STATEMENT=exports.SEMATTRS_DB_NAME=exports.SEMATTRS_DB_JDBC_DRIVER_CLASSNAME=exports.SEMATTRS_DB_USER=exports.SEMATTRS_DB_CONNECTION_STRING=exports.SEMATTRS_DB_SYSTEM=exports.SEMATTRS_AWS_LAMBDA_INVOKED_ARN=void 0;exports.SEMATTRS_MESSAGING_DESTINATION_KIND=exports.SEMATTRS_MESSAGING_DESTINATION=exports.SEMATTRS_MESSAGING_SYSTEM=exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES=exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS=exports.SEMATTRS_AWS_DYNAMODB_SCANNED_COUNT=exports.SEMATTRS_AWS_DYNAMODB_COUNT=exports.SEMATTRS_AWS_DYNAMODB_TOTAL_SEGMENTS=exports.SEMATTRS_AWS_DYNAMODB_SEGMENT=exports.SEMATTRS_AWS_DYNAMODB_SCAN_FORWARD=exports.SEMATTRS_AWS_DYNAMODB_TABLE_COUNT=exports.SEMATTRS_AWS_DYNAMODB_EXCLUSIVE_START_TABLE=exports.SEMATTRS_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES=exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES=exports.SEMATTRS_AWS_DYNAMODB_SELECT=exports.SEMATTRS_AWS_DYNAMODB_INDEX_NAME=exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTES_TO_GET=exports.SEMATTRS_AWS_DYNAMODB_LIMIT=exports.SEMATTRS_AWS_DYNAMODB_PROJECTION=exports.SEMATTRS_AWS_DYNAMODB_CONSISTENT_READ=exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY=exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY=exports.SEMATTRS_AWS_DYNAMODB_ITEM_COLLECTION_METRICS=exports.SEMATTRS_AWS_DYNAMODB_CONSUMED_CAPACITY=exports.SEMATTRS_AWS_DYNAMODB_TABLE_NAMES=exports.SEMATTRS_HTTP_CLIENT_IP=exports.SEMATTRS_HTTP_ROUTE=exports.SEMATTRS_HTTP_SERVER_NAME=exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED=exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH=exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED=exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH=exports.SEMATTRS_HTTP_USER_AGENT=exports.SEMATTRS_HTTP_FLAVOR=exports.SEMATTRS_HTTP_STATUS_CODE=exports.SEMATTRS_HTTP_SCHEME=exports.SEMATTRS_HTTP_HOST=exports.SEMATTRS_HTTP_TARGET=exports.SEMATTRS_HTTP_URL=exports.SEMATTRS_HTTP_METHOD=exports.SEMATTRS_CODE_LINENO=exports.SEMATTRS_CODE_FILEPATH=exports.SEMATTRS_CODE_NAMESPACE=exports.SEMATTRS_CODE_FUNCTION=exports.SEMATTRS_THREAD_NAME=exports.SEMATTRS_THREAD_ID=exports.SEMATTRS_ENDUSER_SCOPE=exports.SEMATTRS_ENDUSER_ROLE=exports.SEMATTRS_ENDUSER_ID=exports.SEMATTRS_PEER_SERVICE=void 0;exports.DBSYSTEMVALUES_FILEMAKER=exports.DBSYSTEMVALUES_DERBY=exports.DBSYSTEMVALUES_FIREBIRD=exports.DBSYSTEMVALUES_ADABAS=exports.DBSYSTEMVALUES_CACHE=exports.DBSYSTEMVALUES_EDB=exports.DBSYSTEMVALUES_FIRSTSQL=exports.DBSYSTEMVALUES_INGRES=exports.DBSYSTEMVALUES_HANADB=exports.DBSYSTEMVALUES_MAXDB=exports.DBSYSTEMVALUES_PROGRESS=exports.DBSYSTEMVALUES_HSQLDB=exports.DBSYSTEMVALUES_CLOUDSCAPE=exports.DBSYSTEMVALUES_HIVE=exports.DBSYSTEMVALUES_REDSHIFT=exports.DBSYSTEMVALUES_POSTGRESQL=exports.DBSYSTEMVALUES_DB2=exports.DBSYSTEMVALUES_ORACLE=exports.DBSYSTEMVALUES_MYSQL=exports.DBSYSTEMVALUES_MSSQL=exports.DBSYSTEMVALUES_OTHER_SQL=exports.SemanticAttributes=exports.SEMATTRS_MESSAGE_UNCOMPRESSED_SIZE=exports.SEMATTRS_MESSAGE_COMPRESSED_SIZE=exports.SEMATTRS_MESSAGE_ID=exports.SEMATTRS_MESSAGE_TYPE=exports.SEMATTRS_RPC_JSONRPC_ERROR_MESSAGE=exports.SEMATTRS_RPC_JSONRPC_ERROR_CODE=exports.SEMATTRS_RPC_JSONRPC_REQUEST_ID=exports.SEMATTRS_RPC_JSONRPC_VERSION=exports.SEMATTRS_RPC_GRPC_STATUS_CODE=exports.SEMATTRS_RPC_METHOD=exports.SEMATTRS_RPC_SERVICE=exports.SEMATTRS_RPC_SYSTEM=exports.SEMATTRS_MESSAGING_KAFKA_TOMBSTONE=exports.SEMATTRS_MESSAGING_KAFKA_PARTITION=exports.SEMATTRS_MESSAGING_KAFKA_CLIENT_ID=exports.SEMATTRS_MESSAGING_KAFKA_CONSUMER_GROUP=exports.SEMATTRS_MESSAGING_KAFKA_MESSAGE_KEY=exports.SEMATTRS_MESSAGING_RABBITMQ_ROUTING_KEY=exports.SEMATTRS_MESSAGING_CONSUMER_ID=exports.SEMATTRS_MESSAGING_OPERATION=exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES=exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES=exports.SEMATTRS_MESSAGING_CONVERSATION_ID=exports.SEMATTRS_MESSAGING_MESSAGE_ID=exports.SEMATTRS_MESSAGING_URL=exports.SEMATTRS_MESSAGING_PROTOCOL_VERSION=exports.SEMATTRS_MESSAGING_PROTOCOL=exports.SEMATTRS_MESSAGING_TEMP_DESTINATION=void 0;exports.FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD=exports.FaasDocumentOperationValues=exports.FAASDOCUMENTOPERATIONVALUES_DELETE=exports.FAASDOCUMENTOPERATIONVALUES_EDIT=exports.FAASDOCUMENTOPERATIONVALUES_INSERT=exports.FaasTriggerValues=exports.FAASTRIGGERVALUES_OTHER=exports.FAASTRIGGERVALUES_TIMER=exports.FAASTRIGGERVALUES_PUBSUB=exports.FAASTRIGGERVALUES_HTTP=exports.FAASTRIGGERVALUES_DATASOURCE=exports.DbCassandraConsistencyLevelValues=exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL=exports.DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL=exports.DBCASSANDRACONSISTENCYLEVELVALUES_ANY=exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE=exports.DBCASSANDRACONSISTENCYLEVELVALUES_THREE=exports.DBCASSANDRACONSISTENCYLEVELVALUES_TWO=exports.DBCASSANDRACONSISTENCYLEVELVALUES_ONE=exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM=exports.DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM=exports.DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM=exports.DBCASSANDRACONSISTENCYLEVELVALUES_ALL=exports.DbSystemValues=exports.DBSYSTEMVALUES_COCKROACHDB=exports.DBSYSTEMVALUES_MEMCACHED=exports.DBSYSTEMVALUES_ELASTICSEARCH=exports.DBSYSTEMVALUES_GEODE=exports.DBSYSTEMVALUES_NEO4J=exports.DBSYSTEMVALUES_DYNAMODB=exports.DBSYSTEMVALUES_COSMOSDB=exports.DBSYSTEMVALUES_COUCHDB=exports.DBSYSTEMVALUES_COUCHBASE=exports.DBSYSTEMVALUES_REDIS=exports.DBSYSTEMVALUES_MONGODB=exports.DBSYSTEMVALUES_HBASE=exports.DBSYSTEMVALUES_CASSANDRA=exports.DBSYSTEMVALUES_COLDFUSION=exports.DBSYSTEMVALUES_H2=exports.DBSYSTEMVALUES_VERTICA=exports.DBSYSTEMVALUES_TERADATA=exports.DBSYSTEMVALUES_SYBASE=exports.DBSYSTEMVALUES_SQLITE=exports.DBSYSTEMVALUES_POINTBASE=exports.DBSYSTEMVALUES_PERVASIVE=exports.DBSYSTEMVALUES_NETEZZA=exports.DBSYSTEMVALUES_MARIADB=exports.DBSYSTEMVALUES_INTERBASE=exports.DBSYSTEMVALUES_INSTANTDB=exports.DBSYSTEMVALUES_INFORMIX=void 0;exports.MESSAGINGOPERATIONVALUES_RECEIVE=exports.MessagingDestinationKindValues=exports.MESSAGINGDESTINATIONKINDVALUES_TOPIC=exports.MESSAGINGDESTINATIONKINDVALUES_QUEUE=exports.HttpFlavorValues=exports.HTTPFLAVORVALUES_QUIC=exports.HTTPFLAVORVALUES_SPDY=exports.HTTPFLAVORVALUES_HTTP_2_0=exports.HTTPFLAVORVALUES_HTTP_1_1=exports.HTTPFLAVORVALUES_HTTP_1_0=exports.NetHostConnectionSubtypeValues=exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA=exports.NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA=exports.NETHOSTCONNECTIONSUBTYPEVALUES_NR=exports.NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN=exports.NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA=exports.NETHOSTCONNECTIONSUBTYPEVALUES_GSM=exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP=exports.NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD=exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE=exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B=exports.NETHOSTCONNECTIONSUBTYPEVALUES_IDEN=exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPA=exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA=exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA=exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT=exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A=exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0=exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA=exports.NETHOSTCONNECTIONSUBTYPEVALUES_UMTS=exports.NETHOSTCONNECTIONSUBTYPEVALUES_EDGE=exports.NETHOSTCONNECTIONSUBTYPEVALUES_GPRS=exports.NetHostConnectionTypeValues=exports.NETHOSTCONNECTIONTYPEVALUES_UNKNOWN=exports.NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE=exports.NETHOSTCONNECTIONTYPEVALUES_CELL=exports.NETHOSTCONNECTIONTYPEVALUES_WIRED=exports.NETHOSTCONNECTIONTYPEVALUES_WIFI=exports.NetTransportValues=exports.NETTRANSPORTVALUES_OTHER=exports.NETTRANSPORTVALUES_INPROC=exports.NETTRANSPORTVALUES_PIPE=exports.NETTRANSPORTVALUES_UNIX=exports.NETTRANSPORTVALUES_IP=exports.NETTRANSPORTVALUES_IP_UDP=exports.NETTRANSPORTVALUES_IP_TCP=exports.FaasInvokedProviderValues=exports.FAASINVOKEDPROVIDERVALUES_GCP=exports.FAASINVOKEDPROVIDERVALUES_AZURE=exports.FAASINVOKEDPROVIDERVALUES_AWS=void 0;exports.MessageTypeValues=exports.MESSAGETYPEVALUES_RECEIVED=exports.MESSAGETYPEVALUES_SENT=exports.RpcGrpcStatusCodeValues=exports.RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED=exports.RPCGRPCSTATUSCODEVALUES_DATA_LOSS=exports.RPCGRPCSTATUSCODEVALUES_UNAVAILABLE=exports.RPCGRPCSTATUSCODEVALUES_INTERNAL=exports.RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED=exports.RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE=exports.RPCGRPCSTATUSCODEVALUES_ABORTED=exports.RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION=exports.RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED=exports.RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED=exports.RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS=exports.RPCGRPCSTATUSCODEVALUES_NOT_FOUND=exports.RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED=exports.RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT=exports.RPCGRPCSTATUSCODEVALUES_UNKNOWN=exports.RPCGRPCSTATUSCODEVALUES_CANCELLED=exports.RPCGRPCSTATUSCODEVALUES_OK=exports.MessagingOperationValues=exports.MESSAGINGOPERATIONVALUES_PROCESS=void 0;var utils_1=require_utils3(),TMP_AWS_LAMBDA_INVOKED_ARN="aws.lambda.invoked_arn",TMP_DB_SYSTEM="db.system",TMP_DB_CONNECTION_STRING="db.connection_string",TMP_DB_USER="db.user",TMP_DB_JDBC_DRIVER_CLASSNAME="db.jdbc.driver_classname",TMP_DB_NAME="db.name",TMP_DB_STATEMENT="db.statement",TMP_DB_OPERATION="db.operation",TMP_DB_MSSQL_INSTANCE_NAME="db.mssql.instance_name",TMP_DB_CASSANDRA_KEYSPACE="db.cassandra.keyspace",TMP_DB_CASSANDRA_PAGE_SIZE="db.cassandra.page_size",TMP_DB_CASSANDRA_CONSISTENCY_LEVEL="db.cassandra.consistency_level",TMP_DB_CASSANDRA_TABLE="db.cassandra.table",TMP_DB_CASSANDRA_IDEMPOTENCE="db.cassandra.idempotence",TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT="db.cassandra.speculative_execution_count",TMP_DB_CASSANDRA_COORDINATOR_ID="db.cassandra.coordinator.id",TMP_DB_CASSANDRA_COORDINATOR_DC="db.cassandra.coordinator.dc",TMP_DB_HBASE_NAMESPACE="db.hbase.namespace",TMP_DB_REDIS_DATABASE_INDEX="db.redis.database_index",TMP_DB_MONGODB_COLLECTION="db.mongodb.collection",TMP_DB_SQL_TABLE="db.sql.table",TMP_EXCEPTION_TYPE="exception.type",TMP_EXCEPTION_MESSAGE="exception.message",TMP_EXCEPTION_STACKTRACE="exception.stacktrace",TMP_EXCEPTION_ESCAPED="exception.escaped",TMP_FAAS_TRIGGER="faas.trigger",TMP_FAAS_EXECUTION="faas.execution",TMP_FAAS_DOCUMENT_COLLECTION="faas.document.collection",TMP_FAAS_DOCUMENT_OPERATION="faas.document.operation",TMP_FAAS_DOCUMENT_TIME="faas.document.time",TMP_FAAS_DOCUMENT_NAME="faas.document.name",TMP_FAAS_TIME="faas.time",TMP_FAAS_CRON="faas.cron",TMP_FAAS_COLDSTART="faas.coldstart",TMP_FAAS_INVOKED_NAME="faas.invoked_name",TMP_FAAS_INVOKED_PROVIDER="faas.invoked_provider",TMP_FAAS_INVOKED_REGION="faas.invoked_region",TMP_NET_TRANSPORT="net.transport",TMP_NET_PEER_IP="net.peer.ip",TMP_NET_PEER_PORT="net.peer.port",TMP_NET_PEER_NAME="net.peer.name",TMP_NET_HOST_IP="net.host.ip",TMP_NET_HOST_PORT="net.host.port",TMP_NET_HOST_NAME="net.host.name",TMP_NET_HOST_CONNECTION_TYPE="net.host.connection.type",TMP_NET_HOST_CONNECTION_SUBTYPE="net.host.connection.subtype",TMP_NET_HOST_CARRIER_NAME="net.host.carrier.name",TMP_NET_HOST_CARRIER_MCC="net.host.carrier.mcc",TMP_NET_HOST_CARRIER_MNC="net.host.carrier.mnc",TMP_NET_HOST_CARRIER_ICC="net.host.carrier.icc",TMP_PEER_SERVICE="peer.service",TMP_ENDUSER_ID="enduser.id",TMP_ENDUSER_ROLE="enduser.role",TMP_ENDUSER_SCOPE="enduser.scope",TMP_THREAD_ID="thread.id",TMP_THREAD_NAME="thread.name",TMP_CODE_FUNCTION="code.function",TMP_CODE_NAMESPACE="code.namespace",TMP_CODE_FILEPATH="code.filepath",TMP_CODE_LINENO="code.lineno",TMP_HTTP_METHOD="http.method",TMP_HTTP_URL="http.url",TMP_HTTP_TARGET="http.target",TMP_HTTP_HOST="http.host",TMP_HTTP_SCHEME="http.scheme",TMP_HTTP_STATUS_CODE="http.status_code",TMP_HTTP_FLAVOR="http.flavor",TMP_HTTP_USER_AGENT="http.user_agent",TMP_HTTP_REQUEST_CONTENT_LENGTH="http.request_content_length",TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED="http.request_content_length_uncompressed",TMP_HTTP_RESPONSE_CONTENT_LENGTH="http.response_content_length",TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED="http.response_content_length_uncompressed",TMP_HTTP_SERVER_NAME="http.server_name",TMP_HTTP_ROUTE="http.route",TMP_HTTP_CLIENT_IP="http.client_ip",TMP_AWS_DYNAMODB_TABLE_NAMES="aws.dynamodb.table_names",TMP_AWS_DYNAMODB_CONSUMED_CAPACITY="aws.dynamodb.consumed_capacity",TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS="aws.dynamodb.item_collection_metrics",TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY="aws.dynamodb.provisioned_read_capacity",TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY="aws.dynamodb.provisioned_write_capacity",TMP_AWS_DYNAMODB_CONSISTENT_READ="aws.dynamodb.consistent_read",TMP_AWS_DYNAMODB_PROJECTION="aws.dynamodb.projection",TMP_AWS_DYNAMODB_LIMIT="aws.dynamodb.limit",TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET="aws.dynamodb.attributes_to_get",TMP_AWS_DYNAMODB_INDEX_NAME="aws.dynamodb.index_name",TMP_AWS_DYNAMODB_SELECT="aws.dynamodb.select",TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES="aws.dynamodb.global_secondary_indexes",TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES="aws.dynamodb.local_secondary_indexes",TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE="aws.dynamodb.exclusive_start_table",TMP_AWS_DYNAMODB_TABLE_COUNT="aws.dynamodb.table_count",TMP_AWS_DYNAMODB_SCAN_FORWARD="aws.dynamodb.scan_forward",TMP_AWS_DYNAMODB_SEGMENT="aws.dynamodb.segment",TMP_AWS_DYNAMODB_TOTAL_SEGMENTS="aws.dynamodb.total_segments",TMP_AWS_DYNAMODB_COUNT="aws.dynamodb.count",TMP_AWS_DYNAMODB_SCANNED_COUNT="aws.dynamodb.scanned_count",TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS="aws.dynamodb.attribute_definitions",TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES="aws.dynamodb.global_secondary_index_updates",TMP_MESSAGING_SYSTEM="messaging.system",TMP_MESSAGING_DESTINATION="messaging.destination",TMP_MESSAGING_DESTINATION_KIND="messaging.destination_kind",TMP_MESSAGING_TEMP_DESTINATION="messaging.temp_destination",TMP_MESSAGING_PROTOCOL="messaging.protocol",TMP_MESSAGING_PROTOCOL_VERSION="messaging.protocol_version",TMP_MESSAGING_URL="messaging.url",TMP_MESSAGING_MESSAGE_ID="messaging.message_id",TMP_MESSAGING_CONVERSATION_ID="messaging.conversation_id",TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES="messaging.message_payload_size_bytes",TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES="messaging.message_payload_compressed_size_bytes",TMP_MESSAGING_OPERATION="messaging.operation",TMP_MESSAGING_CONSUMER_ID="messaging.consumer_id",TMP_MESSAGING_RABBITMQ_ROUTING_KEY="messaging.rabbitmq.routing_key",TMP_MESSAGING_KAFKA_MESSAGE_KEY="messaging.kafka.message_key",TMP_MESSAGING_KAFKA_CONSUMER_GROUP="messaging.kafka.consumer_group",TMP_MESSAGING_KAFKA_CLIENT_ID="messaging.kafka.client_id",TMP_MESSAGING_KAFKA_PARTITION="messaging.kafka.partition",TMP_MESSAGING_KAFKA_TOMBSTONE="messaging.kafka.tombstone",TMP_RPC_SYSTEM="rpc.system",TMP_RPC_SERVICE="rpc.service",TMP_RPC_METHOD="rpc.method",TMP_RPC_GRPC_STATUS_CODE="rpc.grpc.status_code",TMP_RPC_JSONRPC_VERSION="rpc.jsonrpc.version",TMP_RPC_JSONRPC_REQUEST_ID="rpc.jsonrpc.request_id",TMP_RPC_JSONRPC_ERROR_CODE="rpc.jsonrpc.error_code",TMP_RPC_JSONRPC_ERROR_MESSAGE="rpc.jsonrpc.error_message",TMP_MESSAGE_TYPE="message.type",TMP_MESSAGE_ID="message.id",TMP_MESSAGE_COMPRESSED_SIZE="message.compressed_size",TMP_MESSAGE_UNCOMPRESSED_SIZE="message.uncompressed_size";exports.SEMATTRS_AWS_LAMBDA_INVOKED_ARN=TMP_AWS_LAMBDA_INVOKED_ARN;exports.SEMATTRS_DB_SYSTEM=TMP_DB_SYSTEM;exports.SEMATTRS_DB_CONNECTION_STRING=TMP_DB_CONNECTION_STRING;exports.SEMATTRS_DB_USER=TMP_DB_USER;exports.SEMATTRS_DB_JDBC_DRIVER_CLASSNAME=TMP_DB_JDBC_DRIVER_CLASSNAME;exports.SEMATTRS_DB_NAME=TMP_DB_NAME;exports.SEMATTRS_DB_STATEMENT=TMP_DB_STATEMENT;exports.SEMATTRS_DB_OPERATION=TMP_DB_OPERATION;exports.SEMATTRS_DB_MSSQL_INSTANCE_NAME=TMP_DB_MSSQL_INSTANCE_NAME;exports.SEMATTRS_DB_CASSANDRA_KEYSPACE=TMP_DB_CASSANDRA_KEYSPACE;exports.SEMATTRS_DB_CASSANDRA_PAGE_SIZE=TMP_DB_CASSANDRA_PAGE_SIZE;exports.SEMATTRS_DB_CASSANDRA_CONSISTENCY_LEVEL=TMP_DB_CASSANDRA_CONSISTENCY_LEVEL;exports.SEMATTRS_DB_CASSANDRA_TABLE=TMP_DB_CASSANDRA_TABLE;exports.SEMATTRS_DB_CASSANDRA_IDEMPOTENCE=TMP_DB_CASSANDRA_IDEMPOTENCE;exports.SEMATTRS_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT=TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT;exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_ID=TMP_DB_CASSANDRA_COORDINATOR_ID;exports.SEMATTRS_DB_CASSANDRA_COORDINATOR_DC=TMP_DB_CASSANDRA_COORDINATOR_DC;exports.SEMATTRS_DB_HBASE_NAMESPACE=TMP_DB_HBASE_NAMESPACE;exports.SEMATTRS_DB_REDIS_DATABASE_INDEX=TMP_DB_REDIS_DATABASE_INDEX;exports.SEMATTRS_DB_MONGODB_COLLECTION=TMP_DB_MONGODB_COLLECTION;exports.SEMATTRS_DB_SQL_TABLE=TMP_DB_SQL_TABLE;exports.SEMATTRS_EXCEPTION_TYPE=TMP_EXCEPTION_TYPE;exports.SEMATTRS_EXCEPTION_MESSAGE=TMP_EXCEPTION_MESSAGE;exports.SEMATTRS_EXCEPTION_STACKTRACE=TMP_EXCEPTION_STACKTRACE;exports.SEMATTRS_EXCEPTION_ESCAPED=TMP_EXCEPTION_ESCAPED;exports.SEMATTRS_FAAS_TRIGGER=TMP_FAAS_TRIGGER;exports.SEMATTRS_FAAS_EXECUTION=TMP_FAAS_EXECUTION;exports.SEMATTRS_FAAS_DOCUMENT_COLLECTION=TMP_FAAS_DOCUMENT_COLLECTION;exports.SEMATTRS_FAAS_DOCUMENT_OPERATION=TMP_FAAS_DOCUMENT_OPERATION;exports.SEMATTRS_FAAS_DOCUMENT_TIME=TMP_FAAS_DOCUMENT_TIME;exports.SEMATTRS_FAAS_DOCUMENT_NAME=TMP_FAAS_DOCUMENT_NAME;exports.SEMATTRS_FAAS_TIME=TMP_FAAS_TIME;exports.SEMATTRS_FAAS_CRON=TMP_FAAS_CRON;exports.SEMATTRS_FAAS_COLDSTART=TMP_FAAS_COLDSTART;exports.SEMATTRS_FAAS_INVOKED_NAME=TMP_FAAS_INVOKED_NAME;exports.SEMATTRS_FAAS_INVOKED_PROVIDER=TMP_FAAS_INVOKED_PROVIDER;exports.SEMATTRS_FAAS_INVOKED_REGION=TMP_FAAS_INVOKED_REGION;exports.SEMATTRS_NET_TRANSPORT=TMP_NET_TRANSPORT;exports.SEMATTRS_NET_PEER_IP=TMP_NET_PEER_IP;exports.SEMATTRS_NET_PEER_PORT=TMP_NET_PEER_PORT;exports.SEMATTRS_NET_PEER_NAME=TMP_NET_PEER_NAME;exports.SEMATTRS_NET_HOST_IP=TMP_NET_HOST_IP;exports.SEMATTRS_NET_HOST_PORT=TMP_NET_HOST_PORT;exports.SEMATTRS_NET_HOST_NAME=TMP_NET_HOST_NAME;exports.SEMATTRS_NET_HOST_CONNECTION_TYPE=TMP_NET_HOST_CONNECTION_TYPE;exports.SEMATTRS_NET_HOST_CONNECTION_SUBTYPE=TMP_NET_HOST_CONNECTION_SUBTYPE;exports.SEMATTRS_NET_HOST_CARRIER_NAME=TMP_NET_HOST_CARRIER_NAME;exports.SEMATTRS_NET_HOST_CARRIER_MCC=TMP_NET_HOST_CARRIER_MCC;exports.SEMATTRS_NET_HOST_CARRIER_MNC=TMP_NET_HOST_CARRIER_MNC;exports.SEMATTRS_NET_HOST_CARRIER_ICC=TMP_NET_HOST_CARRIER_ICC;exports.SEMATTRS_PEER_SERVICE=TMP_PEER_SERVICE;exports.SEMATTRS_ENDUSER_ID=TMP_ENDUSER_ID;exports.SEMATTRS_ENDUSER_ROLE=TMP_ENDUSER_ROLE;exports.SEMATTRS_ENDUSER_SCOPE=TMP_ENDUSER_SCOPE;exports.SEMATTRS_THREAD_ID=TMP_THREAD_ID;exports.SEMATTRS_THREAD_NAME=TMP_THREAD_NAME;exports.SEMATTRS_CODE_FUNCTION=TMP_CODE_FUNCTION;exports.SEMATTRS_CODE_NAMESPACE=TMP_CODE_NAMESPACE;exports.SEMATTRS_CODE_FILEPATH=TMP_CODE_FILEPATH;exports.SEMATTRS_CODE_LINENO=TMP_CODE_LINENO;exports.SEMATTRS_HTTP_METHOD=TMP_HTTP_METHOD;exports.SEMATTRS_HTTP_URL=TMP_HTTP_URL;exports.SEMATTRS_HTTP_TARGET=TMP_HTTP_TARGET;exports.SEMATTRS_HTTP_HOST=TMP_HTTP_HOST;exports.SEMATTRS_HTTP_SCHEME=TMP_HTTP_SCHEME;exports.SEMATTRS_HTTP_STATUS_CODE=TMP_HTTP_STATUS_CODE;exports.SEMATTRS_HTTP_FLAVOR=TMP_HTTP_FLAVOR;exports.SEMATTRS_HTTP_USER_AGENT=TMP_HTTP_USER_AGENT;exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH=TMP_HTTP_REQUEST_CONTENT_LENGTH;exports.SEMATTRS_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED=TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED;exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH=TMP_HTTP_RESPONSE_CONTENT_LENGTH;exports.SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED=TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED;exports.SEMATTRS_HTTP_SERVER_NAME=TMP_HTTP_SERVER_NAME;exports.SEMATTRS_HTTP_ROUTE=TMP_HTTP_ROUTE;exports.SEMATTRS_HTTP_CLIENT_IP=TMP_HTTP_CLIENT_IP;exports.SEMATTRS_AWS_DYNAMODB_TABLE_NAMES=TMP_AWS_DYNAMODB_TABLE_NAMES;exports.SEMATTRS_AWS_DYNAMODB_CONSUMED_CAPACITY=TMP_AWS_DYNAMODB_CONSUMED_CAPACITY;exports.SEMATTRS_AWS_DYNAMODB_ITEM_COLLECTION_METRICS=TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS;exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY=TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY;exports.SEMATTRS_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY=TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY;exports.SEMATTRS_AWS_DYNAMODB_CONSISTENT_READ=TMP_AWS_DYNAMODB_CONSISTENT_READ;exports.SEMATTRS_AWS_DYNAMODB_PROJECTION=TMP_AWS_DYNAMODB_PROJECTION;exports.SEMATTRS_AWS_DYNAMODB_LIMIT=TMP_AWS_DYNAMODB_LIMIT;exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTES_TO_GET=TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET;exports.SEMATTRS_AWS_DYNAMODB_INDEX_NAME=TMP_AWS_DYNAMODB_INDEX_NAME;exports.SEMATTRS_AWS_DYNAMODB_SELECT=TMP_AWS_DYNAMODB_SELECT;exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES=TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES;exports.SEMATTRS_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES=TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES;exports.SEMATTRS_AWS_DYNAMODB_EXCLUSIVE_START_TABLE=TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE;exports.SEMATTRS_AWS_DYNAMODB_TABLE_COUNT=TMP_AWS_DYNAMODB_TABLE_COUNT;exports.SEMATTRS_AWS_DYNAMODB_SCAN_FORWARD=TMP_AWS_DYNAMODB_SCAN_FORWARD;exports.SEMATTRS_AWS_DYNAMODB_SEGMENT=TMP_AWS_DYNAMODB_SEGMENT;exports.SEMATTRS_AWS_DYNAMODB_TOTAL_SEGMENTS=TMP_AWS_DYNAMODB_TOTAL_SEGMENTS;exports.SEMATTRS_AWS_DYNAMODB_COUNT=TMP_AWS_DYNAMODB_COUNT;exports.SEMATTRS_AWS_DYNAMODB_SCANNED_COUNT=TMP_AWS_DYNAMODB_SCANNED_COUNT;exports.SEMATTRS_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS=TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS;exports.SEMATTRS_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES=TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES;exports.SEMATTRS_MESSAGING_SYSTEM=TMP_MESSAGING_SYSTEM;exports.SEMATTRS_MESSAGING_DESTINATION=TMP_MESSAGING_DESTINATION;exports.SEMATTRS_MESSAGING_DESTINATION_KIND=TMP_MESSAGING_DESTINATION_KIND;exports.SEMATTRS_MESSAGING_TEMP_DESTINATION=TMP_MESSAGING_TEMP_DESTINATION;exports.SEMATTRS_MESSAGING_PROTOCOL=TMP_MESSAGING_PROTOCOL;exports.SEMATTRS_MESSAGING_PROTOCOL_VERSION=TMP_MESSAGING_PROTOCOL_VERSION;exports.SEMATTRS_MESSAGING_URL=TMP_MESSAGING_URL;exports.SEMATTRS_MESSAGING_MESSAGE_ID=TMP_MESSAGING_MESSAGE_ID;exports.SEMATTRS_MESSAGING_CONVERSATION_ID=TMP_MESSAGING_CONVERSATION_ID;exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES=TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES;exports.SEMATTRS_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES=TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES;exports.SEMATTRS_MESSAGING_OPERATION=TMP_MESSAGING_OPERATION;exports.SEMATTRS_MESSAGING_CONSUMER_ID=TMP_MESSAGING_CONSUMER_ID;exports.SEMATTRS_MESSAGING_RABBITMQ_ROUTING_KEY=TMP_MESSAGING_RABBITMQ_ROUTING_KEY;exports.SEMATTRS_MESSAGING_KAFKA_MESSAGE_KEY=TMP_MESSAGING_KAFKA_MESSAGE_KEY;exports.SEMATTRS_MESSAGING_KAFKA_CONSUMER_GROUP=TMP_MESSAGING_KAFKA_CONSUMER_GROUP;exports.SEMATTRS_MESSAGING_KAFKA_CLIENT_ID=TMP_MESSAGING_KAFKA_CLIENT_ID;exports.SEMATTRS_MESSAGING_KAFKA_PARTITION=TMP_MESSAGING_KAFKA_PARTITION;exports.SEMATTRS_MESSAGING_KAFKA_TOMBSTONE=TMP_MESSAGING_KAFKA_TOMBSTONE;exports.SEMATTRS_RPC_SYSTEM=TMP_RPC_SYSTEM;exports.SEMATTRS_RPC_SERVICE=TMP_RPC_SERVICE;exports.SEMATTRS_RPC_METHOD=TMP_RPC_METHOD;exports.SEMATTRS_RPC_GRPC_STATUS_CODE=TMP_RPC_GRPC_STATUS_CODE;exports.SEMATTRS_RPC_JSONRPC_VERSION=TMP_RPC_JSONRPC_VERSION;exports.SEMATTRS_RPC_JSONRPC_REQUEST_ID=TMP_RPC_JSONRPC_REQUEST_ID;exports.SEMATTRS_RPC_JSONRPC_ERROR_CODE=TMP_RPC_JSONRPC_ERROR_CODE;exports.SEMATTRS_RPC_JSONRPC_ERROR_MESSAGE=TMP_RPC_JSONRPC_ERROR_MESSAGE;exports.SEMATTRS_MESSAGE_TYPE=TMP_MESSAGE_TYPE;exports.SEMATTRS_MESSAGE_ID=TMP_MESSAGE_ID;exports.SEMATTRS_MESSAGE_COMPRESSED_SIZE=TMP_MESSAGE_COMPRESSED_SIZE;exports.SEMATTRS_MESSAGE_UNCOMPRESSED_SIZE=TMP_MESSAGE_UNCOMPRESSED_SIZE;exports.SemanticAttributes=(0,utils_1.createConstMap)([TMP_AWS_LAMBDA_INVOKED_ARN,TMP_DB_SYSTEM,TMP_DB_CONNECTION_STRING,TMP_DB_USER,TMP_DB_JDBC_DRIVER_CLASSNAME,TMP_DB_NAME,TMP_DB_STATEMENT,TMP_DB_OPERATION,TMP_DB_MSSQL_INSTANCE_NAME,TMP_DB_CASSANDRA_KEYSPACE,TMP_DB_CASSANDRA_PAGE_SIZE,TMP_DB_CASSANDRA_CONSISTENCY_LEVEL,TMP_DB_CASSANDRA_TABLE,TMP_DB_CASSANDRA_IDEMPOTENCE,TMP_DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT,TMP_DB_CASSANDRA_COORDINATOR_ID,TMP_DB_CASSANDRA_COORDINATOR_DC,TMP_DB_HBASE_NAMESPACE,TMP_DB_REDIS_DATABASE_INDEX,TMP_DB_MONGODB_COLLECTION,TMP_DB_SQL_TABLE,TMP_EXCEPTION_TYPE,TMP_EXCEPTION_MESSAGE,TMP_EXCEPTION_STACKTRACE,TMP_EXCEPTION_ESCAPED,TMP_FAAS_TRIGGER,TMP_FAAS_EXECUTION,TMP_FAAS_DOCUMENT_COLLECTION,TMP_FAAS_DOCUMENT_OPERATION,TMP_FAAS_DOCUMENT_TIME,TMP_FAAS_DOCUMENT_NAME,TMP_FAAS_TIME,TMP_FAAS_CRON,TMP_FAAS_COLDSTART,TMP_FAAS_INVOKED_NAME,TMP_FAAS_INVOKED_PROVIDER,TMP_FAAS_INVOKED_REGION,TMP_NET_TRANSPORT,TMP_NET_PEER_IP,TMP_NET_PEER_PORT,TMP_NET_PEER_NAME,TMP_NET_HOST_IP,TMP_NET_HOST_PORT,TMP_NET_HOST_NAME,TMP_NET_HOST_CONNECTION_TYPE,TMP_NET_HOST_CONNECTION_SUBTYPE,TMP_NET_HOST_CARRIER_NAME,TMP_NET_HOST_CARRIER_MCC,TMP_NET_HOST_CARRIER_MNC,TMP_NET_HOST_CARRIER_ICC,TMP_PEER_SERVICE,TMP_ENDUSER_ID,TMP_ENDUSER_ROLE,TMP_ENDUSER_SCOPE,TMP_THREAD_ID,TMP_THREAD_NAME,TMP_CODE_FUNCTION,TMP_CODE_NAMESPACE,TMP_CODE_FILEPATH,TMP_CODE_LINENO,TMP_HTTP_METHOD,TMP_HTTP_URL,TMP_HTTP_TARGET,TMP_HTTP_HOST,TMP_HTTP_SCHEME,TMP_HTTP_STATUS_CODE,TMP_HTTP_FLAVOR,TMP_HTTP_USER_AGENT,TMP_HTTP_REQUEST_CONTENT_LENGTH,TMP_HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED,TMP_HTTP_RESPONSE_CONTENT_LENGTH,TMP_HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED,TMP_HTTP_SERVER_NAME,TMP_HTTP_ROUTE,TMP_HTTP_CLIENT_IP,TMP_AWS_DYNAMODB_TABLE_NAMES,TMP_AWS_DYNAMODB_CONSUMED_CAPACITY,TMP_AWS_DYNAMODB_ITEM_COLLECTION_METRICS,TMP_AWS_DYNAMODB_PROVISIONED_READ_CAPACITY,TMP_AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY,TMP_AWS_DYNAMODB_CONSISTENT_READ,TMP_AWS_DYNAMODB_PROJECTION,TMP_AWS_DYNAMODB_LIMIT,TMP_AWS_DYNAMODB_ATTRIBUTES_TO_GET,TMP_AWS_DYNAMODB_INDEX_NAME,TMP_AWS_DYNAMODB_SELECT,TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES,TMP_AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES,TMP_AWS_DYNAMODB_EXCLUSIVE_START_TABLE,TMP_AWS_DYNAMODB_TABLE_COUNT,TMP_AWS_DYNAMODB_SCAN_FORWARD,TMP_AWS_DYNAMODB_SEGMENT,TMP_AWS_DYNAMODB_TOTAL_SEGMENTS,TMP_AWS_DYNAMODB_COUNT,TMP_AWS_DYNAMODB_SCANNED_COUNT,TMP_AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS,TMP_AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES,TMP_MESSAGING_SYSTEM,TMP_MESSAGING_DESTINATION,TMP_MESSAGING_DESTINATION_KIND,TMP_MESSAGING_TEMP_DESTINATION,TMP_MESSAGING_PROTOCOL,TMP_MESSAGING_PROTOCOL_VERSION,TMP_MESSAGING_URL,TMP_MESSAGING_MESSAGE_ID,TMP_MESSAGING_CONVERSATION_ID,TMP_MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES,TMP_MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES,TMP_MESSAGING_OPERATION,TMP_MESSAGING_CONSUMER_ID,TMP_MESSAGING_RABBITMQ_ROUTING_KEY,TMP_MESSAGING_KAFKA_MESSAGE_KEY,TMP_MESSAGING_KAFKA_CONSUMER_GROUP,TMP_MESSAGING_KAFKA_CLIENT_ID,TMP_MESSAGING_KAFKA_PARTITION,TMP_MESSAGING_KAFKA_TOMBSTONE,TMP_RPC_SYSTEM,TMP_RPC_SERVICE,TMP_RPC_METHOD,TMP_RPC_GRPC_STATUS_CODE,TMP_RPC_JSONRPC_VERSION,TMP_RPC_JSONRPC_REQUEST_ID,TMP_RPC_JSONRPC_ERROR_CODE,TMP_RPC_JSONRPC_ERROR_MESSAGE,TMP_MESSAGE_TYPE,TMP_MESSAGE_ID,TMP_MESSAGE_COMPRESSED_SIZE,TMP_MESSAGE_UNCOMPRESSED_SIZE]);var TMP_DBSYSTEMVALUES_OTHER_SQL="other_sql",TMP_DBSYSTEMVALUES_MSSQL="mssql",TMP_DBSYSTEMVALUES_MYSQL="mysql",TMP_DBSYSTEMVALUES_ORACLE="oracle",TMP_DBSYSTEMVALUES_DB2="db2",TMP_DBSYSTEMVALUES_POSTGRESQL="postgresql",TMP_DBSYSTEMVALUES_REDSHIFT="redshift",TMP_DBSYSTEMVALUES_HIVE="hive",TMP_DBSYSTEMVALUES_CLOUDSCAPE="cloudscape",TMP_DBSYSTEMVALUES_HSQLDB="hsqldb",TMP_DBSYSTEMVALUES_PROGRESS="progress",TMP_DBSYSTEMVALUES_MAXDB="maxdb",TMP_DBSYSTEMVALUES_HANADB="hanadb",TMP_DBSYSTEMVALUES_INGRES="ingres",TMP_DBSYSTEMVALUES_FIRSTSQL="firstsql",TMP_DBSYSTEMVALUES_EDB="edb",TMP_DBSYSTEMVALUES_CACHE="cache",TMP_DBSYSTEMVALUES_ADABAS="adabas",TMP_DBSYSTEMVALUES_FIREBIRD="firebird",TMP_DBSYSTEMVALUES_DERBY="derby",TMP_DBSYSTEMVALUES_FILEMAKER="filemaker",TMP_DBSYSTEMVALUES_INFORMIX="informix",TMP_DBSYSTEMVALUES_INSTANTDB="instantdb",TMP_DBSYSTEMVALUES_INTERBASE="interbase",TMP_DBSYSTEMVALUES_MARIADB="mariadb",TMP_DBSYSTEMVALUES_NETEZZA="netezza",TMP_DBSYSTEMVALUES_PERVASIVE="pervasive",TMP_DBSYSTEMVALUES_POINTBASE="pointbase",TMP_DBSYSTEMVALUES_SQLITE="sqlite",TMP_DBSYSTEMVALUES_SYBASE="sybase",TMP_DBSYSTEMVALUES_TERADATA="teradata",TMP_DBSYSTEMVALUES_VERTICA="vertica",TMP_DBSYSTEMVALUES_H2="h2",TMP_DBSYSTEMVALUES_COLDFUSION="coldfusion",TMP_DBSYSTEMVALUES_CASSANDRA="cassandra",TMP_DBSYSTEMVALUES_HBASE="hbase",TMP_DBSYSTEMVALUES_MONGODB="mongodb",TMP_DBSYSTEMVALUES_REDIS="redis",TMP_DBSYSTEMVALUES_COUCHBASE="couchbase",TMP_DBSYSTEMVALUES_COUCHDB="couchdb",TMP_DBSYSTEMVALUES_COSMOSDB="cosmosdb",TMP_DBSYSTEMVALUES_DYNAMODB="dynamodb",TMP_DBSYSTEMVALUES_NEO4J="neo4j",TMP_DBSYSTEMVALUES_GEODE="geode",TMP_DBSYSTEMVALUES_ELASTICSEARCH="elasticsearch",TMP_DBSYSTEMVALUES_MEMCACHED="memcached",TMP_DBSYSTEMVALUES_COCKROACHDB="cockroachdb";exports.DBSYSTEMVALUES_OTHER_SQL=TMP_DBSYSTEMVALUES_OTHER_SQL;exports.DBSYSTEMVALUES_MSSQL=TMP_DBSYSTEMVALUES_MSSQL;exports.DBSYSTEMVALUES_MYSQL=TMP_DBSYSTEMVALUES_MYSQL;exports.DBSYSTEMVALUES_ORACLE=TMP_DBSYSTEMVALUES_ORACLE;exports.DBSYSTEMVALUES_DB2=TMP_DBSYSTEMVALUES_DB2;exports.DBSYSTEMVALUES_POSTGRESQL=TMP_DBSYSTEMVALUES_POSTGRESQL;exports.DBSYSTEMVALUES_REDSHIFT=TMP_DBSYSTEMVALUES_REDSHIFT;exports.DBSYSTEMVALUES_HIVE=TMP_DBSYSTEMVALUES_HIVE;exports.DBSYSTEMVALUES_CLOUDSCAPE=TMP_DBSYSTEMVALUES_CLOUDSCAPE;exports.DBSYSTEMVALUES_HSQLDB=TMP_DBSYSTEMVALUES_HSQLDB;exports.DBSYSTEMVALUES_PROGRESS=TMP_DBSYSTEMVALUES_PROGRESS;exports.DBSYSTEMVALUES_MAXDB=TMP_DBSYSTEMVALUES_MAXDB;exports.DBSYSTEMVALUES_HANADB=TMP_DBSYSTEMVALUES_HANADB;exports.DBSYSTEMVALUES_INGRES=TMP_DBSYSTEMVALUES_INGRES;exports.DBSYSTEMVALUES_FIRSTSQL=TMP_DBSYSTEMVALUES_FIRSTSQL;exports.DBSYSTEMVALUES_EDB=TMP_DBSYSTEMVALUES_EDB;exports.DBSYSTEMVALUES_CACHE=TMP_DBSYSTEMVALUES_CACHE;exports.DBSYSTEMVALUES_ADABAS=TMP_DBSYSTEMVALUES_ADABAS;exports.DBSYSTEMVALUES_FIREBIRD=TMP_DBSYSTEMVALUES_FIREBIRD;exports.DBSYSTEMVALUES_DERBY=TMP_DBSYSTEMVALUES_DERBY;exports.DBSYSTEMVALUES_FILEMAKER=TMP_DBSYSTEMVALUES_FILEMAKER;exports.DBSYSTEMVALUES_INFORMIX=TMP_DBSYSTEMVALUES_INFORMIX;exports.DBSYSTEMVALUES_INSTANTDB=TMP_DBSYSTEMVALUES_INSTANTDB;exports.DBSYSTEMVALUES_INTERBASE=TMP_DBSYSTEMVALUES_INTERBASE;exports.DBSYSTEMVALUES_MARIADB=TMP_DBSYSTEMVALUES_MARIADB;exports.DBSYSTEMVALUES_NETEZZA=TMP_DBSYSTEMVALUES_NETEZZA;exports.DBSYSTEMVALUES_PERVASIVE=TMP_DBSYSTEMVALUES_PERVASIVE;exports.DBSYSTEMVALUES_POINTBASE=TMP_DBSYSTEMVALUES_POINTBASE;exports.DBSYSTEMVALUES_SQLITE=TMP_DBSYSTEMVALUES_SQLITE;exports.DBSYSTEMVALUES_SYBASE=TMP_DBSYSTEMVALUES_SYBASE;exports.DBSYSTEMVALUES_TERADATA=TMP_DBSYSTEMVALUES_TERADATA;exports.DBSYSTEMVALUES_VERTICA=TMP_DBSYSTEMVALUES_VERTICA;exports.DBSYSTEMVALUES_H2=TMP_DBSYSTEMVALUES_H2;exports.DBSYSTEMVALUES_COLDFUSION=TMP_DBSYSTEMVALUES_COLDFUSION;exports.DBSYSTEMVALUES_CASSANDRA=TMP_DBSYSTEMVALUES_CASSANDRA;exports.DBSYSTEMVALUES_HBASE=TMP_DBSYSTEMVALUES_HBASE;exports.DBSYSTEMVALUES_MONGODB=TMP_DBSYSTEMVALUES_MONGODB;exports.DBSYSTEMVALUES_REDIS=TMP_DBSYSTEMVALUES_REDIS;exports.DBSYSTEMVALUES_COUCHBASE=TMP_DBSYSTEMVALUES_COUCHBASE;exports.DBSYSTEMVALUES_COUCHDB=TMP_DBSYSTEMVALUES_COUCHDB;exports.DBSYSTEMVALUES_COSMOSDB=TMP_DBSYSTEMVALUES_COSMOSDB;exports.DBSYSTEMVALUES_DYNAMODB=TMP_DBSYSTEMVALUES_DYNAMODB;exports.DBSYSTEMVALUES_NEO4J=TMP_DBSYSTEMVALUES_NEO4J;exports.DBSYSTEMVALUES_GEODE=TMP_DBSYSTEMVALUES_GEODE;exports.DBSYSTEMVALUES_ELASTICSEARCH=TMP_DBSYSTEMVALUES_ELASTICSEARCH;exports.DBSYSTEMVALUES_MEMCACHED=TMP_DBSYSTEMVALUES_MEMCACHED;exports.DBSYSTEMVALUES_COCKROACHDB=TMP_DBSYSTEMVALUES_COCKROACHDB;exports.DbSystemValues=(0,utils_1.createConstMap)([TMP_DBSYSTEMVALUES_OTHER_SQL,TMP_DBSYSTEMVALUES_MSSQL,TMP_DBSYSTEMVALUES_MYSQL,TMP_DBSYSTEMVALUES_ORACLE,TMP_DBSYSTEMVALUES_DB2,TMP_DBSYSTEMVALUES_POSTGRESQL,TMP_DBSYSTEMVALUES_REDSHIFT,TMP_DBSYSTEMVALUES_HIVE,TMP_DBSYSTEMVALUES_CLOUDSCAPE,TMP_DBSYSTEMVALUES_HSQLDB,TMP_DBSYSTEMVALUES_PROGRESS,TMP_DBSYSTEMVALUES_MAXDB,TMP_DBSYSTEMVALUES_HANADB,TMP_DBSYSTEMVALUES_INGRES,TMP_DBSYSTEMVALUES_FIRSTSQL,TMP_DBSYSTEMVALUES_EDB,TMP_DBSYSTEMVALUES_CACHE,TMP_DBSYSTEMVALUES_ADABAS,TMP_DBSYSTEMVALUES_FIREBIRD,TMP_DBSYSTEMVALUES_DERBY,TMP_DBSYSTEMVALUES_FILEMAKER,TMP_DBSYSTEMVALUES_INFORMIX,TMP_DBSYSTEMVALUES_INSTANTDB,TMP_DBSYSTEMVALUES_INTERBASE,TMP_DBSYSTEMVALUES_MARIADB,TMP_DBSYSTEMVALUES_NETEZZA,TMP_DBSYSTEMVALUES_PERVASIVE,TMP_DBSYSTEMVALUES_POINTBASE,TMP_DBSYSTEMVALUES_SQLITE,TMP_DBSYSTEMVALUES_SYBASE,TMP_DBSYSTEMVALUES_TERADATA,TMP_DBSYSTEMVALUES_VERTICA,TMP_DBSYSTEMVALUES_H2,TMP_DBSYSTEMVALUES_COLDFUSION,TMP_DBSYSTEMVALUES_CASSANDRA,TMP_DBSYSTEMVALUES_HBASE,TMP_DBSYSTEMVALUES_MONGODB,TMP_DBSYSTEMVALUES_REDIS,TMP_DBSYSTEMVALUES_COUCHBASE,TMP_DBSYSTEMVALUES_COUCHDB,TMP_DBSYSTEMVALUES_COSMOSDB,TMP_DBSYSTEMVALUES_DYNAMODB,TMP_DBSYSTEMVALUES_NEO4J,TMP_DBSYSTEMVALUES_GEODE,TMP_DBSYSTEMVALUES_ELASTICSEARCH,TMP_DBSYSTEMVALUES_MEMCACHED,TMP_DBSYSTEMVALUES_COCKROACHDB]);var TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL="all",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM="each_quorum",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM="quorum",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM="local_quorum",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE="one",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO="two",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE="three",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE="local_one",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY="any",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL="serial",TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL="local_serial";exports.DBCASSANDRACONSISTENCYLEVELVALUES_ALL=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL;exports.DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM;exports.DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM;exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM;exports.DBCASSANDRACONSISTENCYLEVELVALUES_ONE=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE;exports.DBCASSANDRACONSISTENCYLEVELVALUES_TWO=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO;exports.DBCASSANDRACONSISTENCYLEVELVALUES_THREE=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE;exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE;exports.DBCASSANDRACONSISTENCYLEVELVALUES_ANY=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY;exports.DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL;exports.DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL=TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL;exports.DbCassandraConsistencyLevelValues=(0,utils_1.createConstMap)([TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ALL,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_EACH_QUORUM,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_QUORUM,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_QUORUM,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ONE,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_TWO,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_THREE,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_ONE,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_ANY,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_SERIAL,TMP_DBCASSANDRACONSISTENCYLEVELVALUES_LOCAL_SERIAL]);var TMP_FAASTRIGGERVALUES_DATASOURCE="datasource",TMP_FAASTRIGGERVALUES_HTTP="http",TMP_FAASTRIGGERVALUES_PUBSUB="pubsub",TMP_FAASTRIGGERVALUES_TIMER="timer",TMP_FAASTRIGGERVALUES_OTHER="other";exports.FAASTRIGGERVALUES_DATASOURCE=TMP_FAASTRIGGERVALUES_DATASOURCE;exports.FAASTRIGGERVALUES_HTTP=TMP_FAASTRIGGERVALUES_HTTP;exports.FAASTRIGGERVALUES_PUBSUB=TMP_FAASTRIGGERVALUES_PUBSUB;exports.FAASTRIGGERVALUES_TIMER=TMP_FAASTRIGGERVALUES_TIMER;exports.FAASTRIGGERVALUES_OTHER=TMP_FAASTRIGGERVALUES_OTHER;exports.FaasTriggerValues=(0,utils_1.createConstMap)([TMP_FAASTRIGGERVALUES_DATASOURCE,TMP_FAASTRIGGERVALUES_HTTP,TMP_FAASTRIGGERVALUES_PUBSUB,TMP_FAASTRIGGERVALUES_TIMER,TMP_FAASTRIGGERVALUES_OTHER]);var TMP_FAASDOCUMENTOPERATIONVALUES_INSERT="insert",TMP_FAASDOCUMENTOPERATIONVALUES_EDIT="edit",TMP_FAASDOCUMENTOPERATIONVALUES_DELETE="delete";exports.FAASDOCUMENTOPERATIONVALUES_INSERT=TMP_FAASDOCUMENTOPERATIONVALUES_INSERT;exports.FAASDOCUMENTOPERATIONVALUES_EDIT=TMP_FAASDOCUMENTOPERATIONVALUES_EDIT;exports.FAASDOCUMENTOPERATIONVALUES_DELETE=TMP_FAASDOCUMENTOPERATIONVALUES_DELETE;exports.FaasDocumentOperationValues=(0,utils_1.createConstMap)([TMP_FAASDOCUMENTOPERATIONVALUES_INSERT,TMP_FAASDOCUMENTOPERATIONVALUES_EDIT,TMP_FAASDOCUMENTOPERATIONVALUES_DELETE]);var TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD="alibaba_cloud",TMP_FAASINVOKEDPROVIDERVALUES_AWS="aws",TMP_FAASINVOKEDPROVIDERVALUES_AZURE="azure",TMP_FAASINVOKEDPROVIDERVALUES_GCP="gcp";exports.FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD=TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD;exports.FAASINVOKEDPROVIDERVALUES_AWS=TMP_FAASINVOKEDPROVIDERVALUES_AWS;exports.FAASINVOKEDPROVIDERVALUES_AZURE=TMP_FAASINVOKEDPROVIDERVALUES_AZURE;exports.FAASINVOKEDPROVIDERVALUES_GCP=TMP_FAASINVOKEDPROVIDERVALUES_GCP;exports.FaasInvokedProviderValues=(0,utils_1.createConstMap)([TMP_FAASINVOKEDPROVIDERVALUES_ALIBABA_CLOUD,TMP_FAASINVOKEDPROVIDERVALUES_AWS,TMP_FAASINVOKEDPROVIDERVALUES_AZURE,TMP_FAASINVOKEDPROVIDERVALUES_GCP]);var TMP_NETTRANSPORTVALUES_IP_TCP="ip_tcp",TMP_NETTRANSPORTVALUES_IP_UDP="ip_udp",TMP_NETTRANSPORTVALUES_IP="ip",TMP_NETTRANSPORTVALUES_UNIX="unix",TMP_NETTRANSPORTVALUES_PIPE="pipe",TMP_NETTRANSPORTVALUES_INPROC="inproc",TMP_NETTRANSPORTVALUES_OTHER="other";exports.NETTRANSPORTVALUES_IP_TCP=TMP_NETTRANSPORTVALUES_IP_TCP;exports.NETTRANSPORTVALUES_IP_UDP=TMP_NETTRANSPORTVALUES_IP_UDP;exports.NETTRANSPORTVALUES_IP=TMP_NETTRANSPORTVALUES_IP;exports.NETTRANSPORTVALUES_UNIX=TMP_NETTRANSPORTVALUES_UNIX;exports.NETTRANSPORTVALUES_PIPE=TMP_NETTRANSPORTVALUES_PIPE;exports.NETTRANSPORTVALUES_INPROC=TMP_NETTRANSPORTVALUES_INPROC;exports.NETTRANSPORTVALUES_OTHER=TMP_NETTRANSPORTVALUES_OTHER;exports.NetTransportValues=(0,utils_1.createConstMap)([TMP_NETTRANSPORTVALUES_IP_TCP,TMP_NETTRANSPORTVALUES_IP_UDP,TMP_NETTRANSPORTVALUES_IP,TMP_NETTRANSPORTVALUES_UNIX,TMP_NETTRANSPORTVALUES_PIPE,TMP_NETTRANSPORTVALUES_INPROC,TMP_NETTRANSPORTVALUES_OTHER]);var TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI="wifi",TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED="wired",TMP_NETHOSTCONNECTIONTYPEVALUES_CELL="cell",TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE="unavailable",TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN="unknown";exports.NETHOSTCONNECTIONTYPEVALUES_WIFI=TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI;exports.NETHOSTCONNECTIONTYPEVALUES_WIRED=TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED;exports.NETHOSTCONNECTIONTYPEVALUES_CELL=TMP_NETHOSTCONNECTIONTYPEVALUES_CELL;exports.NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE=TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE;exports.NETHOSTCONNECTIONTYPEVALUES_UNKNOWN=TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN;exports.NetHostConnectionTypeValues=(0,utils_1.createConstMap)([TMP_NETHOSTCONNECTIONTYPEVALUES_WIFI,TMP_NETHOSTCONNECTIONTYPEVALUES_WIRED,TMP_NETHOSTCONNECTIONTYPEVALUES_CELL,TMP_NETHOSTCONNECTIONTYPEVALUES_UNAVAILABLE,TMP_NETHOSTCONNECTIONTYPEVALUES_UNKNOWN]);var TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS="gprs",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE="edge",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS="umts",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA="cdma",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0="evdo_0",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A="evdo_a",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT="cdma2000_1xrtt",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA="hsdpa",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA="hsupa",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA="hspa",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN="iden",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B="evdo_b",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE="lte",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD="ehrpd",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP="hspap",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM="gsm",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA="td_scdma",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN="iwlan",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR="nr",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA="nrnsa",TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA="lte_ca";exports.NETHOSTCONNECTIONSUBTYPEVALUES_GPRS=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS;exports.NETHOSTCONNECTIONSUBTYPEVALUES_EDGE=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE;exports.NETHOSTCONNECTIONSUBTYPEVALUES_UMTS=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS;exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA;exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0;exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A;exports.NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT;exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA;exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA;exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPA=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA;exports.NETHOSTCONNECTIONSUBTYPEVALUES_IDEN=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN;exports.NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B;exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE;exports.NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD;exports.NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP;exports.NETHOSTCONNECTIONSUBTYPEVALUES_GSM=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM;exports.NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA;exports.NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN;exports.NETHOSTCONNECTIONSUBTYPEVALUES_NR=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR;exports.NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA;exports.NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA=TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA;exports.NetHostConnectionSubtypeValues=(0,utils_1.createConstMap)([TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GPRS,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EDGE,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_UMTS,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_0,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_A,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_CDMA2000_1XRTT,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSDPA,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSUPA,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPA,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IDEN,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EVDO_B,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_EHRPD,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_HSPAP,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_GSM,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_TD_SCDMA,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_IWLAN,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NR,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_NRNSA,TMP_NETHOSTCONNECTIONSUBTYPEVALUES_LTE_CA]);var TMP_HTTPFLAVORVALUES_HTTP_1_0="1.0",TMP_HTTPFLAVORVALUES_HTTP_1_1="1.1",TMP_HTTPFLAVORVALUES_HTTP_2_0="2.0",TMP_HTTPFLAVORVALUES_SPDY="SPDY",TMP_HTTPFLAVORVALUES_QUIC="QUIC";exports.HTTPFLAVORVALUES_HTTP_1_0=TMP_HTTPFLAVORVALUES_HTTP_1_0;exports.HTTPFLAVORVALUES_HTTP_1_1=TMP_HTTPFLAVORVALUES_HTTP_1_1;exports.HTTPFLAVORVALUES_HTTP_2_0=TMP_HTTPFLAVORVALUES_HTTP_2_0;exports.HTTPFLAVORVALUES_SPDY=TMP_HTTPFLAVORVALUES_SPDY;exports.HTTPFLAVORVALUES_QUIC=TMP_HTTPFLAVORVALUES_QUIC;exports.HttpFlavorValues={HTTP_1_0:TMP_HTTPFLAVORVALUES_HTTP_1_0,HTTP_1_1:TMP_HTTPFLAVORVALUES_HTTP_1_1,HTTP_2_0:TMP_HTTPFLAVORVALUES_HTTP_2_0,SPDY:TMP_HTTPFLAVORVALUES_SPDY,QUIC:TMP_HTTPFLAVORVALUES_QUIC};var TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE="queue",TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC="topic";exports.MESSAGINGDESTINATIONKINDVALUES_QUEUE=TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE;exports.MESSAGINGDESTINATIONKINDVALUES_TOPIC=TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC;exports.MessagingDestinationKindValues=(0,utils_1.createConstMap)([TMP_MESSAGINGDESTINATIONKINDVALUES_QUEUE,TMP_MESSAGINGDESTINATIONKINDVALUES_TOPIC]);var TMP_MESSAGINGOPERATIONVALUES_RECEIVE="receive",TMP_MESSAGINGOPERATIONVALUES_PROCESS="process";exports.MESSAGINGOPERATIONVALUES_RECEIVE=TMP_MESSAGINGOPERATIONVALUES_RECEIVE;exports.MESSAGINGOPERATIONVALUES_PROCESS=TMP_MESSAGINGOPERATIONVALUES_PROCESS;exports.MessagingOperationValues=(0,utils_1.createConstMap)([TMP_MESSAGINGOPERATIONVALUES_RECEIVE,TMP_MESSAGINGOPERATIONVALUES_PROCESS]);var TMP_RPCGRPCSTATUSCODEVALUES_OK=0,TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED=1,TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN=2,TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT=3,TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED=4,TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND=5,TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS=6,TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED=7,TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED=8,TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION=9,TMP_RPCGRPCSTATUSCODEVALUES_ABORTED=10,TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE=11,TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED=12,TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL=13,TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE=14,TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS=15,TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED=16;exports.RPCGRPCSTATUSCODEVALUES_OK=TMP_RPCGRPCSTATUSCODEVALUES_OK;exports.RPCGRPCSTATUSCODEVALUES_CANCELLED=TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED;exports.RPCGRPCSTATUSCODEVALUES_UNKNOWN=TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN;exports.RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT=TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT;exports.RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED=TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED;exports.RPCGRPCSTATUSCODEVALUES_NOT_FOUND=TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND;exports.RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS=TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS;exports.RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED=TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED;exports.RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED=TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED;exports.RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION=TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION;exports.RPCGRPCSTATUSCODEVALUES_ABORTED=TMP_RPCGRPCSTATUSCODEVALUES_ABORTED;exports.RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE=TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE;exports.RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED=TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED;exports.RPCGRPCSTATUSCODEVALUES_INTERNAL=TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL;exports.RPCGRPCSTATUSCODEVALUES_UNAVAILABLE=TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE;exports.RPCGRPCSTATUSCODEVALUES_DATA_LOSS=TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS;exports.RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED=TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED;exports.RpcGrpcStatusCodeValues={OK:TMP_RPCGRPCSTATUSCODEVALUES_OK,CANCELLED:TMP_RPCGRPCSTATUSCODEVALUES_CANCELLED,UNKNOWN:TMP_RPCGRPCSTATUSCODEVALUES_UNKNOWN,INVALID_ARGUMENT:TMP_RPCGRPCSTATUSCODEVALUES_INVALID_ARGUMENT,DEADLINE_EXCEEDED:TMP_RPCGRPCSTATUSCODEVALUES_DEADLINE_EXCEEDED,NOT_FOUND:TMP_RPCGRPCSTATUSCODEVALUES_NOT_FOUND,ALREADY_EXISTS:TMP_RPCGRPCSTATUSCODEVALUES_ALREADY_EXISTS,PERMISSION_DENIED:TMP_RPCGRPCSTATUSCODEVALUES_PERMISSION_DENIED,RESOURCE_EXHAUSTED:TMP_RPCGRPCSTATUSCODEVALUES_RESOURCE_EXHAUSTED,FAILED_PRECONDITION:TMP_RPCGRPCSTATUSCODEVALUES_FAILED_PRECONDITION,ABORTED:TMP_RPCGRPCSTATUSCODEVALUES_ABORTED,OUT_OF_RANGE:TMP_RPCGRPCSTATUSCODEVALUES_OUT_OF_RANGE,UNIMPLEMENTED:TMP_RPCGRPCSTATUSCODEVALUES_UNIMPLEMENTED,INTERNAL:TMP_RPCGRPCSTATUSCODEVALUES_INTERNAL,UNAVAILABLE:TMP_RPCGRPCSTATUSCODEVALUES_UNAVAILABLE,DATA_LOSS:TMP_RPCGRPCSTATUSCODEVALUES_DATA_LOSS,UNAUTHENTICATED:TMP_RPCGRPCSTATUSCODEVALUES_UNAUTHENTICATED};var TMP_MESSAGETYPEVALUES_SENT="SENT",TMP_MESSAGETYPEVALUES_RECEIVED="RECEIVED";exports.MESSAGETYPEVALUES_SENT=TMP_MESSAGETYPEVALUES_SENT;exports.MESSAGETYPEVALUES_RECEIVED=TMP_MESSAGETYPEVALUES_RECEIVED;exports.MessageTypeValues=(0,utils_1.createConstMap)([TMP_MESSAGETYPEVALUES_SENT,TMP_MESSAGETYPEVALUES_RECEIVED])});var require_trace2=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o3,m,k,k2){if(k2===void 0)k2=k;var desc2=Object.getOwnPropertyDescriptor(m,k);if(!desc2||("get"in desc2?!m.__esModule:desc2.writable||desc2.configurable))desc2={enumerable:!0,get:function(){return m[k]}};Object.defineProperty(o3,k2,desc2)}:function(o3,m,k,k2){if(k2===void 0)k2=k;o3[k2]=m[k]}),__exportStar=exports&&exports.__exportStar||function(m,exports2){for(var p in m)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p))__createBinding(exports2,m,p)};Object.defineProperty(exports,"__esModule",{value:!0});__exportStar(require_SemanticAttributes(),exports)});var require_SemanticResourceAttributes=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.SEMRESATTRS_K8S_STATEFULSET_NAME=exports.SEMRESATTRS_K8S_STATEFULSET_UID=exports.SEMRESATTRS_K8S_DEPLOYMENT_NAME=exports.SEMRESATTRS_K8S_DEPLOYMENT_UID=exports.SEMRESATTRS_K8S_REPLICASET_NAME=exports.SEMRESATTRS_K8S_REPLICASET_UID=exports.SEMRESATTRS_K8S_CONTAINER_NAME=exports.SEMRESATTRS_K8S_POD_NAME=exports.SEMRESATTRS_K8S_POD_UID=exports.SEMRESATTRS_K8S_NAMESPACE_NAME=exports.SEMRESATTRS_K8S_NODE_UID=exports.SEMRESATTRS_K8S_NODE_NAME=exports.SEMRESATTRS_K8S_CLUSTER_NAME=exports.SEMRESATTRS_HOST_IMAGE_VERSION=exports.SEMRESATTRS_HOST_IMAGE_ID=exports.SEMRESATTRS_HOST_IMAGE_NAME=exports.SEMRESATTRS_HOST_ARCH=exports.SEMRESATTRS_HOST_TYPE=exports.SEMRESATTRS_HOST_NAME=exports.SEMRESATTRS_HOST_ID=exports.SEMRESATTRS_FAAS_MAX_MEMORY=exports.SEMRESATTRS_FAAS_INSTANCE=exports.SEMRESATTRS_FAAS_VERSION=exports.SEMRESATTRS_FAAS_ID=exports.SEMRESATTRS_FAAS_NAME=exports.SEMRESATTRS_DEVICE_MODEL_NAME=exports.SEMRESATTRS_DEVICE_MODEL_IDENTIFIER=exports.SEMRESATTRS_DEVICE_ID=exports.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT=exports.SEMRESATTRS_CONTAINER_IMAGE_TAG=exports.SEMRESATTRS_CONTAINER_IMAGE_NAME=exports.SEMRESATTRS_CONTAINER_RUNTIME=exports.SEMRESATTRS_CONTAINER_ID=exports.SEMRESATTRS_CONTAINER_NAME=exports.SEMRESATTRS_AWS_LOG_STREAM_ARNS=exports.SEMRESATTRS_AWS_LOG_STREAM_NAMES=exports.SEMRESATTRS_AWS_LOG_GROUP_ARNS=exports.SEMRESATTRS_AWS_LOG_GROUP_NAMES=exports.SEMRESATTRS_AWS_EKS_CLUSTER_ARN=exports.SEMRESATTRS_AWS_ECS_TASK_REVISION=exports.SEMRESATTRS_AWS_ECS_TASK_FAMILY=exports.SEMRESATTRS_AWS_ECS_TASK_ARN=exports.SEMRESATTRS_AWS_ECS_LAUNCHTYPE=exports.SEMRESATTRS_AWS_ECS_CLUSTER_ARN=exports.SEMRESATTRS_AWS_ECS_CONTAINER_ARN=exports.SEMRESATTRS_CLOUD_PLATFORM=exports.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE=exports.SEMRESATTRS_CLOUD_REGION=exports.SEMRESATTRS_CLOUD_ACCOUNT_ID=exports.SEMRESATTRS_CLOUD_PROVIDER=void 0;exports.CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE=exports.CLOUDPLATFORMVALUES_AZURE_APP_SERVICE=exports.CLOUDPLATFORMVALUES_AZURE_FUNCTIONS=exports.CLOUDPLATFORMVALUES_AZURE_AKS=exports.CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES=exports.CLOUDPLATFORMVALUES_AZURE_VM=exports.CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK=exports.CLOUDPLATFORMVALUES_AWS_LAMBDA=exports.CLOUDPLATFORMVALUES_AWS_EKS=exports.CLOUDPLATFORMVALUES_AWS_ECS=exports.CLOUDPLATFORMVALUES_AWS_EC2=exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC=exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS=exports.CloudProviderValues=exports.CLOUDPROVIDERVALUES_GCP=exports.CLOUDPROVIDERVALUES_AZURE=exports.CLOUDPROVIDERVALUES_AWS=exports.CLOUDPROVIDERVALUES_ALIBABA_CLOUD=exports.SemanticResourceAttributes=exports.SEMRESATTRS_WEBENGINE_DESCRIPTION=exports.SEMRESATTRS_WEBENGINE_VERSION=exports.SEMRESATTRS_WEBENGINE_NAME=exports.SEMRESATTRS_TELEMETRY_AUTO_VERSION=exports.SEMRESATTRS_TELEMETRY_SDK_VERSION=exports.SEMRESATTRS_TELEMETRY_SDK_LANGUAGE=exports.SEMRESATTRS_TELEMETRY_SDK_NAME=exports.SEMRESATTRS_SERVICE_VERSION=exports.SEMRESATTRS_SERVICE_INSTANCE_ID=exports.SEMRESATTRS_SERVICE_NAMESPACE=exports.SEMRESATTRS_SERVICE_NAME=exports.SEMRESATTRS_PROCESS_RUNTIME_DESCRIPTION=exports.SEMRESATTRS_PROCESS_RUNTIME_VERSION=exports.SEMRESATTRS_PROCESS_RUNTIME_NAME=exports.SEMRESATTRS_PROCESS_OWNER=exports.SEMRESATTRS_PROCESS_COMMAND_ARGS=exports.SEMRESATTRS_PROCESS_COMMAND_LINE=exports.SEMRESATTRS_PROCESS_COMMAND=exports.SEMRESATTRS_PROCESS_EXECUTABLE_PATH=exports.SEMRESATTRS_PROCESS_EXECUTABLE_NAME=exports.SEMRESATTRS_PROCESS_PID=exports.SEMRESATTRS_OS_VERSION=exports.SEMRESATTRS_OS_NAME=exports.SEMRESATTRS_OS_DESCRIPTION=exports.SEMRESATTRS_OS_TYPE=exports.SEMRESATTRS_K8S_CRONJOB_NAME=exports.SEMRESATTRS_K8S_CRONJOB_UID=exports.SEMRESATTRS_K8S_JOB_NAME=exports.SEMRESATTRS_K8S_JOB_UID=exports.SEMRESATTRS_K8S_DAEMONSET_NAME=exports.SEMRESATTRS_K8S_DAEMONSET_UID=void 0;exports.TelemetrySdkLanguageValues=exports.TELEMETRYSDKLANGUAGEVALUES_WEBJS=exports.TELEMETRYSDKLANGUAGEVALUES_RUBY=exports.TELEMETRYSDKLANGUAGEVALUES_PYTHON=exports.TELEMETRYSDKLANGUAGEVALUES_PHP=exports.TELEMETRYSDKLANGUAGEVALUES_NODEJS=exports.TELEMETRYSDKLANGUAGEVALUES_JAVA=exports.TELEMETRYSDKLANGUAGEVALUES_GO=exports.TELEMETRYSDKLANGUAGEVALUES_ERLANG=exports.TELEMETRYSDKLANGUAGEVALUES_DOTNET=exports.TELEMETRYSDKLANGUAGEVALUES_CPP=exports.OsTypeValues=exports.OSTYPEVALUES_Z_OS=exports.OSTYPEVALUES_SOLARIS=exports.OSTYPEVALUES_AIX=exports.OSTYPEVALUES_HPUX=exports.OSTYPEVALUES_DRAGONFLYBSD=exports.OSTYPEVALUES_OPENBSD=exports.OSTYPEVALUES_NETBSD=exports.OSTYPEVALUES_FREEBSD=exports.OSTYPEVALUES_DARWIN=exports.OSTYPEVALUES_LINUX=exports.OSTYPEVALUES_WINDOWS=exports.HostArchValues=exports.HOSTARCHVALUES_X86=exports.HOSTARCHVALUES_PPC64=exports.HOSTARCHVALUES_PPC32=exports.HOSTARCHVALUES_IA64=exports.HOSTARCHVALUES_ARM64=exports.HOSTARCHVALUES_ARM32=exports.HOSTARCHVALUES_AMD64=exports.AwsEcsLaunchtypeValues=exports.AWSECSLAUNCHTYPEVALUES_FARGATE=exports.AWSECSLAUNCHTYPEVALUES_EC2=exports.CloudPlatformValues=exports.CLOUDPLATFORMVALUES_GCP_APP_ENGINE=exports.CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS=exports.CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE=exports.CLOUDPLATFORMVALUES_GCP_CLOUD_RUN=void 0;var utils_1=require_utils3(),TMP_CLOUD_PROVIDER="cloud.provider",TMP_CLOUD_ACCOUNT_ID="cloud.account.id",TMP_CLOUD_REGION="cloud.region",TMP_CLOUD_AVAILABILITY_ZONE="cloud.availability_zone",TMP_CLOUD_PLATFORM="cloud.platform",TMP_AWS_ECS_CONTAINER_ARN="aws.ecs.container.arn",TMP_AWS_ECS_CLUSTER_ARN="aws.ecs.cluster.arn",TMP_AWS_ECS_LAUNCHTYPE="aws.ecs.launchtype",TMP_AWS_ECS_TASK_ARN="aws.ecs.task.arn",TMP_AWS_ECS_TASK_FAMILY="aws.ecs.task.family",TMP_AWS_ECS_TASK_REVISION="aws.ecs.task.revision",TMP_AWS_EKS_CLUSTER_ARN="aws.eks.cluster.arn",TMP_AWS_LOG_GROUP_NAMES="aws.log.group.names",TMP_AWS_LOG_GROUP_ARNS="aws.log.group.arns",TMP_AWS_LOG_STREAM_NAMES="aws.log.stream.names",TMP_AWS_LOG_STREAM_ARNS="aws.log.stream.arns",TMP_CONTAINER_NAME="container.name",TMP_CONTAINER_ID="container.id",TMP_CONTAINER_RUNTIME="container.runtime",TMP_CONTAINER_IMAGE_NAME="container.image.name",TMP_CONTAINER_IMAGE_TAG="container.image.tag",TMP_DEPLOYMENT_ENVIRONMENT="deployment.environment",TMP_DEVICE_ID="device.id",TMP_DEVICE_MODEL_IDENTIFIER="device.model.identifier",TMP_DEVICE_MODEL_NAME="device.model.name",TMP_FAAS_NAME="faas.name",TMP_FAAS_ID="faas.id",TMP_FAAS_VERSION="faas.version",TMP_FAAS_INSTANCE="faas.instance",TMP_FAAS_MAX_MEMORY="faas.max_memory",TMP_HOST_ID="host.id",TMP_HOST_NAME="host.name",TMP_HOST_TYPE="host.type",TMP_HOST_ARCH="host.arch",TMP_HOST_IMAGE_NAME="host.image.name",TMP_HOST_IMAGE_ID="host.image.id",TMP_HOST_IMAGE_VERSION="host.image.version",TMP_K8S_CLUSTER_NAME="k8s.cluster.name",TMP_K8S_NODE_NAME="k8s.node.name",TMP_K8S_NODE_UID="k8s.node.uid",TMP_K8S_NAMESPACE_NAME="k8s.namespace.name",TMP_K8S_POD_UID="k8s.pod.uid",TMP_K8S_POD_NAME="k8s.pod.name",TMP_K8S_CONTAINER_NAME="k8s.container.name",TMP_K8S_REPLICASET_UID="k8s.replicaset.uid",TMP_K8S_REPLICASET_NAME="k8s.replicaset.name",TMP_K8S_DEPLOYMENT_UID="k8s.deployment.uid",TMP_K8S_DEPLOYMENT_NAME="k8s.deployment.name",TMP_K8S_STATEFULSET_UID="k8s.statefulset.uid",TMP_K8S_STATEFULSET_NAME="k8s.statefulset.name",TMP_K8S_DAEMONSET_UID="k8s.daemonset.uid",TMP_K8S_DAEMONSET_NAME="k8s.daemonset.name",TMP_K8S_JOB_UID="k8s.job.uid",TMP_K8S_JOB_NAME="k8s.job.name",TMP_K8S_CRONJOB_UID="k8s.cronjob.uid",TMP_K8S_CRONJOB_NAME="k8s.cronjob.name",TMP_OS_TYPE="os.type",TMP_OS_DESCRIPTION="os.description",TMP_OS_NAME="os.name",TMP_OS_VERSION="os.version",TMP_PROCESS_PID="process.pid",TMP_PROCESS_EXECUTABLE_NAME="process.executable.name",TMP_PROCESS_EXECUTABLE_PATH="process.executable.path",TMP_PROCESS_COMMAND="process.command",TMP_PROCESS_COMMAND_LINE="process.command_line",TMP_PROCESS_COMMAND_ARGS="process.command_args",TMP_PROCESS_OWNER="process.owner",TMP_PROCESS_RUNTIME_NAME="process.runtime.name",TMP_PROCESS_RUNTIME_VERSION="process.runtime.version",TMP_PROCESS_RUNTIME_DESCRIPTION="process.runtime.description",TMP_SERVICE_NAME="service.name",TMP_SERVICE_NAMESPACE="service.namespace",TMP_SERVICE_INSTANCE_ID="service.instance.id",TMP_SERVICE_VERSION="service.version",TMP_TELEMETRY_SDK_NAME="telemetry.sdk.name",TMP_TELEMETRY_SDK_LANGUAGE="telemetry.sdk.language",TMP_TELEMETRY_SDK_VERSION="telemetry.sdk.version",TMP_TELEMETRY_AUTO_VERSION="telemetry.auto.version",TMP_WEBENGINE_NAME="webengine.name",TMP_WEBENGINE_VERSION="webengine.version",TMP_WEBENGINE_DESCRIPTION="webengine.description";exports.SEMRESATTRS_CLOUD_PROVIDER=TMP_CLOUD_PROVIDER;exports.SEMRESATTRS_CLOUD_ACCOUNT_ID=TMP_CLOUD_ACCOUNT_ID;exports.SEMRESATTRS_CLOUD_REGION=TMP_CLOUD_REGION;exports.SEMRESATTRS_CLOUD_AVAILABILITY_ZONE=TMP_CLOUD_AVAILABILITY_ZONE;exports.SEMRESATTRS_CLOUD_PLATFORM=TMP_CLOUD_PLATFORM;exports.SEMRESATTRS_AWS_ECS_CONTAINER_ARN=TMP_AWS_ECS_CONTAINER_ARN;exports.SEMRESATTRS_AWS_ECS_CLUSTER_ARN=TMP_AWS_ECS_CLUSTER_ARN;exports.SEMRESATTRS_AWS_ECS_LAUNCHTYPE=TMP_AWS_ECS_LAUNCHTYPE;exports.SEMRESATTRS_AWS_ECS_TASK_ARN=TMP_AWS_ECS_TASK_ARN;exports.SEMRESATTRS_AWS_ECS_TASK_FAMILY=TMP_AWS_ECS_TASK_FAMILY;exports.SEMRESATTRS_AWS_ECS_TASK_REVISION=TMP_AWS_ECS_TASK_REVISION;exports.SEMRESATTRS_AWS_EKS_CLUSTER_ARN=TMP_AWS_EKS_CLUSTER_ARN;exports.SEMRESATTRS_AWS_LOG_GROUP_NAMES=TMP_AWS_LOG_GROUP_NAMES;exports.SEMRESATTRS_AWS_LOG_GROUP_ARNS=TMP_AWS_LOG_GROUP_ARNS;exports.SEMRESATTRS_AWS_LOG_STREAM_NAMES=TMP_AWS_LOG_STREAM_NAMES;exports.SEMRESATTRS_AWS_LOG_STREAM_ARNS=TMP_AWS_LOG_STREAM_ARNS;exports.SEMRESATTRS_CONTAINER_NAME=TMP_CONTAINER_NAME;exports.SEMRESATTRS_CONTAINER_ID=TMP_CONTAINER_ID;exports.SEMRESATTRS_CONTAINER_RUNTIME=TMP_CONTAINER_RUNTIME;exports.SEMRESATTRS_CONTAINER_IMAGE_NAME=TMP_CONTAINER_IMAGE_NAME;exports.SEMRESATTRS_CONTAINER_IMAGE_TAG=TMP_CONTAINER_IMAGE_TAG;exports.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT=TMP_DEPLOYMENT_ENVIRONMENT;exports.SEMRESATTRS_DEVICE_ID=TMP_DEVICE_ID;exports.SEMRESATTRS_DEVICE_MODEL_IDENTIFIER=TMP_DEVICE_MODEL_IDENTIFIER;exports.SEMRESATTRS_DEVICE_MODEL_NAME=TMP_DEVICE_MODEL_NAME;exports.SEMRESATTRS_FAAS_NAME=TMP_FAAS_NAME;exports.SEMRESATTRS_FAAS_ID=TMP_FAAS_ID;exports.SEMRESATTRS_FAAS_VERSION=TMP_FAAS_VERSION;exports.SEMRESATTRS_FAAS_INSTANCE=TMP_FAAS_INSTANCE;exports.SEMRESATTRS_FAAS_MAX_MEMORY=TMP_FAAS_MAX_MEMORY;exports.SEMRESATTRS_HOST_ID=TMP_HOST_ID;exports.SEMRESATTRS_HOST_NAME=TMP_HOST_NAME;exports.SEMRESATTRS_HOST_TYPE=TMP_HOST_TYPE;exports.SEMRESATTRS_HOST_ARCH=TMP_HOST_ARCH;exports.SEMRESATTRS_HOST_IMAGE_NAME=TMP_HOST_IMAGE_NAME;exports.SEMRESATTRS_HOST_IMAGE_ID=TMP_HOST_IMAGE_ID;exports.SEMRESATTRS_HOST_IMAGE_VERSION=TMP_HOST_IMAGE_VERSION;exports.SEMRESATTRS_K8S_CLUSTER_NAME=TMP_K8S_CLUSTER_NAME;exports.SEMRESATTRS_K8S_NODE_NAME=TMP_K8S_NODE_NAME;exports.SEMRESATTRS_K8S_NODE_UID=TMP_K8S_NODE_UID;exports.SEMRESATTRS_K8S_NAMESPACE_NAME=TMP_K8S_NAMESPACE_NAME;exports.SEMRESATTRS_K8S_POD_UID=TMP_K8S_POD_UID;exports.SEMRESATTRS_K8S_POD_NAME=TMP_K8S_POD_NAME;exports.SEMRESATTRS_K8S_CONTAINER_NAME=TMP_K8S_CONTAINER_NAME;exports.SEMRESATTRS_K8S_REPLICASET_UID=TMP_K8S_REPLICASET_UID;exports.SEMRESATTRS_K8S_REPLICASET_NAME=TMP_K8S_REPLICASET_NAME;exports.SEMRESATTRS_K8S_DEPLOYMENT_UID=TMP_K8S_DEPLOYMENT_UID;exports.SEMRESATTRS_K8S_DEPLOYMENT_NAME=TMP_K8S_DEPLOYMENT_NAME;exports.SEMRESATTRS_K8S_STATEFULSET_UID=TMP_K8S_STATEFULSET_UID;exports.SEMRESATTRS_K8S_STATEFULSET_NAME=TMP_K8S_STATEFULSET_NAME;exports.SEMRESATTRS_K8S_DAEMONSET_UID=TMP_K8S_DAEMONSET_UID;exports.SEMRESATTRS_K8S_DAEMONSET_NAME=TMP_K8S_DAEMONSET_NAME;exports.SEMRESATTRS_K8S_JOB_UID=TMP_K8S_JOB_UID;exports.SEMRESATTRS_K8S_JOB_NAME=TMP_K8S_JOB_NAME;exports.SEMRESATTRS_K8S_CRONJOB_UID=TMP_K8S_CRONJOB_UID;exports.SEMRESATTRS_K8S_CRONJOB_NAME=TMP_K8S_CRONJOB_NAME;exports.SEMRESATTRS_OS_TYPE=TMP_OS_TYPE;exports.SEMRESATTRS_OS_DESCRIPTION=TMP_OS_DESCRIPTION;exports.SEMRESATTRS_OS_NAME=TMP_OS_NAME;exports.SEMRESATTRS_OS_VERSION=TMP_OS_VERSION;exports.SEMRESATTRS_PROCESS_PID=TMP_PROCESS_PID;exports.SEMRESATTRS_PROCESS_EXECUTABLE_NAME=TMP_PROCESS_EXECUTABLE_NAME;exports.SEMRESATTRS_PROCESS_EXECUTABLE_PATH=TMP_PROCESS_EXECUTABLE_PATH;exports.SEMRESATTRS_PROCESS_COMMAND=TMP_PROCESS_COMMAND;exports.SEMRESATTRS_PROCESS_COMMAND_LINE=TMP_PROCESS_COMMAND_LINE;exports.SEMRESATTRS_PROCESS_COMMAND_ARGS=TMP_PROCESS_COMMAND_ARGS;exports.SEMRESATTRS_PROCESS_OWNER=TMP_PROCESS_OWNER;exports.SEMRESATTRS_PROCESS_RUNTIME_NAME=TMP_PROCESS_RUNTIME_NAME;exports.SEMRESATTRS_PROCESS_RUNTIME_VERSION=TMP_PROCESS_RUNTIME_VERSION;exports.SEMRESATTRS_PROCESS_RUNTIME_DESCRIPTION=TMP_PROCESS_RUNTIME_DESCRIPTION;exports.SEMRESATTRS_SERVICE_NAME=TMP_SERVICE_NAME;exports.SEMRESATTRS_SERVICE_NAMESPACE=TMP_SERVICE_NAMESPACE;exports.SEMRESATTRS_SERVICE_INSTANCE_ID=TMP_SERVICE_INSTANCE_ID;exports.SEMRESATTRS_SERVICE_VERSION=TMP_SERVICE_VERSION;exports.SEMRESATTRS_TELEMETRY_SDK_NAME=TMP_TELEMETRY_SDK_NAME;exports.SEMRESATTRS_TELEMETRY_SDK_LANGUAGE=TMP_TELEMETRY_SDK_LANGUAGE;exports.SEMRESATTRS_TELEMETRY_SDK_VERSION=TMP_TELEMETRY_SDK_VERSION;exports.SEMRESATTRS_TELEMETRY_AUTO_VERSION=TMP_TELEMETRY_AUTO_VERSION;exports.SEMRESATTRS_WEBENGINE_NAME=TMP_WEBENGINE_NAME;exports.SEMRESATTRS_WEBENGINE_VERSION=TMP_WEBENGINE_VERSION;exports.SEMRESATTRS_WEBENGINE_DESCRIPTION=TMP_WEBENGINE_DESCRIPTION;exports.SemanticResourceAttributes=(0,utils_1.createConstMap)([TMP_CLOUD_PROVIDER,TMP_CLOUD_ACCOUNT_ID,TMP_CLOUD_REGION,TMP_CLOUD_AVAILABILITY_ZONE,TMP_CLOUD_PLATFORM,TMP_AWS_ECS_CONTAINER_ARN,TMP_AWS_ECS_CLUSTER_ARN,TMP_AWS_ECS_LAUNCHTYPE,TMP_AWS_ECS_TASK_ARN,TMP_AWS_ECS_TASK_FAMILY,TMP_AWS_ECS_TASK_REVISION,TMP_AWS_EKS_CLUSTER_ARN,TMP_AWS_LOG_GROUP_NAMES,TMP_AWS_LOG_GROUP_ARNS,TMP_AWS_LOG_STREAM_NAMES,TMP_AWS_LOG_STREAM_ARNS,TMP_CONTAINER_NAME,TMP_CONTAINER_ID,TMP_CONTAINER_RUNTIME,TMP_CONTAINER_IMAGE_NAME,TMP_CONTAINER_IMAGE_TAG,TMP_DEPLOYMENT_ENVIRONMENT,TMP_DEVICE_ID,TMP_DEVICE_MODEL_IDENTIFIER,TMP_DEVICE_MODEL_NAME,TMP_FAAS_NAME,TMP_FAAS_ID,TMP_FAAS_VERSION,TMP_FAAS_INSTANCE,TMP_FAAS_MAX_MEMORY,TMP_HOST_ID,TMP_HOST_NAME,TMP_HOST_TYPE,TMP_HOST_ARCH,TMP_HOST_IMAGE_NAME,TMP_HOST_IMAGE_ID,TMP_HOST_IMAGE_VERSION,TMP_K8S_CLUSTER_NAME,TMP_K8S_NODE_NAME,TMP_K8S_NODE_UID,TMP_K8S_NAMESPACE_NAME,TMP_K8S_POD_UID,TMP_K8S_POD_NAME,TMP_K8S_CONTAINER_NAME,TMP_K8S_REPLICASET_UID,TMP_K8S_REPLICASET_NAME,TMP_K8S_DEPLOYMENT_UID,TMP_K8S_DEPLOYMENT_NAME,TMP_K8S_STATEFULSET_UID,TMP_K8S_STATEFULSET_NAME,TMP_K8S_DAEMONSET_UID,TMP_K8S_DAEMONSET_NAME,TMP_K8S_JOB_UID,TMP_K8S_JOB_NAME,TMP_K8S_CRONJOB_UID,TMP_K8S_CRONJOB_NAME,TMP_OS_TYPE,TMP_OS_DESCRIPTION,TMP_OS_NAME,TMP_OS_VERSION,TMP_PROCESS_PID,TMP_PROCESS_EXECUTABLE_NAME,TMP_PROCESS_EXECUTABLE_PATH,TMP_PROCESS_COMMAND,TMP_PROCESS_COMMAND_LINE,TMP_PROCESS_COMMAND_ARGS,TMP_PROCESS_OWNER,TMP_PROCESS_RUNTIME_NAME,TMP_PROCESS_RUNTIME_VERSION,TMP_PROCESS_RUNTIME_DESCRIPTION,TMP_SERVICE_NAME,TMP_SERVICE_NAMESPACE,TMP_SERVICE_INSTANCE_ID,TMP_SERVICE_VERSION,TMP_TELEMETRY_SDK_NAME,TMP_TELEMETRY_SDK_LANGUAGE,TMP_TELEMETRY_SDK_VERSION,TMP_TELEMETRY_AUTO_VERSION,TMP_WEBENGINE_NAME,TMP_WEBENGINE_VERSION,TMP_WEBENGINE_DESCRIPTION]);var TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD="alibaba_cloud",TMP_CLOUDPROVIDERVALUES_AWS="aws",TMP_CLOUDPROVIDERVALUES_AZURE="azure",TMP_CLOUDPROVIDERVALUES_GCP="gcp";exports.CLOUDPROVIDERVALUES_ALIBABA_CLOUD=TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD;exports.CLOUDPROVIDERVALUES_AWS=TMP_CLOUDPROVIDERVALUES_AWS;exports.CLOUDPROVIDERVALUES_AZURE=TMP_CLOUDPROVIDERVALUES_AZURE;exports.CLOUDPROVIDERVALUES_GCP=TMP_CLOUDPROVIDERVALUES_GCP;exports.CloudProviderValues=(0,utils_1.createConstMap)([TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD,TMP_CLOUDPROVIDERVALUES_AWS,TMP_CLOUDPROVIDERVALUES_AZURE,TMP_CLOUDPROVIDERVALUES_GCP]);var TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS="alibaba_cloud_ecs",TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC="alibaba_cloud_fc",TMP_CLOUDPLATFORMVALUES_AWS_EC2="aws_ec2",TMP_CLOUDPLATFORMVALUES_AWS_ECS="aws_ecs",TMP_CLOUDPLATFORMVALUES_AWS_EKS="aws_eks",TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA="aws_lambda",TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK="aws_elastic_beanstalk",TMP_CLOUDPLATFORMVALUES_AZURE_VM="azure_vm",TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES="azure_container_instances",TMP_CLOUDPLATFORMVALUES_AZURE_AKS="azure_aks",TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS="azure_functions",TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE="azure_app_service",TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE="gcp_compute_engine",TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN="gcp_cloud_run",TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE="gcp_kubernetes_engine",TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS="gcp_cloud_functions",TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE="gcp_app_engine";exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS=TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS;exports.CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC=TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC;exports.CLOUDPLATFORMVALUES_AWS_EC2=TMP_CLOUDPLATFORMVALUES_AWS_EC2;exports.CLOUDPLATFORMVALUES_AWS_ECS=TMP_CLOUDPLATFORMVALUES_AWS_ECS;exports.CLOUDPLATFORMVALUES_AWS_EKS=TMP_CLOUDPLATFORMVALUES_AWS_EKS;exports.CLOUDPLATFORMVALUES_AWS_LAMBDA=TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA;exports.CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK=TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK;exports.CLOUDPLATFORMVALUES_AZURE_VM=TMP_CLOUDPLATFORMVALUES_AZURE_VM;exports.CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES=TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES;exports.CLOUDPLATFORMVALUES_AZURE_AKS=TMP_CLOUDPLATFORMVALUES_AZURE_AKS;exports.CLOUDPLATFORMVALUES_AZURE_FUNCTIONS=TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS;exports.CLOUDPLATFORMVALUES_AZURE_APP_SERVICE=TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE;exports.CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE=TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE;exports.CLOUDPLATFORMVALUES_GCP_CLOUD_RUN=TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN;exports.CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE=TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE;exports.CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS=TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS;exports.CLOUDPLATFORMVALUES_GCP_APP_ENGINE=TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE;exports.CloudPlatformValues=(0,utils_1.createConstMap)([TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS,TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC,TMP_CLOUDPLATFORMVALUES_AWS_EC2,TMP_CLOUDPLATFORMVALUES_AWS_ECS,TMP_CLOUDPLATFORMVALUES_AWS_EKS,TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA,TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK,TMP_CLOUDPLATFORMVALUES_AZURE_VM,TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES,TMP_CLOUDPLATFORMVALUES_AZURE_AKS,TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS,TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE,TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE,TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN,TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE,TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS,TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE]);var TMP_AWSECSLAUNCHTYPEVALUES_EC2="ec2",TMP_AWSECSLAUNCHTYPEVALUES_FARGATE="fargate";exports.AWSECSLAUNCHTYPEVALUES_EC2=TMP_AWSECSLAUNCHTYPEVALUES_EC2;exports.AWSECSLAUNCHTYPEVALUES_FARGATE=TMP_AWSECSLAUNCHTYPEVALUES_FARGATE;exports.AwsEcsLaunchtypeValues=(0,utils_1.createConstMap)([TMP_AWSECSLAUNCHTYPEVALUES_EC2,TMP_AWSECSLAUNCHTYPEVALUES_FARGATE]);var TMP_HOSTARCHVALUES_AMD64="amd64",TMP_HOSTARCHVALUES_ARM32="arm32",TMP_HOSTARCHVALUES_ARM64="arm64",TMP_HOSTARCHVALUES_IA64="ia64",TMP_HOSTARCHVALUES_PPC32="ppc32",TMP_HOSTARCHVALUES_PPC64="ppc64",TMP_HOSTARCHVALUES_X86="x86";exports.HOSTARCHVALUES_AMD64=TMP_HOSTARCHVALUES_AMD64;exports.HOSTARCHVALUES_ARM32=TMP_HOSTARCHVALUES_ARM32;exports.HOSTARCHVALUES_ARM64=TMP_HOSTARCHVALUES_ARM64;exports.HOSTARCHVALUES_IA64=TMP_HOSTARCHVALUES_IA64;exports.HOSTARCHVALUES_PPC32=TMP_HOSTARCHVALUES_PPC32;exports.HOSTARCHVALUES_PPC64=TMP_HOSTARCHVALUES_PPC64;exports.HOSTARCHVALUES_X86=TMP_HOSTARCHVALUES_X86;exports.HostArchValues=(0,utils_1.createConstMap)([TMP_HOSTARCHVALUES_AMD64,TMP_HOSTARCHVALUES_ARM32,TMP_HOSTARCHVALUES_ARM64,TMP_HOSTARCHVALUES_IA64,TMP_HOSTARCHVALUES_PPC32,TMP_HOSTARCHVALUES_PPC64,TMP_HOSTARCHVALUES_X86]);var TMP_OSTYPEVALUES_WINDOWS="windows",TMP_OSTYPEVALUES_LINUX="linux",TMP_OSTYPEVALUES_DARWIN="darwin",TMP_OSTYPEVALUES_FREEBSD="freebsd",TMP_OSTYPEVALUES_NETBSD="netbsd",TMP_OSTYPEVALUES_OPENBSD="openbsd",TMP_OSTYPEVALUES_DRAGONFLYBSD="dragonflybsd",TMP_OSTYPEVALUES_HPUX="hpux",TMP_OSTYPEVALUES_AIX="aix",TMP_OSTYPEVALUES_SOLARIS="solaris",TMP_OSTYPEVALUES_Z_OS="z_os";exports.OSTYPEVALUES_WINDOWS=TMP_OSTYPEVALUES_WINDOWS;exports.OSTYPEVALUES_LINUX=TMP_OSTYPEVALUES_LINUX;exports.OSTYPEVALUES_DARWIN=TMP_OSTYPEVALUES_DARWIN;exports.OSTYPEVALUES_FREEBSD=TMP_OSTYPEVALUES_FREEBSD;exports.OSTYPEVALUES_NETBSD=TMP_OSTYPEVALUES_NETBSD;exports.OSTYPEVALUES_OPENBSD=TMP_OSTYPEVALUES_OPENBSD;exports.OSTYPEVALUES_DRAGONFLYBSD=TMP_OSTYPEVALUES_DRAGONFLYBSD;exports.OSTYPEVALUES_HPUX=TMP_OSTYPEVALUES_HPUX;exports.OSTYPEVALUES_AIX=TMP_OSTYPEVALUES_AIX;exports.OSTYPEVALUES_SOLARIS=TMP_OSTYPEVALUES_SOLARIS;exports.OSTYPEVALUES_Z_OS=TMP_OSTYPEVALUES_Z_OS;exports.OsTypeValues=(0,utils_1.createConstMap)([TMP_OSTYPEVALUES_WINDOWS,TMP_OSTYPEVALUES_LINUX,TMP_OSTYPEVALUES_DARWIN,TMP_OSTYPEVALUES_FREEBSD,TMP_OSTYPEVALUES_NETBSD,TMP_OSTYPEVALUES_OPENBSD,TMP_OSTYPEVALUES_DRAGONFLYBSD,TMP_OSTYPEVALUES_HPUX,TMP_OSTYPEVALUES_AIX,TMP_OSTYPEVALUES_SOLARIS,TMP_OSTYPEVALUES_Z_OS]);var TMP_TELEMETRYSDKLANGUAGEVALUES_CPP="cpp",TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET="dotnet",TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG="erlang",TMP_TELEMETRYSDKLANGUAGEVALUES_GO="go",TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA="java",TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS="nodejs",TMP_TELEMETRYSDKLANGUAGEVALUES_PHP="php",TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON="python",TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY="ruby",TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS="webjs";exports.TELEMETRYSDKLANGUAGEVALUES_CPP=TMP_TELEMETRYSDKLANGUAGEVALUES_CPP;exports.TELEMETRYSDKLANGUAGEVALUES_DOTNET=TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET;exports.TELEMETRYSDKLANGUAGEVALUES_ERLANG=TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG;exports.TELEMETRYSDKLANGUAGEVALUES_GO=TMP_TELEMETRYSDKLANGUAGEVALUES_GO;exports.TELEMETRYSDKLANGUAGEVALUES_JAVA=TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA;exports.TELEMETRYSDKLANGUAGEVALUES_NODEJS=TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS;exports.TELEMETRYSDKLANGUAGEVALUES_PHP=TMP_TELEMETRYSDKLANGUAGEVALUES_PHP;exports.TELEMETRYSDKLANGUAGEVALUES_PYTHON=TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON;exports.TELEMETRYSDKLANGUAGEVALUES_RUBY=TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY;exports.TELEMETRYSDKLANGUAGEVALUES_WEBJS=TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS;exports.TelemetrySdkLanguageValues=(0,utils_1.createConstMap)([TMP_TELEMETRYSDKLANGUAGEVALUES_CPP,TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET,TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG,TMP_TELEMETRYSDKLANGUAGEVALUES_GO,TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA,TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS,TMP_TELEMETRYSDKLANGUAGEVALUES_PHP,TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON,TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY,TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS])});var require_resource=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o3,m,k,k2){if(k2===void 0)k2=k;var desc2=Object.getOwnPropertyDescriptor(m,k);if(!desc2||("get"in desc2?!m.__esModule:desc2.writable||desc2.configurable))desc2={enumerable:!0,get:function(){return m[k]}};Object.defineProperty(o3,k2,desc2)}:function(o3,m,k,k2){if(k2===void 0)k2=k;o3[k2]=m[k]}),__exportStar=exports&&exports.__exportStar||function(m,exports2){for(var p in m)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p))__createBinding(exports2,m,p)};Object.defineProperty(exports,"__esModule",{value:!0});__exportStar(require_SemanticResourceAttributes(),exports)});var require_stable_attributes=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.ATTR_ERROR_TYPE=exports.DOTNET_GC_HEAP_GENERATION_VALUE_POH=exports.DOTNET_GC_HEAP_GENERATION_VALUE_LOH=exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN2=exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN1=exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN0=exports.ATTR_DOTNET_GC_HEAP_GENERATION=exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_TEST=exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_STAGING=exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_PRODUCTION=exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_DEVELOPMENT=exports.ATTR_DEPLOYMENT_ENVIRONMENT_NAME=exports.DB_SYSTEM_NAME_VALUE_POSTGRESQL=exports.DB_SYSTEM_NAME_VALUE_MYSQL=exports.DB_SYSTEM_NAME_VALUE_MICROSOFT_SQL_SERVER=exports.DB_SYSTEM_NAME_VALUE_MARIADB=exports.ATTR_DB_SYSTEM_NAME=exports.ATTR_DB_STORED_PROCEDURE_NAME=exports.ATTR_DB_RESPONSE_STATUS_CODE=exports.ATTR_DB_QUERY_TEXT=exports.ATTR_DB_QUERY_SUMMARY=exports.ATTR_DB_OPERATION_NAME=exports.ATTR_DB_OPERATION_BATCH_SIZE=exports.ATTR_DB_NAMESPACE=exports.ATTR_DB_COLLECTION_NAME=exports.ATTR_CODE_STACKTRACE=exports.ATTR_CODE_LINE_NUMBER=exports.ATTR_CODE_FUNCTION_NAME=exports.ATTR_CODE_FILE_PATH=exports.ATTR_CODE_COLUMN_NUMBER=exports.ATTR_CLIENT_PORT=exports.ATTR_CLIENT_ADDRESS=exports.ATTR_ASPNETCORE_USER_IS_AUTHENTICATED=exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_SUCCESS=exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_FAILURE=exports.ATTR_ASPNETCORE_ROUTING_MATCH_STATUS=exports.ATTR_ASPNETCORE_ROUTING_IS_FALLBACK=exports.ATTR_ASPNETCORE_REQUEST_IS_UNHANDLED=exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_REQUEST_CANCELED=exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_GLOBAL_LIMITER=exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ENDPOINT_LIMITER=exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ACQUIRED=exports.ATTR_ASPNETCORE_RATE_LIMITING_RESULT=exports.ATTR_ASPNETCORE_RATE_LIMITING_POLICY=exports.ATTR_ASPNETCORE_DIAGNOSTICS_HANDLER_TYPE=exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_UNHANDLED=exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_SKIPPED=exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_HANDLED=exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_ABORTED=exports.ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT=void 0;exports.NETWORK_TYPE_VALUE_IPV4=exports.ATTR_NETWORK_TYPE=exports.NETWORK_TRANSPORT_VALUE_UNIX=exports.NETWORK_TRANSPORT_VALUE_UDP=exports.NETWORK_TRANSPORT_VALUE_TCP=exports.NETWORK_TRANSPORT_VALUE_QUIC=exports.NETWORK_TRANSPORT_VALUE_PIPE=exports.ATTR_NETWORK_TRANSPORT=exports.ATTR_NETWORK_PROTOCOL_VERSION=exports.ATTR_NETWORK_PROTOCOL_NAME=exports.ATTR_NETWORK_PEER_PORT=exports.ATTR_NETWORK_PEER_ADDRESS=exports.ATTR_NETWORK_LOCAL_PORT=exports.ATTR_NETWORK_LOCAL_ADDRESS=exports.JVM_THREAD_STATE_VALUE_WAITING=exports.JVM_THREAD_STATE_VALUE_TIMED_WAITING=exports.JVM_THREAD_STATE_VALUE_TERMINATED=exports.JVM_THREAD_STATE_VALUE_RUNNABLE=exports.JVM_THREAD_STATE_VALUE_NEW=exports.JVM_THREAD_STATE_VALUE_BLOCKED=exports.ATTR_JVM_THREAD_STATE=exports.ATTR_JVM_THREAD_DAEMON=exports.JVM_MEMORY_TYPE_VALUE_NON_HEAP=exports.JVM_MEMORY_TYPE_VALUE_HEAP=exports.ATTR_JVM_MEMORY_TYPE=exports.ATTR_JVM_MEMORY_POOL_NAME=exports.ATTR_JVM_GC_NAME=exports.ATTR_JVM_GC_ACTION=exports.ATTR_HTTP_ROUTE=exports.ATTR_HTTP_RESPONSE_STATUS_CODE=exports.ATTR_HTTP_RESPONSE_HEADER=exports.ATTR_HTTP_REQUEST_RESEND_COUNT=exports.ATTR_HTTP_REQUEST_METHOD_ORIGINAL=exports.HTTP_REQUEST_METHOD_VALUE_TRACE=exports.HTTP_REQUEST_METHOD_VALUE_PUT=exports.HTTP_REQUEST_METHOD_VALUE_POST=exports.HTTP_REQUEST_METHOD_VALUE_PATCH=exports.HTTP_REQUEST_METHOD_VALUE_OPTIONS=exports.HTTP_REQUEST_METHOD_VALUE_HEAD=exports.HTTP_REQUEST_METHOD_VALUE_GET=exports.HTTP_REQUEST_METHOD_VALUE_DELETE=exports.HTTP_REQUEST_METHOD_VALUE_CONNECT=exports.HTTP_REQUEST_METHOD_VALUE_OTHER=exports.ATTR_HTTP_REQUEST_METHOD=exports.ATTR_HTTP_REQUEST_HEADER=exports.ATTR_EXCEPTION_TYPE=exports.ATTR_EXCEPTION_STACKTRACE=exports.ATTR_EXCEPTION_MESSAGE=exports.ATTR_EXCEPTION_ESCAPED=exports.ERROR_TYPE_VALUE_OTHER=void 0;exports.ATTR_USER_AGENT_ORIGINAL=exports.ATTR_URL_SCHEME=exports.ATTR_URL_QUERY=exports.ATTR_URL_PATH=exports.ATTR_URL_FULL=exports.ATTR_URL_FRAGMENT=exports.ATTR_TELEMETRY_SDK_VERSION=exports.ATTR_TELEMETRY_SDK_NAME=exports.TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS=exports.TELEMETRY_SDK_LANGUAGE_VALUE_SWIFT=exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUST=exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUBY=exports.TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON=exports.TELEMETRY_SDK_LANGUAGE_VALUE_PHP=exports.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS=exports.TELEMETRY_SDK_LANGUAGE_VALUE_JAVA=exports.TELEMETRY_SDK_LANGUAGE_VALUE_GO=exports.TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG=exports.TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET=exports.TELEMETRY_SDK_LANGUAGE_VALUE_CPP=exports.ATTR_TELEMETRY_SDK_LANGUAGE=exports.ATTR_TELEMETRY_DISTRO_VERSION=exports.ATTR_TELEMETRY_DISTRO_NAME=exports.SIGNALR_TRANSPORT_VALUE_WEB_SOCKETS=exports.SIGNALR_TRANSPORT_VALUE_SERVER_SENT_EVENTS=exports.SIGNALR_TRANSPORT_VALUE_LONG_POLLING=exports.ATTR_SIGNALR_TRANSPORT=exports.SIGNALR_CONNECTION_STATUS_VALUE_TIMEOUT=exports.SIGNALR_CONNECTION_STATUS_VALUE_NORMAL_CLOSURE=exports.SIGNALR_CONNECTION_STATUS_VALUE_APP_SHUTDOWN=exports.ATTR_SIGNALR_CONNECTION_STATUS=exports.ATTR_SERVICE_VERSION=exports.ATTR_SERVICE_NAMESPACE=exports.ATTR_SERVICE_NAME=exports.ATTR_SERVICE_INSTANCE_ID=exports.ATTR_SERVER_PORT=exports.ATTR_SERVER_ADDRESS=exports.ATTR_OTEL_STATUS_DESCRIPTION=exports.OTEL_STATUS_CODE_VALUE_OK=exports.OTEL_STATUS_CODE_VALUE_ERROR=exports.ATTR_OTEL_STATUS_CODE=exports.ATTR_OTEL_SCOPE_VERSION=exports.ATTR_OTEL_SCOPE_NAME=exports.ATTR_OTEL_EVENT_NAME=exports.NETWORK_TYPE_VALUE_IPV6=void 0;exports.ATTR_ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT="aspnetcore.diagnostics.exception.result";exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_ABORTED="aborted";exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_HANDLED="handled";exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_SKIPPED="skipped";exports.ASPNETCORE_DIAGNOSTICS_EXCEPTION_RESULT_VALUE_UNHANDLED="unhandled";exports.ATTR_ASPNETCORE_DIAGNOSTICS_HANDLER_TYPE="aspnetcore.diagnostics.handler.type";exports.ATTR_ASPNETCORE_RATE_LIMITING_POLICY="aspnetcore.rate_limiting.policy";exports.ATTR_ASPNETCORE_RATE_LIMITING_RESULT="aspnetcore.rate_limiting.result";exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ACQUIRED="acquired";exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_ENDPOINT_LIMITER="endpoint_limiter";exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_GLOBAL_LIMITER="global_limiter";exports.ASPNETCORE_RATE_LIMITING_RESULT_VALUE_REQUEST_CANCELED="request_canceled";exports.ATTR_ASPNETCORE_REQUEST_IS_UNHANDLED="aspnetcore.request.is_unhandled";exports.ATTR_ASPNETCORE_ROUTING_IS_FALLBACK="aspnetcore.routing.is_fallback";exports.ATTR_ASPNETCORE_ROUTING_MATCH_STATUS="aspnetcore.routing.match_status";exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_FAILURE="failure";exports.ASPNETCORE_ROUTING_MATCH_STATUS_VALUE_SUCCESS="success";exports.ATTR_ASPNETCORE_USER_IS_AUTHENTICATED="aspnetcore.user.is_authenticated";exports.ATTR_CLIENT_ADDRESS="client.address";exports.ATTR_CLIENT_PORT="client.port";exports.ATTR_CODE_COLUMN_NUMBER="code.column.number";exports.ATTR_CODE_FILE_PATH="code.file.path";exports.ATTR_CODE_FUNCTION_NAME="code.function.name";exports.ATTR_CODE_LINE_NUMBER="code.line.number";exports.ATTR_CODE_STACKTRACE="code.stacktrace";exports.ATTR_DB_COLLECTION_NAME="db.collection.name";exports.ATTR_DB_NAMESPACE="db.namespace";exports.ATTR_DB_OPERATION_BATCH_SIZE="db.operation.batch.size";exports.ATTR_DB_OPERATION_NAME="db.operation.name";exports.ATTR_DB_QUERY_SUMMARY="db.query.summary";exports.ATTR_DB_QUERY_TEXT="db.query.text";exports.ATTR_DB_RESPONSE_STATUS_CODE="db.response.status_code";exports.ATTR_DB_STORED_PROCEDURE_NAME="db.stored_procedure.name";exports.ATTR_DB_SYSTEM_NAME="db.system.name";exports.DB_SYSTEM_NAME_VALUE_MARIADB="mariadb";exports.DB_SYSTEM_NAME_VALUE_MICROSOFT_SQL_SERVER="microsoft.sql_server";exports.DB_SYSTEM_NAME_VALUE_MYSQL="mysql";exports.DB_SYSTEM_NAME_VALUE_POSTGRESQL="postgresql";exports.ATTR_DEPLOYMENT_ENVIRONMENT_NAME="deployment.environment.name";exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_DEVELOPMENT="development";exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_PRODUCTION="production";exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_STAGING="staging";exports.DEPLOYMENT_ENVIRONMENT_NAME_VALUE_TEST="test";exports.ATTR_DOTNET_GC_HEAP_GENERATION="dotnet.gc.heap.generation";exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN0="gen0";exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN1="gen1";exports.DOTNET_GC_HEAP_GENERATION_VALUE_GEN2="gen2";exports.DOTNET_GC_HEAP_GENERATION_VALUE_LOH="loh";exports.DOTNET_GC_HEAP_GENERATION_VALUE_POH="poh";exports.ATTR_ERROR_TYPE="error.type";exports.ERROR_TYPE_VALUE_OTHER="_OTHER";exports.ATTR_EXCEPTION_ESCAPED="exception.escaped";exports.ATTR_EXCEPTION_MESSAGE="exception.message";exports.ATTR_EXCEPTION_STACKTRACE="exception.stacktrace";exports.ATTR_EXCEPTION_TYPE="exception.type";var ATTR_HTTP_REQUEST_HEADER=(key)=>`http.request.header.${key}`;exports.ATTR_HTTP_REQUEST_HEADER=ATTR_HTTP_REQUEST_HEADER;exports.ATTR_HTTP_REQUEST_METHOD="http.request.method";exports.HTTP_REQUEST_METHOD_VALUE_OTHER="_OTHER";exports.HTTP_REQUEST_METHOD_VALUE_CONNECT="CONNECT";exports.HTTP_REQUEST_METHOD_VALUE_DELETE="DELETE";exports.HTTP_REQUEST_METHOD_VALUE_GET="GET";exports.HTTP_REQUEST_METHOD_VALUE_HEAD="HEAD";exports.HTTP_REQUEST_METHOD_VALUE_OPTIONS="OPTIONS";exports.HTTP_REQUEST_METHOD_VALUE_PATCH="PATCH";exports.HTTP_REQUEST_METHOD_VALUE_POST="POST";exports.HTTP_REQUEST_METHOD_VALUE_PUT="PUT";exports.HTTP_REQUEST_METHOD_VALUE_TRACE="TRACE";exports.ATTR_HTTP_REQUEST_METHOD_ORIGINAL="http.request.method_original";exports.ATTR_HTTP_REQUEST_RESEND_COUNT="http.request.resend_count";var ATTR_HTTP_RESPONSE_HEADER=(key)=>`http.response.header.${key}`;exports.ATTR_HTTP_RESPONSE_HEADER=ATTR_HTTP_RESPONSE_HEADER;exports.ATTR_HTTP_RESPONSE_STATUS_CODE="http.response.status_code";exports.ATTR_HTTP_ROUTE="http.route";exports.ATTR_JVM_GC_ACTION="jvm.gc.action";exports.ATTR_JVM_GC_NAME="jvm.gc.name";exports.ATTR_JVM_MEMORY_POOL_NAME="jvm.memory.pool.name";exports.ATTR_JVM_MEMORY_TYPE="jvm.memory.type";exports.JVM_MEMORY_TYPE_VALUE_HEAP="heap";exports.JVM_MEMORY_TYPE_VALUE_NON_HEAP="non_heap";exports.ATTR_JVM_THREAD_DAEMON="jvm.thread.daemon";exports.ATTR_JVM_THREAD_STATE="jvm.thread.state";exports.JVM_THREAD_STATE_VALUE_BLOCKED="blocked";exports.JVM_THREAD_STATE_VALUE_NEW="new";exports.JVM_THREAD_STATE_VALUE_RUNNABLE="runnable";exports.JVM_THREAD_STATE_VALUE_TERMINATED="terminated";exports.JVM_THREAD_STATE_VALUE_TIMED_WAITING="timed_waiting";exports.JVM_THREAD_STATE_VALUE_WAITING="waiting";exports.ATTR_NETWORK_LOCAL_ADDRESS="network.local.address";exports.ATTR_NETWORK_LOCAL_PORT="network.local.port";exports.ATTR_NETWORK_PEER_ADDRESS="network.peer.address";exports.ATTR_NETWORK_PEER_PORT="network.peer.port";exports.ATTR_NETWORK_PROTOCOL_NAME="network.protocol.name";exports.ATTR_NETWORK_PROTOCOL_VERSION="network.protocol.version";exports.ATTR_NETWORK_TRANSPORT="network.transport";exports.NETWORK_TRANSPORT_VALUE_PIPE="pipe";exports.NETWORK_TRANSPORT_VALUE_QUIC="quic";exports.NETWORK_TRANSPORT_VALUE_TCP="tcp";exports.NETWORK_TRANSPORT_VALUE_UDP="udp";exports.NETWORK_TRANSPORT_VALUE_UNIX="unix";exports.ATTR_NETWORK_TYPE="network.type";exports.NETWORK_TYPE_VALUE_IPV4="ipv4";exports.NETWORK_TYPE_VALUE_IPV6="ipv6";exports.ATTR_OTEL_EVENT_NAME="otel.event.name";exports.ATTR_OTEL_SCOPE_NAME="otel.scope.name";exports.ATTR_OTEL_SCOPE_VERSION="otel.scope.version";exports.ATTR_OTEL_STATUS_CODE="otel.status_code";exports.OTEL_STATUS_CODE_VALUE_ERROR="ERROR";exports.OTEL_STATUS_CODE_VALUE_OK="OK";exports.ATTR_OTEL_STATUS_DESCRIPTION="otel.status_description";exports.ATTR_SERVER_ADDRESS="server.address";exports.ATTR_SERVER_PORT="server.port";exports.ATTR_SERVICE_INSTANCE_ID="service.instance.id";exports.ATTR_SERVICE_NAME="service.name";exports.ATTR_SERVICE_NAMESPACE="service.namespace";exports.ATTR_SERVICE_VERSION="service.version";exports.ATTR_SIGNALR_CONNECTION_STATUS="signalr.connection.status";exports.SIGNALR_CONNECTION_STATUS_VALUE_APP_SHUTDOWN="app_shutdown";exports.SIGNALR_CONNECTION_STATUS_VALUE_NORMAL_CLOSURE="normal_closure";exports.SIGNALR_CONNECTION_STATUS_VALUE_TIMEOUT="timeout";exports.ATTR_SIGNALR_TRANSPORT="signalr.transport";exports.SIGNALR_TRANSPORT_VALUE_LONG_POLLING="long_polling";exports.SIGNALR_TRANSPORT_VALUE_SERVER_SENT_EVENTS="server_sent_events";exports.SIGNALR_TRANSPORT_VALUE_WEB_SOCKETS="web_sockets";exports.ATTR_TELEMETRY_DISTRO_NAME="telemetry.distro.name";exports.ATTR_TELEMETRY_DISTRO_VERSION="telemetry.distro.version";exports.ATTR_TELEMETRY_SDK_LANGUAGE="telemetry.sdk.language";exports.TELEMETRY_SDK_LANGUAGE_VALUE_CPP="cpp";exports.TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET="dotnet";exports.TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG="erlang";exports.TELEMETRY_SDK_LANGUAGE_VALUE_GO="go";exports.TELEMETRY_SDK_LANGUAGE_VALUE_JAVA="java";exports.TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS="nodejs";exports.TELEMETRY_SDK_LANGUAGE_VALUE_PHP="php";exports.TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON="python";exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUBY="ruby";exports.TELEMETRY_SDK_LANGUAGE_VALUE_RUST="rust";exports.TELEMETRY_SDK_LANGUAGE_VALUE_SWIFT="swift";exports.TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS="webjs";exports.ATTR_TELEMETRY_SDK_NAME="telemetry.sdk.name";exports.ATTR_TELEMETRY_SDK_VERSION="telemetry.sdk.version";exports.ATTR_URL_FRAGMENT="url.fragment";exports.ATTR_URL_FULL="url.full";exports.ATTR_URL_PATH="url.path";exports.ATTR_URL_QUERY="url.query";exports.ATTR_URL_SCHEME="url.scheme";exports.ATTR_USER_AGENT_ORIGINAL="user_agent.original"});var require_stable_metrics=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.METRIC_SIGNALR_SERVER_ACTIVE_CONNECTIONS=exports.METRIC_KESTREL_UPGRADED_CONNECTIONS=exports.METRIC_KESTREL_TLS_HANDSHAKE_DURATION=exports.METRIC_KESTREL_REJECTED_CONNECTIONS=exports.METRIC_KESTREL_QUEUED_REQUESTS=exports.METRIC_KESTREL_QUEUED_CONNECTIONS=exports.METRIC_KESTREL_CONNECTION_DURATION=exports.METRIC_KESTREL_ACTIVE_TLS_HANDSHAKES=exports.METRIC_KESTREL_ACTIVE_CONNECTIONS=exports.METRIC_JVM_THREAD_COUNT=exports.METRIC_JVM_MEMORY_USED_AFTER_LAST_GC=exports.METRIC_JVM_MEMORY_USED=exports.METRIC_JVM_MEMORY_LIMIT=exports.METRIC_JVM_MEMORY_COMMITTED=exports.METRIC_JVM_GC_DURATION=exports.METRIC_JVM_CPU_TIME=exports.METRIC_JVM_CPU_RECENT_UTILIZATION=exports.METRIC_JVM_CPU_COUNT=exports.METRIC_JVM_CLASS_UNLOADED=exports.METRIC_JVM_CLASS_LOADED=exports.METRIC_JVM_CLASS_COUNT=exports.METRIC_HTTP_SERVER_REQUEST_DURATION=exports.METRIC_HTTP_CLIENT_REQUEST_DURATION=exports.METRIC_DOTNET_TIMER_COUNT=exports.METRIC_DOTNET_THREAD_POOL_WORK_ITEM_COUNT=exports.METRIC_DOTNET_THREAD_POOL_THREAD_COUNT=exports.METRIC_DOTNET_THREAD_POOL_QUEUE_LENGTH=exports.METRIC_DOTNET_PROCESS_MEMORY_WORKING_SET=exports.METRIC_DOTNET_PROCESS_CPU_TIME=exports.METRIC_DOTNET_PROCESS_CPU_COUNT=exports.METRIC_DOTNET_MONITOR_LOCK_CONTENTIONS=exports.METRIC_DOTNET_JIT_COMPILED_METHODS=exports.METRIC_DOTNET_JIT_COMPILED_IL_SIZE=exports.METRIC_DOTNET_JIT_COMPILATION_TIME=exports.METRIC_DOTNET_GC_PAUSE_TIME=exports.METRIC_DOTNET_GC_LAST_COLLECTION_MEMORY_COMMITTED_SIZE=exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_SIZE=exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_FRAGMENTATION_SIZE=exports.METRIC_DOTNET_GC_HEAP_TOTAL_ALLOCATED=exports.METRIC_DOTNET_GC_COLLECTIONS=exports.METRIC_DOTNET_EXCEPTIONS=exports.METRIC_DOTNET_ASSEMBLY_COUNT=exports.METRIC_DB_CLIENT_OPERATION_DURATION=exports.METRIC_ASPNETCORE_ROUTING_MATCH_ATTEMPTS=exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUESTS=exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_LEASE_DURATION=exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_TIME_IN_QUEUE=exports.METRIC_ASPNETCORE_RATE_LIMITING_QUEUED_REQUESTS=exports.METRIC_ASPNETCORE_RATE_LIMITING_ACTIVE_REQUEST_LEASES=exports.METRIC_ASPNETCORE_DIAGNOSTICS_EXCEPTIONS=void 0;exports.METRIC_SIGNALR_SERVER_CONNECTION_DURATION=void 0;exports.METRIC_ASPNETCORE_DIAGNOSTICS_EXCEPTIONS="aspnetcore.diagnostics.exceptions";exports.METRIC_ASPNETCORE_RATE_LIMITING_ACTIVE_REQUEST_LEASES="aspnetcore.rate_limiting.active_request_leases";exports.METRIC_ASPNETCORE_RATE_LIMITING_QUEUED_REQUESTS="aspnetcore.rate_limiting.queued_requests";exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_TIME_IN_QUEUE="aspnetcore.rate_limiting.request.time_in_queue";exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUEST_LEASE_DURATION="aspnetcore.rate_limiting.request_lease.duration";exports.METRIC_ASPNETCORE_RATE_LIMITING_REQUESTS="aspnetcore.rate_limiting.requests";exports.METRIC_ASPNETCORE_ROUTING_MATCH_ATTEMPTS="aspnetcore.routing.match_attempts";exports.METRIC_DB_CLIENT_OPERATION_DURATION="db.client.operation.duration";exports.METRIC_DOTNET_ASSEMBLY_COUNT="dotnet.assembly.count";exports.METRIC_DOTNET_EXCEPTIONS="dotnet.exceptions";exports.METRIC_DOTNET_GC_COLLECTIONS="dotnet.gc.collections";exports.METRIC_DOTNET_GC_HEAP_TOTAL_ALLOCATED="dotnet.gc.heap.total_allocated";exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_FRAGMENTATION_SIZE="dotnet.gc.last_collection.heap.fragmentation.size";exports.METRIC_DOTNET_GC_LAST_COLLECTION_HEAP_SIZE="dotnet.gc.last_collection.heap.size";exports.METRIC_DOTNET_GC_LAST_COLLECTION_MEMORY_COMMITTED_SIZE="dotnet.gc.last_collection.memory.committed_size";exports.METRIC_DOTNET_GC_PAUSE_TIME="dotnet.gc.pause.time";exports.METRIC_DOTNET_JIT_COMPILATION_TIME="dotnet.jit.compilation.time";exports.METRIC_DOTNET_JIT_COMPILED_IL_SIZE="dotnet.jit.compiled_il.size";exports.METRIC_DOTNET_JIT_COMPILED_METHODS="dotnet.jit.compiled_methods";exports.METRIC_DOTNET_MONITOR_LOCK_CONTENTIONS="dotnet.monitor.lock_contentions";exports.METRIC_DOTNET_PROCESS_CPU_COUNT="dotnet.process.cpu.count";exports.METRIC_DOTNET_PROCESS_CPU_TIME="dotnet.process.cpu.time";exports.METRIC_DOTNET_PROCESS_MEMORY_WORKING_SET="dotnet.process.memory.working_set";exports.METRIC_DOTNET_THREAD_POOL_QUEUE_LENGTH="dotnet.thread_pool.queue.length";exports.METRIC_DOTNET_THREAD_POOL_THREAD_COUNT="dotnet.thread_pool.thread.count";exports.METRIC_DOTNET_THREAD_POOL_WORK_ITEM_COUNT="dotnet.thread_pool.work_item.count";exports.METRIC_DOTNET_TIMER_COUNT="dotnet.timer.count";exports.METRIC_HTTP_CLIENT_REQUEST_DURATION="http.client.request.duration";exports.METRIC_HTTP_SERVER_REQUEST_DURATION="http.server.request.duration";exports.METRIC_JVM_CLASS_COUNT="jvm.class.count";exports.METRIC_JVM_CLASS_LOADED="jvm.class.loaded";exports.METRIC_JVM_CLASS_UNLOADED="jvm.class.unloaded";exports.METRIC_JVM_CPU_COUNT="jvm.cpu.count";exports.METRIC_JVM_CPU_RECENT_UTILIZATION="jvm.cpu.recent_utilization";exports.METRIC_JVM_CPU_TIME="jvm.cpu.time";exports.METRIC_JVM_GC_DURATION="jvm.gc.duration";exports.METRIC_JVM_MEMORY_COMMITTED="jvm.memory.committed";exports.METRIC_JVM_MEMORY_LIMIT="jvm.memory.limit";exports.METRIC_JVM_MEMORY_USED="jvm.memory.used";exports.METRIC_JVM_MEMORY_USED_AFTER_LAST_GC="jvm.memory.used_after_last_gc";exports.METRIC_JVM_THREAD_COUNT="jvm.thread.count";exports.METRIC_KESTREL_ACTIVE_CONNECTIONS="kestrel.active_connections";exports.METRIC_KESTREL_ACTIVE_TLS_HANDSHAKES="kestrel.active_tls_handshakes";exports.METRIC_KESTREL_CONNECTION_DURATION="kestrel.connection.duration";exports.METRIC_KESTREL_QUEUED_CONNECTIONS="kestrel.queued_connections";exports.METRIC_KESTREL_QUEUED_REQUESTS="kestrel.queued_requests";exports.METRIC_KESTREL_REJECTED_CONNECTIONS="kestrel.rejected_connections";exports.METRIC_KESTREL_TLS_HANDSHAKE_DURATION="kestrel.tls_handshake.duration";exports.METRIC_KESTREL_UPGRADED_CONNECTIONS="kestrel.upgraded_connections";exports.METRIC_SIGNALR_SERVER_ACTIVE_CONNECTIONS="signalr.server.active_connections";exports.METRIC_SIGNALR_SERVER_CONNECTION_DURATION="signalr.server.connection.duration"});var require_stable_events=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.EVENT_EXCEPTION=void 0;exports.EVENT_EXCEPTION="exception"});var require_src2=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o3,m,k,k2){if(k2===void 0)k2=k;var desc2=Object.getOwnPropertyDescriptor(m,k);if(!desc2||("get"in desc2?!m.__esModule:desc2.writable||desc2.configurable))desc2={enumerable:!0,get:function(){return m[k]}};Object.defineProperty(o3,k2,desc2)}:function(o3,m,k,k2){if(k2===void 0)k2=k;o3[k2]=m[k]}),__exportStar=exports&&exports.__exportStar||function(m,exports2){for(var p in m)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p))__createBinding(exports2,m,p)};Object.defineProperty(exports,"__esModule",{value:!0});__exportStar(require_trace2(),exports);__exportStar(require_resource(),exports);__exportStar(require_stable_attributes(),exports);__exportStar(require_stable_metrics(),exports);__exportStar(require_stable_events(),exports)});function getCategoryPrefix(){let store=LoggerImpl.getLogger().contextLocalStorage?.getStore();if(store==null)return[];let prefix=store[categoryPrefixSymbol];return Array.isArray(prefix)?prefix:[]}function getImplicitContext(){let store=LoggerImpl.getLogger().contextLocalStorage?.getStore();if(store==null)return{};let result={};for(let key of Object.keys(store))result[key]=store[key];return result}var categoryPrefixSymbol;var init_context3=__esm(()=>{init_logger2();categoryPrefixSymbol=Symbol.for("logtape.categoryPrefix")});function compareLogLevel(a2,b){let aIndex=logLevels.indexOf(a2);if(aIndex<0)throw TypeError(`Invalid log level: ${JSON.stringify(a2)}.`);let bIndex=logLevels.indexOf(b);if(bIndex<0)throw TypeError(`Invalid log level: ${JSON.stringify(b)}.`);return aIndex-bIndex}var logLevels;var init_level=__esm(()=>{logLevels=["trace","debug","info","warning","error","fatal"]});function isLazy(value){return value!=null&&typeof value==="object"&&lazySymbol in value&&value[lazySymbol]===!0}function resolveProperties(properties){let resolved={};for(let key in properties){let value=properties[key];resolved[key]=isLazy(value)?value.getter():value}let symbolProperties=properties,symbolResolved=resolved;if(Object.prototype.propertyIsEnumerable.call(properties,throttlingSummaryRecordSymbol)){let value=symbolProperties[throttlingSummaryRecordSymbol];symbolResolved[throttlingSummaryRecordSymbol]=isLazy(value)?value.getter():value}return resolved}function isPromiseObject(value){if(value instanceof Promise)return!0;return Object.prototype.toString.call(value)==="[object Promise]"&&typeof value.then==="function"}function logStringMessage(logger2,level,message,props){if(typeof props!=="function"){let properties=props??{};logger2.log(level,message,properties);return}if(!logger2.isEnabledFor(level))return Promise.resolve();let result=props();if(isPromiseObject(result))return Promise.resolve(result).then((resolvedProps)=>{logger2.log(level,message,resolvedProps)});logger2.log(level,message,result)}function snapshotLogRecordProperties(record2){let properties=resolveProperties(record2.properties),descriptors2=Object.getOwnPropertyDescriptors(record2);return descriptors2.properties={value:properties,enumerable:!0,configurable:!0},Object.defineProperties({},descriptors2)}function getLogger(category=[]){return LoggerImpl.getLogger(category)}function isMetaLoggerCategory(category){return category.length===2&&category[0]==="logtape"&&category[1]==="meta"}function isNestedAccess(key){return key.includes(".")||key.includes("[")||key.includes("?.")}function getOwnProperty(obj,key){if(key==="__proto__"||key==="prototype"||key==="constructor")return;if((typeof obj==="object"||typeof obj==="function")&&obj!==null)return Object.prototype.hasOwnProperty.call(obj,key)?obj[key]:void 0;return}function parseNextSegment(path8,fromIndex){let len=path8.length,i2=fromIndex;if(i2>=len)return null;let segment;if(path8[i2]==="["){if(i2++,i2>=len)return null;if(path8[i2]==='"'||path8[i2]==="'"){let quote=path8[i2];i2++;let segmentStr="";while(i2<len&&path8[i2]!==quote)if(path8[i2]==="\\"){if(i2++,i2<len){let escapeChar=path8[i2];switch(escapeChar){case"n":segmentStr+=`
316
+ `;break;case"t":segmentStr+="\t";break;case"r":segmentStr+="\r";break;case"b":segmentStr+="\b";break;case"f":segmentStr+="\f";break;case"v":segmentStr+="\v";break;case"0":segmentStr+="\x00";break;case"\\":segmentStr+="\\";break;case'"':segmentStr+='"';break;case"'":segmentStr+="'";break;case"u":if(i2+4<len){let hex3=path8.slice(i2+1,i2+5),codePoint=Number.parseInt(hex3,16);if(!Number.isNaN(codePoint))segmentStr+=String.fromCharCode(codePoint),i2+=4;else segmentStr+=escapeChar}else segmentStr+=escapeChar;break;default:segmentStr+=escapeChar}i2++}}else segmentStr+=path8[i2],i2++;if(i2>=len)return null;segment=segmentStr,i2++}else{let startIndex=i2;while(i2<len&&path8[i2]!=="]"&&path8[i2]!=="'"&&path8[i2]!=='"')i2++;if(i2>=len)return null;let indexStr=path8.slice(startIndex,i2);if(indexStr.length===0)return null;let indexNum=Number(indexStr);segment=Number.isNaN(indexNum)?indexStr:indexNum}while(i2<len&&path8[i2]!=="]")i2++;if(i2<len)i2++}else{let startIndex=i2;while(i2<len&&path8[i2]!=="."&&path8[i2]!=="["&&path8[i2]!=="?"&&path8[i2]!=="]")i2++;if(segment=path8.slice(startIndex,i2),segment.length===0)return null}if(i2<len&&path8[i2]===".")i2++;return{segment,nextIndex:i2}}function accessProperty(obj,segment){if(typeof segment==="string")return getOwnProperty(obj,segment);if(Array.isArray(obj)&&segment>=0&&segment<obj.length)return obj[segment];return}function resolvePropertyPath(obj,path8){if(obj==null)return;if(path8.length===0||path8.endsWith("."))return;let current=obj,i2=0,len=path8.length;while(i2<len){if(path8.slice(i2,i2+2)==="?."){if(i2+=2,current==null)return}else if(current==null)return;let result=parseNextSegment(path8,i2);if(result===null)return;let{segment,nextIndex}=result;if(i2=nextIndex,current=accessProperty(current,segment),current===void 0)return}return current}function parseMessageTemplate(template,properties){let length=template.length;if(length===0)return[""];if(!template.includes("{"))return[template];let message=[],startIndex=0;for(let i2=0;i2<length;i2++){let char=template[i2];if(char==="{"){if((i2+1<length?template[i2+1]:"")==="{"){i2++;continue}let closeIndex=template.indexOf("}",i2+1);if(closeIndex===-1)continue;let beforeText=template.slice(startIndex,i2);message.push(beforeText.replace(/{{/g,"{").replace(/}}/g,"}"));let key=template.slice(i2+1,closeIndex),prop,trimmedKey=key.trim();if(trimmedKey==="*")prop=key in properties?properties[key]:("*"in properties)?properties["*"]:properties;else{if(key!==trimmedKey)prop=key in properties?properties[key]:properties[trimmedKey];else prop=properties[key];if(prop===void 0&&isNestedAccess(trimmedKey))prop=resolvePropertyPath(properties,trimmedKey)}message.push(prop),i2=closeIndex,startIndex=i2+1}else if(char==="}"&&i2+1<length&&template[i2+1]==="}")i2++}let remainingText=template.slice(startIndex);return message.push(remainingText.replace(/{{/g,"{").replace(/}}/g,"}")),message}function renderMessage(template,values){let args=[];for(let i2=0;i2<template.length;i2++)if(args.push(template[i2]),i2<values.length)args.push(values[i2]);return args}var lazySymbol,throttlingSummaryRecordSymbol,globalRootLoggerSymbol,LoggerImpl=class LoggerImpl2{parent;children;category;sinks;parentSinks="inherit";filters;lowestLevel="trace";contextLocalStorage;static getLogger(category=[]){let rootLogger=globalRootLoggerSymbol in globalThis?globalThis[globalRootLoggerSymbol]??null:null;if(rootLogger==null)rootLogger=new LoggerImpl2(null,[]),globalThis[globalRootLoggerSymbol]=rootLogger;if(typeof category==="string")return rootLogger.getChild(category);if(category.length===0)return rootLogger;return rootLogger.getChild(category)}static getNearestExistingLogger(category){let logger2=LoggerImpl2.getLogger();for(let name of category){let childRef=logger2.children[name],child=childRef instanceof LoggerImpl2?childRef:childRef?.deref();if(child==null)break;logger2=child}return logger2}constructor(parent,category){this.parent=parent,this.children={},this.category=category,this.sinks=[],this.filters=[]}getChild(subcategory){let name=typeof subcategory==="string"?subcategory:subcategory[0],childRef=this.children[name],child=childRef instanceof LoggerImpl2?childRef:childRef?.deref();if(child==null)child=new LoggerImpl2(this,[...this.category,name]),this.children[name]="WeakRef"in globalThis?new WeakRef(child):child;if(typeof subcategory==="string"||subcategory.length===1)return child;return child.getChild(subcategory.slice(1))}reset(){while(this.sinks.length>0)this.sinks.shift();this.parentSinks="inherit";while(this.filters.length>0)this.filters.shift();this.lowestLevel="trace"}resetDescendants(){for(let child of Object.values(this.children)){let logger2=child instanceof LoggerImpl2?child:child.deref();if(logger2!=null)logger2.resetDescendants()}this.reset()}with(properties){return new LoggerCtx(this,{...properties})}filter(record2){for(let filter of this.filters)if(!filter(record2))return!1;if(this.filters.length<1)return this.parent?.filter(record2)??!0;return!0}*getSinks(level){if(this.lowestLevel===null||compareLogLevel(level,this.lowestLevel)<0)return;if(this.parent!=null&&this.parentSinks==="inherit")for(let sink of this.parent.getSinks(level))yield sink;for(let sink of this.sinks)yield sink}isEnabledFor(level){let categoryPrefix=isMetaLoggerCategory(this.category)?[]:getCategoryPrefix();return(categoryPrefix.length>0?LoggerImpl2.getNearestExistingLogger([...categoryPrefix,...this.category]):this).isEnabledForResolved(level)}isEnabledForResolved(level){if(this.lowestLevel===null||compareLogLevel(level,this.lowestLevel)<0)return!1;for(let _ of this.getSinks(level))return!0;return!1}emit(record2,bypassSinks){let baseCategory="category"in record2?record2.category:this.category,categoryPrefix=isMetaLoggerCategory(baseCategory)?[]:getCategoryPrefix(),fullCategory=categoryPrefix.length>0?[...categoryPrefix,...baseCategory]:baseCategory,descriptors2=Object.getOwnPropertyDescriptors(record2);descriptors2.category={value:fullCategory,enumerable:!0,configurable:!0};let fullRecord=Object.defineProperties({},descriptors2);(categoryPrefix.length>0?LoggerImpl2.getNearestExistingLogger(fullCategory):this).emitResolved(fullRecord,bypassSinks)}emitResolved(record2,bypassSinks){if(this.lowestLevel===null||compareLogLevel(record2.level,this.lowestLevel)<0||!this.filter(record2))return;let sinks=[...this.getSinks(record2.level)];if(sinks.length<1)return;let snapshot,snapshotFailed=!1;for(let sink of sinks){if(bypassSinks?.has(sink))continue;try{if(snapshot==null&&!snapshotFailed)try{snapshot=snapshotLogRecordProperties(record2)}catch{snapshotFailed=!0,snapshot=record2}sink(snapshot??record2)}catch(error51){let bypassSinks2=new Set(bypassSinks);bypassSinks2.add(sink),metaLogger.log("fatal","Failed to emit a log record to sink {sink}: {error}",{sink,error:error51,record:record2},bypassSinks2)}}}log(level,rawMessage,properties,bypassSinks){let implicitContext=getImplicitContext(),cachedProps=void 0,cachedMessage=void 0,record2=typeof properties==="function"?{category:this.category,level,timestamp:Date.now(),get message(){if(cachedMessage==null)cachedMessage=parseMessageTemplate(rawMessage,this.properties);return cachedMessage},rawMessage,get properties(){if(cachedProps==null)cachedProps=resolveProperties({...implicitContext,...properties()});return cachedProps}}:{category:this.category,level,timestamp:Date.now(),get message(){if(cachedMessage==null)cachedMessage=parseMessageTemplate(rawMessage,this.properties);return cachedMessage},rawMessage,get properties(){if(cachedProps==null)cachedProps=resolveProperties({...implicitContext,...properties});return cachedProps}};this.emit(record2,bypassSinks)}logLazily(level,callback,properties={}){let implicitContext=getImplicitContext(),rawMessage=void 0,msg=void 0;function realizeMessage(){if(msg==null||rawMessage==null){if(msg=callback((tpl,...values)=>{return rawMessage=tpl,renderMessage(tpl,values)}),rawMessage==null)throw TypeError("No log record was made.")}return[msg,rawMessage]}this.emit({category:this.category,level,get message(){return realizeMessage()[0]},get rawMessage(){return realizeMessage()[1]},timestamp:Date.now(),properties:{...implicitContext,...properties}})}logTemplate(level,messageTemplate,values,properties={}){let implicitContext=getImplicitContext();this.emit({category:this.category,level,message:renderMessage(messageTemplate,values),rawMessage:messageTemplate,timestamp:Date.now(),properties:{...implicitContext,...properties}})}trace(message,...values){if(typeof message==="string")return logStringMessage(this,"trace",message,values[0]);else if(typeof message==="function")this.logLazily("trace",message);else if(!Array.isArray(message))this.log("trace","{*}",message);else this.logTemplate("trace",message,values)}debug(message,...values){if(typeof message==="string")return logStringMessage(this,"debug",message,values[0]);else if(typeof message==="function")this.logLazily("debug",message);else if(!Array.isArray(message))this.log("debug","{*}",message);else this.logTemplate("debug",message,values)}info(message,...values){if(typeof message==="string")return logStringMessage(this,"info",message,values[0]);else if(typeof message==="function")this.logLazily("info",message);else if(!Array.isArray(message))this.log("info","{*}",message);else this.logTemplate("info",message,values)}logError(level,error51,props){if(typeof props!=="function"){this.log(level,"{error.message}",{...props,error:error51});return}if(!this.isEnabledFor(level))return Promise.resolve();let result=props();if(result instanceof Promise)return result.then((resolved)=>{this.log(level,"{error.message}",{...resolved,error:error51})});this.log(level,"{error.message}",{...result,error:error51})}warn(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}warning(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}error(message,...values){if(message instanceof Error)return this.logError("error",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("error",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"error",message,values[0]);else if(typeof message==="function")this.logLazily("error",message);else if(!Array.isArray(message))this.log("error","{*}",message);else this.logTemplate("error",message,values)}fatal(message,...values){if(message instanceof Error)return this.logError("fatal",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("fatal",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"fatal",message,values[0]);else if(typeof message==="function")this.logLazily("fatal",message);else if(!Array.isArray(message))this.log("fatal","{*}",message);else this.logTemplate("fatal",message,values)}},LoggerCtx=class LoggerCtx2{logger;properties;constructor(logger2,properties){this.logger=logger2,this.properties=properties}get category(){return this.logger.category}get parent(){return this.logger.parent}getChild(subcategory){return this.logger.getChild(subcategory).with(this.properties)}with(properties){return new LoggerCtx2(this.logger,{...this.properties,...properties})}log(level,message,properties,bypassSinks){let contextProps=this.properties;this.logger.log(level,message,typeof properties==="function"?()=>resolveProperties({...contextProps,...properties()}):()=>resolveProperties({...contextProps,...properties}),bypassSinks)}logLazily(level,callback){this.logger.logLazily(level,callback,resolveProperties(this.properties))}logTemplate(level,messageTemplate,values){this.logger.logTemplate(level,messageTemplate,values,resolveProperties(this.properties))}emit(record2){let recordWithContext={...record2,properties:resolveProperties({...this.properties,...record2.properties})};this.logger.emit(recordWithContext)}isEnabledFor(level){return this.logger.isEnabledFor(level)}trace(message,...values){if(typeof message==="string")return logStringMessage(this,"trace",message,values[0]);else if(typeof message==="function")this.logLazily("trace",message);else if(!Array.isArray(message))this.log("trace","{*}",message);else this.logTemplate("trace",message,values)}debug(message,...values){if(typeof message==="string")return logStringMessage(this,"debug",message,values[0]);else if(typeof message==="function")this.logLazily("debug",message);else if(!Array.isArray(message))this.log("debug","{*}",message);else this.logTemplate("debug",message,values)}info(message,...values){if(typeof message==="string")return logStringMessage(this,"info",message,values[0]);else if(typeof message==="function")this.logLazily("info",message);else if(!Array.isArray(message))this.log("info","{*}",message);else this.logTemplate("info",message,values)}logError(level,error51,props){if(typeof props!=="function"){this.log(level,"{error.message}",{...props,error:error51});return}if(!this.isEnabledFor(level))return Promise.resolve();let result=props();if(result instanceof Promise)return result.then((resolved)=>{this.log(level,"{error.message}",{...resolved,error:error51})});this.log(level,"{error.message}",{...result,error:error51})}warn(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}warning(message,...values){if(message instanceof Error)return this.logError("warning",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("warning",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"warning",message,values[0]);else if(typeof message==="function")this.logLazily("warning",message);else if(!Array.isArray(message))this.log("warning","{*}",message);else this.logTemplate("warning",message,values)}error(message,...values){if(message instanceof Error)return this.logError("error",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("error",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"error",message,values[0]);else if(typeof message==="function")this.logLazily("error",message);else if(!Array.isArray(message))this.log("error","{*}",message);else this.logTemplate("error",message,values)}fatal(message,...values){if(message instanceof Error)return this.logError("fatal",message,values[0]);else if(typeof message==="string"&&values[0]instanceof Error)this.log("fatal",message,{error:values[0]});else if(typeof message==="string")return logStringMessage(this,"fatal",message,values[0]);else if(typeof message==="function")this.logLazily("fatal",message);else if(!Array.isArray(message))this.log("fatal","{*}",message);else this.logTemplate("fatal",message,values)}},metaLogger;var init_logger2=__esm(()=>{init_context3();init_level();lazySymbol=Symbol.for("logtape.lazy"),throttlingSummaryRecordSymbol=Symbol.for("LogTape.throttlingSummaryRecord");globalRootLoggerSymbol=Symbol.for("logtape.rootLogger");metaLogger=LoggerImpl.getLogger(["logtape","meta"])});var init_mod=__esm(()=>{init_logger2()});class LogTapeLogger{inner;constructor(inner){this.inner=inner}trace(msg,data){if(!muted)this.inner.trace(msg,data??{})}debug(msg,data){if(!muted)this.inner.debug(msg,data??{})}info(msg,data){if(!muted)this.inner.info(msg,data??{})}warn(msg,data){if(!muted)this.inner.warn(msg,data??{})}error(msg,data){if(!muted)this.inner.error(msg,data??{})}fatal(msg,data){if(!muted)this.inner.fatal(msg,data??{})}child(context3){return new LogTapeLogger(this.inner.with(context3))}}function getLogger2(category){return new LogTapeLogger(getLogger([ROOT_CATEGORY,category]))}var ROOT_CATEGORY="app",muted=!1;var init_logger3=__esm(()=>{init_mod()});function getTelemetryConfig(configPartial={}){return{enabled:configPartial.enabled??CONFIG_DEFAULTS.enabled,serviceName:configPartial.serviceName??CONFIG_DEFAULTS.serviceName,environment:configPartial.environment??configPartial.appEnv??CONFIG_DEFAULTS.environment,dbStatementDebug:configPartial.dbStatementDebug??!1}}function getResolvedConfig(){return resolvedConfig}function getTracer(){return import_api.trace.getTracer(TRACER_NAME,TRACER_VERSION)}var import_api,CONFIG_DEFAULTS,TRACER_NAME="@gobing-ai/ts-infra",TRACER_VERSION="0.1.0",resolvedConfig;var init_sdk=__esm(()=>{import_api=__toESM(require_src(),1),CONFIG_DEFAULTS={enabled:!0,serviceName:"ts-libs",environment:"development"};resolvedConfig=getTelemetryConfig()});function isSuppressed(tracer2){return tracer2===void 0&&!getResolvedConfig().enabled}function nonRecordingSpan(){return import_api2.trace.wrapSpanContext(import_api2.INVALID_SPAN_CONTEXT)}async function traceAsync(name,fn,options,tracer2){if(isSuppressed(tracer2))return fn(nonRecordingSpan());return(tracer2??getTracer()).startActiveSpan(name,options??{},async(span)=>{try{return await fn(span)}catch(err){throw span.setStatus({code:2,message:err instanceof Error?err.message:String(err)}),err}finally{span.end()}})}function addSpanEvent(name,attributes){let span=import_api2.trace.getActiveSpan();if(span?.isRecording())span.addEvent(name,attributes)}var import_api2;var init_tracing2=__esm(()=>{init_sdk();import_api2=__toESM(require_src(),1)});function getMeter(){return import_api3.metrics.getMeter(METER_NAME,METER_VERSION)}function noopCounter(){if(!_noopCounter)_noopCounter=import_api3.createNoopMeter().createCounter("noop");return _noopCounter}function noopHistogram(){if(!_noopHistogram)_noopHistogram=import_api3.createNoopMeter().createHistogram("noop");return _noopHistogram}function getOrCreateCounter(key,name,description,unit="{operation}"){if(!getResolvedConfig().enabled)return noopCounter();if(!instruments[key])instruments[key]=getMeter().createCounter(name,{description,unit});return instruments[key]}function getOrCreateHistogram(key,name,description,unit="ms"){if(!getResolvedConfig().enabled)return noopHistogram();if(!instruments[key])instruments[key]=getMeter().createHistogram(name,{description,unit});return instruments[key]}function getHttpClientRequestTotal(){return getOrCreateCounter("httpCliReq","http.client.request.total","Total outbound HTTP requests","{request}")}function getHttpClientRequestDuration(){return getOrCreateHistogram("httpCliDur","http.client.request.duration","Outbound HTTP request duration")}function getHttpClientRequestErrors(){return getOrCreateCounter("httpCliErr","http.client.request.errors","Outbound HTTP errors","{error}")}function getEventbusEmitsTotal(){return getOrCreateCounter("ebEmit","eventbus.emits.total","Total event bus emits","{emit}")}function getEventbusErrorsTotal(){return getOrCreateCounter("ebErr","eventbus.errors.total","Event bus errors","{error}")}var import_api3,METER_NAME="@gobing-ai/ts-infra",METER_VERSION="0.1.0",instruments,_noopCounter,_noopHistogram;var init_metrics=__esm(()=>{init_sdk();import_api3=__toESM(require_src(),1);instruments={}});function busLogger(){if(!_busLogger)_busLogger=getLogger2("event-bus");return _busLogger}class EventBus{syncHandlers=new Map;asyncHandlers=new Map;asyncHandlerIds=new Map;asyncHandlersById=new Map;jobQueue;lifecycleBus;logger;nextAsyncHandlerId=0;constructor(opts){this.jobQueue=opts?.jobQueue??null,this.lifecycleBus=opts?.lifecycleBus??null,this.logger=opts?.logger}on(event,handler,opts){if(opts?.async)this.registerAsync(event,handler,opts.name);else this.registerSync(event,handler)}once(event,handler,opts){let wrapped=(...args)=>{this.off(event,wrapped),handler(...args)};this.on(event,wrapped,opts)}off(event,handler){let syncSet=this.syncHandlers.get(event);if(syncSet){if(syncSet.delete(handler),syncSet.size===0)this.syncHandlers.delete(event)}let asyncSet=this.asyncHandlers.get(event);if(asyncSet){if(asyncSet.delete(handler),asyncSet.size===0)this.asyncHandlers.delete(event);this.releaseAsyncIdIfUnsubscribed(handler)}}removeAllListeners(event){if(event!==void 0){this.syncHandlers.delete(event);let asyncSet=this.asyncHandlers.get(event);if(this.asyncHandlers.delete(event),asyncSet)for(let handler of asyncSet)this.releaseAsyncIdIfUnsubscribed(handler)}else this.syncHandlers.clear(),this.asyncHandlers.clear(),this.asyncHandlerIds.clear(),this.asyncHandlersById.clear()}async emit(event,...args){let eventName=String(event),startMs=performance.now(),syncCount=0,asyncCount=0,errors6=0;this.logger?.debug("event.emit",{event:eventName,syncHandlers:this.syncHandlers.get(event)?.size??0,asyncHandlers:this.asyncHandlers.get(event)?.size??0});let syncSet=this.syncHandlers.get(event);if(syncSet){syncCount=syncSet.size;for(let handler of syncSet)try{handler(...args)}catch(error51){errors6++;let message=error51 instanceof Error?error51.message:String(error51);busLogger().error("sync handler threw",{event:eventName,error:message}),this.publishHandlerError(eventName,"sync",message)}}let asyncSet=this.asyncHandlers.get(event);if(asyncSet&&asyncSet.size>0){let handlers=[...asyncSet];asyncCount=handlers.length;for(let handler of handlers){if(this.jobQueue)try{let jobId=await this.jobQueue.enqueue(eventName,{event:eventName,args,handlerId:this.getAsyncHandlerId(handler)});busLogger().debug("async job enqueued",{event:eventName,jobId,handlerCount:1}),this.publishAsyncEnqueued(eventName,jobId,1);continue}catch(error51){errors6++;let message=error51 instanceof Error?error51.message:String(error51);busLogger().error("async enqueue failed",{event:eventName,error:message}),this.publishHandlerError(eventName,"async",message);continue}else busLogger().warn("async handlers registered but no JobQueue injected",{event:eventName});try{await Promise.resolve().then(()=>handler(...args))}catch(error51){errors6++;let message=error51 instanceof Error?error51.message:String(error51);busLogger().error("async handler threw",{event:eventName,error:message}),this.publishHandlerError(eventName,"async",message)}}}let durationMs=performance.now()-startMs,detail=args.length===1?args[0]:args.length>1?args:void 0;if(getEventbusEmitsTotal().add(1,{event:eventName}),errors6>0)getEventbusErrorsTotal().add(errors6,{event:eventName});if(this.publishEmitDone({event:eventName,syncCount,asyncCount,emitDurationMs:durationMs,errors:errors6,detail,severity:errors6>0?"warning":"info"}),syncCount===0&&asyncCount===0)busLogger().debug("emit with zero handlers",{event:eventName}),this.publishEmitNoop(eventName)}listenerCount(event,mode){let sync=mode!=="async"?this.syncHandlers.get(event)?.size??0:0,async=mode!=="sync"?this.asyncHandlers.get(event)?.size??0:0;return sync+async}eventNames(){let names=new Set;for(let key of this.syncHandlers.keys())names.add(String(key));for(let key of this.asyncHandlers.keys())names.add(String(key));return[...names]}registerSync(event,handler){let set2=this.syncHandlers.get(event);if(!set2)set2=new Set,this.syncHandlers.set(event,set2);set2.add(handler)}registerAsync(event,handler,name){let set2=this.asyncHandlers.get(event);if(!set2)set2=new Set,this.asyncHandlers.set(event,set2);if(set2.add(handler),!this.asyncHandlerIds.has(handler)){let id=name??`handler-${++this.nextAsyncHandlerId}`;if(this.asyncHandlersById.has(id))throw Error(`Duplicate async handler name: "${id}"`);this.asyncHandlerIds.set(handler,id),this.asyncHandlersById.set(id,handler)}}getAsyncHandlerId(handler){let existing=this.asyncHandlerIds.get(handler);if(existing)return existing;let id=`handler-${++this.nextAsyncHandlerId}`;return this.asyncHandlerIds.set(handler,id),this.asyncHandlersById.set(id,handler),id}releaseAsyncIdIfUnsubscribed(handler){for(let set2 of this.asyncHandlers.values())if(set2.has(handler))return;let id=this.asyncHandlerIds.get(handler);if(id!==void 0)this.asyncHandlerIds.delete(handler),this.asyncHandlersById.delete(id)}createJobHandler(){return async(job)=>{let{event,args,handlerId}=job.payload,handler=this.asyncHandlersById.get(handlerId);if(!handler)throw Error(`No async handler registered for id "${handlerId}" (event "${event}")`);await handler(...args)}}publishEmitDone(detail){if(this.lifecycleBus)try{this.lifecycleBus.emit("bus.emit.done",detail)}catch{}}publishEmitNoop(event){if(this.lifecycleBus)try{this.lifecycleBus.emit("bus.emit.noop",{event,severity:"info"})}catch{}}publishHandlerError(event,mode,error51){if(this.lifecycleBus){let detail={event,mode,error:error51,severity:"error"};try{this.lifecycleBus.emit("bus.handler.error",detail)}catch{}}}publishAsyncEnqueued(event,jobId,handlerCount){if(this.lifecycleBus){let detail={event,jobId,handlerCount,severity:"info"};try{this.lifecycleBus.emit("bus.handler.async.enqueued",detail)}catch{}}}}var _busLogger;var init_event_bus=__esm(()=>{init_logger3();init_metrics()});var init_event_bus2=__esm(()=>{init_event_bus()});function truncateBody(text3){return text3.length<=MAX_ERROR_BODY?text3:`${text3.slice(0,MAX_ERROR_BODY)}…[truncated ${text3.length-MAX_ERROR_BODY} chars]`}function sanitizeUrlForObservability(url2){try{let parsed=new URL(url2);return parsed.username="",parsed.password="",parsed.search="",parsed.hash="",parsed.toString()}catch{return url2.split(/[?#]/,1)[0]??""}}function errorForObservability(error51){if(error51 instanceof APIError)return error51.status>0?`HTTP ${error51.status}`:"Request timeout";return error51 instanceof Error?error51.name:"Unknown error"}async function readBodyCapped(response,maxResponseBytes){let reader=response.body?.getReader();if(!reader){let full=await response.text();if(full.length>maxResponseBytes)return{text:full.slice(0,maxResponseBytes),truncated:!0};return{text:full}}let chunks=[],decoder=new TextDecoder,total=0,truncated=!1;while(!0){let{done,value}=await reader.read();if(done)break;let remaining=maxResponseBytes-total;if(value.length>remaining){chunks.push(decoder.decode(value.slice(0,remaining),{stream:!0})),truncated=!0;break}chunks.push(decoder.decode(value,{stream:!0})),total+=value.length}if(truncated)await reader.cancel().catch(()=>{});return reader.releaseLock(),{text:chunks.join(""),...truncated?{truncated}:{}}}class APIClient{baseUrl;defaultHeaders;timeout;fetchFn;events;constructor(config4){this.baseUrl=config4.baseUrl.replace(/\/+$/,""),this.defaultHeaders=config4.defaultHeaders??{},this.timeout=config4.timeout??30000,this.fetchFn=config4.fetch??globalThis.fetch,this.events=config4.events??(config4.lifecycleBus?new EventBus({lifecycleBus:config4.lifecycleBus}):void 0)}buildUrl(path8){return`${this.baseUrl}${path8.startsWith("/")?path8:`/${path8}`}`}emitRequestError(method,url2,error51,status){this.events?.emit("api.request.error",{url:url2,method,...status!==void 0?{status}:{},error:error51,severity:"error"})}async runRequest(method,url2,headers,body,opts,redirect,consume){let observableUrl=sanitizeUrlForObservability(url2),operationName=opts?.operationName??`HTTP ${method} ${observableUrl}`,callerError;try{return await traceAsync(operationName,async(span)=>{span.setAttribute(import_semantic_conventions.ATTR_HTTP_REQUEST_METHOD,method),span.setAttribute(import_semantic_conventions.ATTR_URL_FULL,observableUrl);let controller=new AbortController,timeoutMs=opts?.timeout??this.timeout,timer;if(timeoutMs>0)timer=setTimeout(()=>controller.abort(),timeoutMs);let combinedSignal=opts?.signal?AbortSignal.any([opts.signal,controller.signal]):controller.signal;try{let start=performance.now(),response=await this.fetchFn(url2,{method,headers,body,signal:combinedSignal,...redirect?{redirect}:{}});return span.setAttribute(import_semantic_conventions.ATTR_HTTP_RESPONSE_STATUS_CODE,response.status),getHttpClientRequestTotal().add(1,{"http.request.method":method,"http.response.status_code":response.status}),getHttpClientRequestDuration().record(performance.now()-start,{"http.request.method":method,"http.response.status_code":response.status}),await consume(response,span)}catch(error51){if(error51 instanceof DOMException&&error51.name==="AbortError"&&!opts?.signal?.aborted){getHttpClientRequestErrors().add(1,{"http.request.method":method,"error.type":"Timeout"});let timeoutError=new APIError(0,`Request timed out after ${timeoutMs}ms: ${method} ${observableUrl}`);throw this.emitRequestError(method,observableUrl,errorForObservability(timeoutError)),callerError=timeoutError,Error(errorForObservability(timeoutError))}if(!(error51 instanceof APIError))getHttpClientRequestErrors().add(1,{"http.request.method":method,"error.type":error51 instanceof Error?error51.name:"Unknown"});throw this.emitRequestError(method,observableUrl,errorForObservability(error51),error51 instanceof APIError&&error51.status>0?error51.status:void 0),callerError=error51,Error(errorForObservability(error51))}finally{if(timer)clearTimeout(timer)}},{kind:import_api4.SpanKind.CLIENT})}catch(error51){throw callerError??error51}}async request(method,path8,body,opts){let url2=this.buildUrl(path8),headers={"Content-Type":"application/json",...this.defaultHeaders,...opts?.headers};return this.runRequest(method,url2,headers,body!==void 0?JSON.stringify(body):void 0,opts,void 0,async(response)=>{if(!response.ok){let text3=await response.text();throw getHttpClientRequestErrors().add(1,{"http.request.method":method,"error.type":`HTTP_${response.status}`}),new APIError(response.status,truncateBody(text3))}if((response.headers.get("content-type")??"").includes("application/json"))return await response.json();return await response.text()})}async rawRequest(method,path8,body,opts){let url2=this.buildUrl(path8),headers={...this.defaultHeaders,...opts?.headers},redirect=opts?.redirect??"manual",maxResponseBytes=opts?.maxResponseBytes;return this.runRequest(method,url2,headers,body??void 0,opts,redirect,async(response)=>{if(!response.ok)getHttpClientRequestErrors().add(1,{"http.request.method":method,"error.type":`HTTP_${response.status}`});let text3,truncated;if(maxResponseBytes!==void 0)({text:text3,truncated}=await readBodyCapped(response,maxResponseBytes));else text3=await response.text();let responseHeaders={};return response.headers.forEach((value,key)=>{responseHeaders[key]=value}),{status:response.status,headers:responseHeaders,body:text3,...truncated!==void 0?{truncated}:{}}})}async get(path8,opts){return this.request("GET",path8,void 0,opts)}async post(path8,body,opts){return this.request("POST",path8,body,opts)}async put(path8,body,opts){return this.request("PUT",path8,body,opts)}async patch(path8,body,opts){return this.request("PATCH",path8,body,opts)}async delete(path8,opts){return this.request("DELETE",path8,void 0,opts)}}var import_api4,import_semantic_conventions,APIError,MAX_ERROR_BODY=4096;var init_api_client=__esm(()=>{init_event_bus2();init_metrics();init_tracing2();import_api4=__toESM(require_src(),1),import_semantic_conventions=__toESM(require_src2(),1);APIError=class APIError extends Error{status;body;constructor(status,body){super(`HTTP ${status}: ${body.slice(0,200)}`);this.status=status,this.body=body,this.name="APIError"}}});var init_telemetry=__esm(()=>{init_tracing2()});var init_dist7=__esm(()=>{init_api_client();init_event_bus2();init_logger3();init_telemetry()});function validateAgentId(id){if(!/^[a-z][a-z0-9_-]{1,63}$/.test(id))throw new ValueError(`Invalid agent id "${id}": expected 2-64 chars, lowercase alphanumeric, "_" or "-"`);return id}function assertSafeSessionId(id){if(!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(id)||id.includes(".."))throw new ValueError(`Invalid session id "${id}": expected 1-128 chars (alphanumeric, ".", "_", "-", starting alphanumeric) without path separators or ".."`);return id}async function loadAgentSpecs(configDir,fs2=createNodeFileSystem2()){let entries=(await safeReadDir(configDir,fs2)).filter((entry)=>entry.endsWith(".yaml")||entry.endsWith(".yml")).sort(),specs=await Promise.all(entries.map(async(entry)=>parseAgentSpec(await fs2.readFile(joinPath2(configDir,entry)),entry))),seen=new Set;for(let spec of specs){if(validateAgentId(spec.id),seen.has(spec.id))throw new ValueError(`Duplicate agent id "${spec.id}" in ${configDir}`);seen.add(spec.id)}return specs}async function saveAgentSpec(spec,configDir,fs2=createNodeFileSystem2()){validateAgentId(spec.id),await fs2.ensureDir(configDir),await fs2.writeFile(joinPath2(configDir,`${spec.id}.yaml`),serializeAgentSpec(spec))}async function deleteAgentSpec(id,configDir,fs2=createNodeFileSystem2()){validateAgentId(id),await fs2.deleteFile(joinPath2(configDir,`${id}.yaml`))}async function safeReadDir(configDir,fs2=createNodeFileSystem2()){try{return await fs2.readDir(configDir)}catch(error51){if(error51 instanceof Error&&"code"in error51&&error51.code==="ENOENT")return[];throw error51}}function parseAgentSpec(source,fileName){let parsed=parseYamlObject(source);return{id:requireString(parsed,"id",fileName),name:requireString(parsed,"name",fileName),type:requireString(parsed,"type",fileName),...typeof parsed.executor==="string"&&parsed.executor.trim()!==""?{executor:parsed.executor}:{},workspace:requireString(parsed,"workspace",fileName),purpose:requireString(parsed,"purpose",fileName),tags:requireStringArray(parsed,"tags",fileName),config:requireRecord(parsed,"config",fileName),...typeof parsed.autoStart==="boolean"?{autoStart:parsed.autoStart}:{}}}function serializeAgentSpec(spec){let record2={id:spec.id,name:spec.name,type:spec.type,...spec.executor!==void 0?{executor:spec.executor}:{},workspace:spec.workspace,purpose:spec.purpose,tags:spec.tags,...spec.autoStart!==void 0?{autoStart:spec.autoStart}:{},config:spec.config};return stringifyYamlObject(record2)}function requireString(source,key,fileName){let value=source[key];if(typeof value!=="string"||value.trim()==="")throw new ValueError(`${basenamePath(fileName)}: "${key}" must be a non-empty string`);return value}function requireStringArray(source,key,fileName){let value=source[key];if(!Array.isArray(value)||value.some((entry)=>typeof entry!=="string"))throw new ValueError(`${basenamePath(fileName)}: "${key}" must be a string array`);return value}function requireRecord(source,key,fileName){let value=source[key];if(value===null||typeof value!=="object"||Array.isArray(value))throw new ValueError(`${basenamePath(fileName)}: "${key}" must be an object`);return value}var ValueError;var init_agent_spec=__esm(()=>{init_dist6();ValueError=class ValueError extends Error{constructor(message){super(message);this.name="ValueError"}}});function getAgentSessionCapability(agent){return AGENT_SESSION_CAPABILITY[agent]}function resolveAgentName(input){if(isCanonicalName(input))return input;let canonical=ALIAS_TO_CANONICAL[input];if(canonical!==void 0)return warnDeprecatedOrAlias(input,canonical),canonical;return}function isAgentName(value){return isCanonicalName(value)||value in ALIAS_TO_CANONICAL}function getAgentShim(agent){let canonical=resolveAgentName(agent);if(canonical===void 0)throw Error(`Unsupported agent: ${agent}`);return AGENT_SHIMS[canonical]}function isCanonicalName(value){return Object.hasOwn(AGENT_SHIMS,value)}function warnDeprecatedOrAlias(input,canonical){let shim=AGENT_SHIMS[canonical];if(shim.deprecated!==void 0){let replacement=shim.deprecated.replacedBy??canonical;logger2.warn(`agent '${input}' is deprecated (since ${shim.deprecated.since}); use '${replacement}'`,{input,canonical,replacedBy:replacement})}else logger2.warn(`agent '${input}' is an alias; resolving to canonical '${canonical}'`,{input,canonical})}var piRpcFrame=(input)=>`${JSON.stringify({type:"prompt",message:input})}
317
+ `,claudeStreamJsonFrame=(input)=>`${JSON.stringify({type:"user",message:{role:"user",content:[{type:"text",text:input}]}})}
318
+ `,claudeShim,codexShim,geminiShim,piShim,opencodeShim,antigravityCliShim,openclawShim,hermesShim,ompShim,grokShim,dshShim,fmShim,AGENT_SHIMS,AGENT_SESSION_CAPABILITY,TIER1_PRIORITY,DISPLAY_ORDER,TIER2_AGENTS,logger2,ALIAS_TO_CANONICAL;var init_shims=__esm(()=>{init_dist7();init_dist6();init_agent_spec();claudeShim={name:"claude",command:"claude",tier:1,getHelpCommand:()=>({command:"claude",args:["--help"]}),getVersionCommand:()=>({command:"claude",args:["--version"]}),getPromptCommand:(options)=>{let persistent=options.persistentStdin===!0,args=persistent?["-p","--input-format","stream-json","--permission-mode","acceptEdits","--allowedTools","Write","Edit"]:["-p",options.input??"","--permission-mode","acceptEdits","--allowedTools","Write","Edit"];if(options.sessionId!==void 0||options.sessionDir!==void 0){if(options.sessionId!==void 0)args.push("--resume",options.sessionId)}else if(options.continue===!0)args.push("--continue");if(options.model!==void 0)args.push("--model",options.model);return args.push("--output-format",persistent?"stream-json":options.mode??"text"),{command:"claude",args}},getAuthCommand:()=>({command:"claude",args:["auth","status"]}),persistentStdinProtocol:{frame:claudeStreamJsonFrame}},codexShim={name:"codex",command:"codex",tier:1,getHelpCommand:()=>({command:"codex",args:["--help"]}),getVersionCommand:()=>({command:"codex",args:["--version"]}),getPromptCommand:(options)=>{let hasSession=options.sessionId!==void 0||options.sessionDir!==void 0;if(options.continue===!0&&!hasSession&&options.input!==void 0)throw Error("Codex resume mode does not accept a new prompt");let args=hasSession&&options.sessionId!==void 0?["exec","resume",options.sessionId,options.input??""]:options.continue===!0&&!hasSession?["exec","resume","--last"]:["exec",options.input??""];if(options.model!==void 0)args.push("-m",options.model);if((options.mode??"text")==="json")args.push("--json");return{command:"codex",args}},getAuthCommand:()=>({command:"codex",args:["login","status"]})},geminiShim={name:"gemini",command:"gemini",tier:1,deprecated:{since:"2026-06-20",replacedBy:"antigravity-cli"},getHelpCommand:()=>({command:"gemini",args:["--help"]}),getVersionCommand:()=>({command:"gemini",args:["--version"]}),getPromptCommand:(options)=>{let args=["-p",options.input??""];if(options.continue===!0)args.push("-r","latest");if(options.model!==void 0)args.push("-m",options.model);return args.push("-o",options.mode??"text"),{command:"gemini",args}},getAuthCommand:()=>null},piShim={name:"pi",command:"pi",tier:1,getHelpCommand:()=>({command:"pi",args:["--help"]}),getVersionCommand:()=>({command:"pi",args:["--version"]}),getPromptCommand:(options)=>{let args=[],hasSession=options.sessionId!==void 0||options.sessionDir!==void 0,persistent=options.persistentStdin===!0;if(!hasSession&&!persistent&&options.continue!==!0)args.push("--no-session");if(!persistent)args.push("-p",options.input??"");if(!hasSession&&!persistent&&options.continue===!0)args.push("-c");if(options.sessionDir!==void 0)args.push("--session-dir",options.sessionDir);if(options.sessionId!==void 0)args.push("-r",options.sessionId);if(options.model!==void 0)args.push("--model",options.model);return args.push("--mode",persistent?"rpc":options.mode??"text"),{command:"pi",args}},getAuthCommand:()=>({command:"pi",args:["--list-models"]}),persistentStdinProtocol:{frame:piRpcFrame}},opencodeShim={name:"opencode",command:"opencode",tier:1,getHelpCommand:()=>({command:"opencode",args:["--help"]}),getVersionCommand:()=>({command:"opencode",args:["--version"]}),getPromptCommand:(options)=>{let args=["run",options.input??""];if(options.continue===!0)args.push("-c");if(options.model!==void 0)args.push("-m",options.model);if((options.mode??"text")==="json")args.push("--format","json");return{command:"opencode",args}},getAuthCommand:()=>({command:"opencode",args:["providers"]})},antigravityCliShim={name:"antigravity-cli",command:"agy",tier:1,aliases:["antigravity","agy"],getHelpCommand:()=>({command:"agy",args:["--help"]}),getVersionCommand:()=>({command:"agy",args:["--version"]}),getPromptCommand:(options)=>{let args=["-p",options.input??"","--mode","accept-edits"];if(options.timeoutMs!==void 0)args.push("--print-timeout",`${options.timeoutMs}ms`);if(options.workspace!==void 0)args.push("--add-dir",options.workspace);if(options.sessionId!==void 0||options.sessionDir!==void 0){if(options.sessionId!==void 0)args.push("--conversation",options.sessionId)}else if(options.continue===!0)args.push("--continue");if(options.model!==void 0)args.push("--model",options.model);return{command:"agy",args}},getAuthCommand:()=>null},openclawShim={name:"openclaw",command:"openclaw",tier:2,getHelpCommand:()=>({command:"openclaw",args:["--help"]}),getVersionCommand:()=>({command:"openclaw",args:["--version"]}),getPromptCommand:(options)=>({command:"openclaw",args:["agent","--local","-m",options.input??""]}),getAuthCommand:()=>({command:"openclaw",args:["health"]})},hermesShim={name:"hermes",command:"hermes",tier:1,getHelpCommand:()=>({command:"hermes",args:["chat","--help"]}),getVersionCommand:()=>({command:"hermes",args:["--version"]}),getPromptCommand:(options)=>{let args=["chat","-q",options.input??""];if(options.continue===!0)args.push("--continue");if(options.model!==void 0)args.push("-m",options.model);return{command:"hermes",args}},getAuthCommand:()=>({command:"hermes",args:["doctor"]})},ompShim={name:"omp",command:"omp",tier:1,getHelpCommand:()=>({command:"omp",args:["--help"]}),getVersionCommand:()=>({command:"omp",args:["--version"]}),getPromptCommand:(options)=>{let args=[],hasSession=options.sessionId!==void 0||options.sessionDir!==void 0,persistent=options.persistentStdin===!0;if(!hasSession&&!persistent&&options.continue!==!0)args.push("--no-session");if(!persistent)args.push("-p",options.input??"");if(!hasSession&&!persistent&&options.continue===!0)args.push("-c");if(options.sessionDir!==void 0)args.push("--session-dir",options.sessionDir);if(options.sessionId!==void 0)args.push("-r",options.sessionId);if(options.model!==void 0)args.push("--model",options.model);return args.push("--mode",persistent?"rpc":options.mode??"text"),{command:"omp",args}},getAuthCommand:()=>({command:"omp",args:["--list-models"]}),persistentStdinProtocol:{frame:piRpcFrame}},grokShim={name:"grok",command:"grok",tier:1,getHelpCommand:()=>({command:"grok",args:["--help"]}),getVersionCommand:()=>({command:"grok",args:["--version"]}),getPromptCommand:(options)=>{let args=["-p",options.input??"","--allow","Write","--allow","Edit"];if(options.sessionId!==void 0||options.sessionDir!==void 0){if(options.sessionId!==void 0)args.push("--resume",options.sessionId)}else if(options.continue===!0)args.push("-c");if(options.model!==void 0)args.push("-m",options.model);let format2=(options.mode??"text")==="json"?"json":"plain";return args.push("--output-format",format2),{command:"grok",args}},getAuthCommand:()=>null},dshShim={name:"deepseek",command:"dsh",tier:1,getHelpCommand:()=>({command:"dsh",args:["--help"]}),getVersionCommand:()=>({command:"dsh",args:["--version"]}),getPromptCommand:(options)=>{return{command:"dsh",args:["--profile","headless",options.input??""]}},getAuthCommand:()=>null},fmShim={name:"fm",command:"fm",tier:1,textOnly:!0,getHelpCommand:()=>({command:"fm",args:["--help"]}),getVersionCommand:()=>({command:"what",args:["-q","/usr/bin/fm"]}),getPromptCommand:(options)=>{let args=["respond","--no-stream"];if(options.model!==void 0)args.push("-m",options.model);if(options.sessionId!==void 0){let id=assertSafeSessionId(options.sessionId),file2=options.sessionDir!==void 0?joinPath2(options.sessionDir,`${id}.json`):`${id}.json`;args.push("--resume",file2,"--save-transcript",file2)}else if(options.sessionDir!==void 0)args.push("--save-transcript",joinPath2(options.sessionDir,"fm-session.json"));return args.push("--",options.input??""),{command:"fm",args}},getAuthCommand:()=>({command:"fm",args:["available","--model","system"]})},AGENT_SHIMS={claude:claudeShim,codex:codexShim,gemini:geminiShim,pi:piShim,opencode:opencodeShim,"antigravity-cli":antigravityCliShim,openclaw:openclawShim,hermes:hermesShim,omp:ompShim,grok:grokShim,deepseek:dshShim,fm:fmShim},AGENT_SESSION_CAPABILITY={omp:{supportsResumeById:!0,supportsSessionDir:!0,supportsPersistentStdin:!0,supportsStructuredOutput:!0,verifiedAgainst:"18.2.3"},pi:{supportsResumeById:!0,supportsSessionDir:!0,supportsPersistentStdin:!0,supportsStructuredOutput:!0,verifiedAgainst:"0.87.0"},claude:{supportsResumeById:!0,supportsSessionDir:!1,supportsPersistentStdin:!0,supportsStructuredOutput:!0,verifiedAgainst:"2.1.278",note:"no session-dir flag — sessionDir is ignored (best-effort isolate)"},codex:{supportsResumeById:!0,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!0,verifiedAgainst:"0.155.1",note:"no session-dir flag — sessionDir is ignored; `exec` carries one prompt arg (stdin `-` is one-shot), so no multi-turn stdin"},"antigravity-cli":{supportsResumeById:!0,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!1,verifiedAgainst:"unverified (CLI not installed)",note:"resume-by-id per the shim’s documented --conversation <id> argv; agy absent at verification (2026-09-18) — no session-dir, stdin, or structured-output flags documented"},grok:{supportsResumeById:!0,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!0,verifiedAgainst:"1.0.40",note:"no session-dir flag — sessionDir is ignored (best-effort isolate); no multi-turn stdin input mode"},gemini:{supportsResumeById:!1,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!0,verifiedAgainst:"0.46.0",note:"`-r/--resume` accepts `latest` or a `--list-sessions` index, not a session id; no session-dir flag; no stdin input mode"},opencode:{supportsResumeById:!1,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!0,verifiedAgainst:"1.17.15",note:"CLI `run -s/--session <id>` supports resume-by-id but the shim argv does not wire it yet (follow-up before declaring true); no session-dir flag; no stdin input mode"},openclaw:{supportsResumeById:!1,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!0,verifiedAgainst:"2026.6.11",note:"CLI `agent --session-id <id>` and `--json` are not yet shim-wired (follow-up before declaring resume-by-id true); gateway turns have no persistent stdin"},hermes:{supportsResumeById:!1,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!1,verifiedAgainst:"unverified (CLI not installed)",note:"CLI absent at verification (2026-09-18) — conservative defaults; `chat --continue` resumes the last session only, no session-dir/stdin/structured-output flags documented"},deepseek:{supportsResumeById:!1,supportsSessionDir:!1,supportsPersistentStdin:!1,supportsStructuredOutput:!1,verifiedAgainst:"0.1.5-rc.1",note:"headless app takes only the task positional and -h at 0.1.5-rc.1 — no resume/session/mode flags; fresh-dispatch degrade"},fm:{supportsResumeById:!0,supportsSessionDir:!0,supportsPersistentStdin:!1,supportsStructuredOutput:!1,verifiedAgainst:"FoundationModels-2.0.68.1.402",note:"`fm chat` is interactive only — no multi-turn stdin input mode; structured output needs `--schema <file>`, which the generic PromptOptions cannot carry (ts-decision-fm surface)"}};TIER1_PRIORITY=["pi","omp","codex","antigravity-cli","claude","hermes","opencode","grok","deepseek"],DISPLAY_ORDER=["claude","codex","gemini","pi","omp","opencode","antigravity-cli","openclaw","hermes","grok","deepseek","fm"],TIER2_AGENTS=new Set(["openclaw"]),logger2=getLogger2("ai-runner.shims"),ALIAS_TO_CANONICAL=Object.fromEntries(Object.values(AGENT_SHIMS).flatMap((shim)=>(shim.aliases??[]).map((alias3)=>[alias3,shim.name])))});function buildIdentityPreamble(ctx){let sections=[`You are agent \`${ctx.agentId}\` (${ctx.agentType}) in workspace \`${ctx.workspace}\`.`];if(ctx.taskId!==void 0){let title=ctx.taskTitle===void 0?"":` — ${ctx.taskTitle}`;sections.push(`Your current task: #${ctx.taskId}${title}.`)}if(ctx.purpose!==void 0&&ctx.purpose.trim()!=="")sections.push(`Your purpose: ${ctx.purpose}.`);if(ctx.systemPrompt!==void 0&&ctx.systemPrompt.trim()!=="")sections.push(ctx.systemPrompt);if((ctx.peers?.length??0)>0)sections.push(["Peer agents in this workspace:",...(ctx.peers??[]).map((peer)=>`- \`${peer.id}\` (${peer.type}) — ${peer.purpose??"(no purpose set)"}`)].join(`
319
+ `));if(sections.push(["Communication:",'- Send a message with: spur message send --to <agent-id> "<message>"','- Reply to a message with: spur message reply <msg-id> "<response>"',"- Read pending messages with: spur message inbox"].join(`
320
+ `)),ctx.gitBranch!==void 0)sections.push(["Git context:",`branch: ${ctx.gitBranch}`,`dirty: ${ctx.gitDirty===!0?"true":"false"}`].join(`
321
+ `));if((ctx.guardrails?.length??0)>0)sections.push(["Guardrails:",...(ctx.guardrails??[]).map((guardrail)=>`- ${guardrail}`)].join(`
322
+ `));return`${sections.join(`
323
+
324
+ `)}
325
+ `}async function getGitContext(workspacePath,executor=nodeBunFactory2.createProcessExecutor()){let branch=await runGit(executor,["-C",workspacePath,"branch","--show-current"]);if(branch===null||branch==="")return null;let status=await runGit(executor,["-C",workspacePath,"status","--porcelain"]),dirtyCount=status===null||status===""?0:status.split(`
326
+ `).filter(Boolean).length;return["Git context:",`branch: ${branch}`,`dirty: ${dirtyCount===0?"false":`${dirtyCount} files`}`].join(`
327
+ `)}function getGitContextSync(workspacePath,executor=new NodeSyncProcessExecutor2){let branch=runGitSync(executor,["-C",workspacePath,"branch","--show-current"]);if(branch===null||branch==="")return null;let status=runGitSync(executor,["-C",workspacePath,"status","--porcelain"]),dirtyCount=status===null||status===""?0:status.split(`
328
+ `).filter(Boolean).length;return["Git context:",`branch: ${branch}`,`dirty: ${dirtyCount===0?"false":`${dirtyCount} files`}`].join(`
329
+ `)}async function runGit(executor,args){let result=await executor.run({command:"git",args,rejectOnError:!1,forceBuffered:!0});if(result.exitCode!==0)return null;return result.stdout.trim()}function runGitSync(executor,args){let result=executor.runSync({command:"git",args,rejectOnError:!1,forceBuffered:!0});if(result.exitCode!==0)return null;return result.stdout.trim()}var init_identity=__esm(()=>{init_dist6()});import{createHash as createHash2}from"node:crypto";function classifyQuotaErrorRecord(record2){let bounded=record2.length>MAX_QUOTA_EVIDENCE_BYTES?record2.slice(-MAX_QUOTA_EVIDENCE_BYTES):record2,envelope=tryParseErrorEnvelope(bounded);if(envelope===null)return{quota:!1};let type=typeof envelope.type==="string"?envelope.type.toLowerCase():"",code=typeof envelope.code==="string"?envelope.code.toLowerCase():"";for(let candidate of[type,code])if(QUOTA_CODES.has(candidate))return{quota:!0,reason:candidate};return{quota:!1}}function tryParseErrorEnvelope(record2){let start=record2.indexOf("{"),end=record2.lastIndexOf("}");if(start<0||end<=start)return null;try{let parsed=JSON.parse(record2.slice(start,end+1));if(typeof parsed!=="object"||parsed===null)return null;let error51=parsed.error;if(typeof error51!=="object"||error51===null)return null;return error51}catch{return null}}function normalizeObservedAt(at){return at.toISOString()}function cleanAttribution(attribution){let cleaned={};if(attribution.projectId)cleaned.projectId=attribution.projectId;if(attribution.executor)cleaned.executor=attribution.executor;if(attribution.agent)cleaned.agent=attribution.agent;if(attribution.model)cleaned.model=attribution.model;return Object.keys(cleaned).length>0?cleaned:void 0}function buildQuotaObservation(params){let attribution=params.attribution===void 0?void 0:cleanAttribution(params.attribution),identity4=[params.source,params.reason,attribution?.projectId??"",attribution?.executor??"",attribution?.agent??"",attribution?.model??""].join("\x00");return{observationId:`qo-${createHash2("sha256").update(identity4).digest("hex").slice(0,24)}`,observedAt:normalizeObservedAt(params.observedAt??new Date),evidenceSource:params.source,reason:params.reason,...params.detail!==void 0&&params.detail!==""?{detail:params.detail}:{},...attribution!==void 0?{attribution}:{},...params.correlation!==void 0?{correlation:params.correlation}:{}}}class QuotaObservationProducer{events;emitted=new Set;constructor(events){this.events=events}produce(observation){if(this.events===void 0||this.emitted.has(observation.observationId))return!1;return this.emitted.add(observation.observationId),this.events.emit("agent.quota.exhausted",observation),!0}produceRecovery(recovery){if(this.events===void 0)return!1;return this.events.emit("agent.quota.recovered",recovery),!0}}var MAX_QUOTA_EVIDENCE_BYTES=8192,QUOTA_CODES;var init_quota=__esm(()=>{QUOTA_CODES=new Set(["insufficient_quota","insufficient_credit_balance","quota_exceeded","usage_limit_reached","credits_exhausted","billing_hard_limit_reached"])});function isClaudeStyleSlashCommand(input){return SLASH_COMMAND_RE.test(input)}function translateSlashCommand(agent,input){let match=SLASH_COMMAND_RE.exec(input);if(!match)return input;let[,plugin,command,rest=""]=match,args=rest.trimStart(),suffix=args.length>0?` ${args}`:"";switch(agent){case"claude":return`/${plugin}:${command}${suffix}`;case"codex":return`$${plugin}-${command}${suffix}`;case"pi":case"omp":return`/skill:${plugin}-${command}${suffix}`;default:return`/${plugin}-${command}${suffix}`}}var SLASH_COMMAND_RE;var init_slash_command=__esm(()=>{SLASH_COMMAND_RE=/^\/([a-zA-Z0-9._-]+):([a-zA-Z0-9._-]+)(\s.*)?$/});function buildCorrelationEnv(correlation){return{[AGENT_RUN_ID_ENV]:correlation.runId,[AGENT_EXECUTION_ID_ENV]:correlation.executionId,...correlation.actionId!==void 0?{[AGENT_ACTION_ID_ENV]:correlation.actionId}:{}}}class AiRunner{processExecutor;defaultCwd;defaultTimeout;logger;events;quotaProducer;processEvents;constructor(options={}){let processEvents=options.processEvents??(options.lifecycleBus?new EventBus({lifecycleBus:options.lifecycleBus}):void 0),events=options.events??(options.lifecycleBus?new EventBus({lifecycleBus:options.lifecycleBus}):void 0);this.processExecutor=options.processExecutor??nodeBunFactory2.createProcessExecutor({...processEvents!==void 0?{events:{emit:(event,detail)=>{processEvents?.emit(event,detail)}}}:{},tracer:options.tracer??{traceAsync:async(name,fn)=>await traceAsync(name,(span)=>fn(span))}}),this.defaultCwd=options.defaultCwd,this.defaultTimeout=options.defaultTimeout,this.logger=options.logger??getLogger2("ai-runner"),this.events=events,this.quotaProducer=new QuotaObservationProducer(events),this.processEvents=processEvents}runHelpCommand(agent,options={}){return this.invoke(agent,"help",getAgentShim(agent).getHelpCommand(),options,!0)}runVersionCommand(agent,options={}){return this.invoke(agent,"version",getAgentShim(agent).getVersionCommand(),options,!0)}runPromptCommand(agent,promptOptions,options={}){return this.invoke(agent,"prompt",this.buildPromptCommand(agent,promptOptions,options),options,!1)}runSlashCommand(agent,input,promptOptions,options={}){return this.runPromptCommand(agent,{...promptOptions,input:translateSlashCommand(agent,input)},options)}buildPromptCommand(agent,promptOptions,options={}){return buildAgentCommand(agent,{...promptOptions,timeoutMs:options.timeout??promptOptions.timeoutMs??this.defaultTimeout},{workspace:options.cwd??this.defaultCwd??getProcessCwd2()})}runAuthCommand(agent,options={}){let command=getAgentShim(agent).getAuthCommand();return command===null?null:this.invoke(agent,"auth",command,options,!0)}async invoke(agent,operation,command,options,forceBuffered){let label=`ai-runner.${agent}.${operation}`;this.logger.debug("invoke",{label,command:command.command,args:command.args.join(" ")});let correlationEnv=options.correlation===void 0?void 0:buildCorrelationEnv(options.correlation),result=await this.processExecutor.run({command:command.command,args:command.args,label,rejectOnError:!1,forceBuffered,cwd:options.cwd??this.defaultCwd,timeout:options.timeout??this.defaultTimeout,onSpawn:()=>{this.events?.emit("agent.invoke.start",{agent,operation,label,...options.correlation!==void 0?{correlation:options.correlation}:{},severity:"info"})},...correlationEnv!==void 0?{env:correlationEnv}:{},...options.signal!==void 0?{signal:options.signal}:{},...options.onOutput!==void 0?{onOutput:options.onOutput}:{}});if(result.exitCode!==0)this.logger.error("invoke exited non-zero",{label,exitCode:result.exitCode,signal:result.signal});if(this.events?.emit("agent.invoke.exit",{agent,operation,label,exitCode:result.exitCode,...result.signal!==void 0?{signal:result.signal}:{},durationMs:result.durationMs,...options.correlation!==void 0?{correlation:options.correlation}:{},severity:result.exitCode===0||result.exitCode===null?"info":"error"}),result.exitCode!==null&&result.exitCode!==0){let classification=classifyQuotaErrorRecord(result.stderr);if(classification.quota)this.quotaProducer.produce(buildQuotaObservation({source:"buffered-error",reason:classification.reason,attribution:{agent,...options.quotaContext},...options.correlation!==void 0?{correlation:options.correlation}:{}}))}return{exitCode:result.exitCode,stdout:result.stdout,stderr:result.stderr,...result.signal!==void 0?{signal:result.signal}:{},durationMs:result.durationMs}}}function hasIdentityOptions(options){return options.purpose!==void 0||options.systemPrompt!==void 0||options.taskId!==void 0||options.peers!==void 0&&options.peers.length>0}function buildAgentCommand(agent,promptOptions,context4){return getAgentShim(agent).getPromptCommand({...applyIdentityPreamble(agent,promptOptions,context4),workspace:context4.workspace})}function applyIdentityPreamble(agent,promptOptions,context4){if(!hasIdentityOptions(promptOptions))return promptOptions;let preamble=buildIdentityPreamble({agentId:agent,agentType:agent,workspace:context4.workspace,purpose:promptOptions.purpose,systemPrompt:promptOptions.systemPrompt,taskId:promptOptions.taskId,peers:promptOptions.peers}),input=promptOptions.input===void 0?preamble:`${preamble}
330
+ ${promptOptions.input}`;return{...promptOptions,input}}var AGENT_RUN_ID_ENV="SPUR_RUN_ID",AGENT_EXECUTION_ID_ENV="SPUR_EXECUTION_ID",AGENT_ACTION_ID_ENV="SPUR_ACTION_ID";var init_ai_runner=__esm(()=>{init_dist7();init_dist6();init_shims();init_identity();init_quota();init_slash_command()});class AgentDetector{runner;timeout;constructor(options={}){this.runner=options.runner??new AiRunner,this.timeout=options.timeout??DEFAULT_TIMEOUT_MS}async detectAll(){return await Promise.all(DISPLAY_ORDER.map((agent)=>this.detectOne(agent)))}async detectOne(agent){let canonical=resolveAgentName(agent);if(canonical===void 0)return unavailable(agent,`Unknown agent: ${agent}`);try{return this.parseResult(canonical,await this.runner.runVersionCommand(canonical,{timeout:this.timeout}))}catch(error51){return unavailable(agent,error51 instanceof Error?error51.message:String(error51))}}parseResult(canonical,result){let command=getAgentShim(canonical).command,output2=`${result.stdout}
331
+ ${result.stderr}`.trim(),lower=output2.toLowerCase();if(lower.includes("command not found")||lower.includes("enoent")||lower.includes("not recognized"))return unavailable(canonical,`${command}: command not found`);if(result.signal!==void 0)return unavailable(canonical,`Terminated by signal: ${result.signal}`);if(result.exitCode===null)return unavailable(canonical,"Process did not produce an exit code");if(result.exitCode!==0)return unavailable(canonical,`Non-zero exit code: ${result.exitCode}. stderr: ${result.stderr.slice(0,200)}`);let match=VERSION_PATTERN.exec(output2);if(match?.groups?.version===void 0)return unavailable(canonical,"Could not parse version output");let version3=output2.split(`
332
+ `)[0]?.trim()||match.groups.version;return{name:canonical,installed:!0,version:version3,channels:this.detectChannels(canonical,output2),error:null,...deprecationOf(canonical)}}detectChannels(_agent,_output){return[]}}function unavailable(name,error51){return{name,installed:!1,version:null,channels:[],error:error51,...deprecationOf(name)}}function deprecationOf(name){let canonical=resolveAgentName(name);if(canonical===void 0)return{};let shim=getAgentShim(canonical);if(shim.deprecated===void 0)return{};return{deprecated:!0,replacedBy:shim.deprecated.replacedBy}}var DEFAULT_TIMEOUT_MS=5000,VERSION_PATTERN;var init_agent_detector=__esm(()=>{init_shims();init_ai_runner();VERSION_PATTERN=/(?<version>\d+\.\d+(?:\.\d+)?)/});function isNonEmpty(value){return value!==void 0&&value.trim().length>0}async function isAuthenticated(agent,ctx){let env2=ctx.env??getProcessEnv(),fs2=ctx.fileSystem,timeout=ctx.timeout??DEFAULT_AUTH_TIMEOUT_MS,home=env2.HOME||env2.USERPROFILE||"";if(agent==="gemini")return geminiSettingsContainCredentials(fs2,home);if(agent==="codex")return checkCodexAuth(ctx.runner,fs2,home,timeout);if(agent==="grok")return checkGrokAuth(fs2,home,env2);if((agent==="pi"||agent==="omp")&&(isNonEmpty(env2.GOOGLE_API_KEY)||isNonEmpty(env2.ANTHROPIC_API_KEY)))return"authenticated";return probeAuthOutput(ctx.runner,agent,timeout)}async function checkCodexAuth(runner,fs2,home,timeout){let probeStatus=await probeAuthOutput(runner,"codex",timeout);if(probeStatus!=="unknown")return probeStatus;return await hasNonEmptyFile(fs2,joinPath2(home,".codex","auth.json"))||await hasNonEmptyFile(fs2,joinPath2(home,".codex","auth"))?"authenticated":"unknown"}async function checkGrokAuth(fs2,home,env2){if(isNonEmpty(env2.XAI_API_KEY))return"authenticated";if(await hasNonEmptyFile(fs2,joinPath2(home,".grok","auth.json")))return"authenticated";return"unknown"}async function geminiSettingsContainCredentials(fs2,home){let content;try{content=await fs2.readFile(joinPath2(home,".gemini","settings.json"))}catch{return"unknown"}let settings;try{settings=JSON.parse(content)}catch{return"unauthenticated"}if(typeof settings!=="object"||settings===null)return"unauthenticated";let record2=settings;if(typeof record2.apiKey==="string"&&record2.apiKey.length>0)return"authenticated";if(typeof record2.accessToken==="string"&&record2.accessToken.length>0)return"authenticated";let tokens=record2.tokens;if(tokens!==null&&typeof tokens==="object"){let accessToken=tokens.access_token;if(typeof accessToken==="string"&&accessToken.length>0)return"authenticated"}return"unauthenticated"}async function probeAuthOutput(runner,agent,timeout){let options={timeout},command=runner.runAuthCommand(agent,options),patterns=AUTH_PATTERNS[agent];if(command===null||patterns===void 0)return"unknown";try{let result=await command;if(result.exitCode!==0)return"unauthenticated";let output2=`${result.stdout}
333
+ ${result.stderr}`;if(patterns.negative.test(output2))return"unauthenticated";if(patterns.positive.test(output2))return"authenticated";return"unknown"}catch{return"unknown"}}async function hasNonEmptyFile(fs2,path8){let stat=await fs2.stat(path8);if(stat===null)return!1;return stat.isFile()&&stat.size>0}var DEFAULT_AUTH_TIMEOUT_MS=5000,AUTH_PATTERNS;var init_auth_shims=__esm(()=>{init_dist6();init_shims();AUTH_PATTERNS={claude:{positive:/authenticated|logged[\s_-]*in|"loggedIn"\s*:\s*true/i,negative:/not[\s_-]*authenticated|not[\s_-]*logged[\s_-]*in|logged[\s_-]*out|unauthenticated|"loggedIn"\s*:\s*false/i},codex:{positive:/logged[\s_-]*in|authenticated/i,negative:/not[\s_-]*authenticated|not[\s_-]*logged[\s_-]*in|logged[\s_-]*out|unauthenticated/i},opencode:{positive:/configured|available/i,negative:/not[\s_-]*configured|no[\s_-]+providers?[\s_-]+available|unavailable/i},openclaw:{positive:/(^|[^a-z])ok([^a-z]|$)|healthy/i,negative:/not[\s_-]*healthy|unhealthy|not[\s_-]*ok/i},pi:{positive:/\S/,negative:/not[\s_-]*authenticated|not[\s_-]*logged[\s_-]*in|unauthenticated|no[\s_-]+providers?/i},omp:{positive:/\S/,negative:/not[\s_-]*authenticated|not[\s_-]*logged[\s_-]*in|unauthenticated|no[\s_-]+providers?/i},hermes:{positive:/(^|[^a-z])ok([^a-z]|$)|healthy|configured|ready/i,negative:/not[\s_-]*(configured|healthy|ok)|unhealthy|missing[\s_-]+dependenc|error|failed/i},fm:{positive:/System model available/i,negative:/unavailable/i}}});var DecisionError,DecisionConfigError,DecisionAuthError,DecisionRateLimitError,DecisionTimeoutError,DecisionConnectionError,DecisionRequestError,DecisionBackendError;var init_errors5=__esm(()=>{DecisionError=class DecisionError extends Error{constructor(message,options){super(message,options);this.name=new.target.name}};DecisionConfigError=class DecisionConfigError extends DecisionError{variable;constructor(message,variable,options){super(message,options);this.variable=variable}};DecisionAuthError=class DecisionAuthError extends DecisionError{status;constructor(message,status,options){super(message,options);this.status=status}};DecisionRateLimitError=class DecisionRateLimitError extends DecisionError{status;retryAfterMs;constructor(message,status,retryAfterMs,options){super(message,options);this.status=status,this.retryAfterMs=retryAfterMs}};DecisionTimeoutError=class DecisionTimeoutError extends DecisionError{timeoutMs;constructor(message,timeoutMs,options){super(message,options);this.timeoutMs=timeoutMs}};DecisionConnectionError=class DecisionConnectionError extends DecisionError{constructor(message,options){super(message,options)}};DecisionRequestError=class DecisionRequestError extends DecisionError{status;bodySummary;constructor(message,status,bodySummary,options){super(message,options);this.status=status,this.bodySummary=bodySummary}};DecisionBackendError=class DecisionBackendError extends DecisionError{status;constructor(message,status,options){super(message,options);this.status=status}}});var q;var init_types3=__esm(()=>{q={choice:(prompt,labels)=>({kind:"choice",prompt,labels}),score:(prompt,rubric)=>({kind:"score",prompt,rubric}),noul:(prompt,outcomes)=>({kind:"noul",prompt,...outcomes})}});var requestIdFrom=(headers)=>headers.get("x-typesafe-request-id")??void 0,APIPromise,ENV,readEnv=(name)=>{if(typeof process>"u"||!process.env)return;return process.env[name]?.trim()||void 0},fromCodeOrEnv=(fromCode,envVar)=>fromCode??readEnv(envVar),range=(from,to)=>Array.from({length:to-from},(_,i2)=>from+i2),DEFAULT_RETRY_POLICY,isRetryableStatus=(status,policy=DEFAULT_RETRY_POLICY)=>policy.httpStatuses.has(status),parseRetryAfter=(headers,now=Date.now())=>{let ms=Number(headers.get("retry-after-ms"));if(headers.has("retry-after-ms")&&Number.isFinite(ms)&&ms>=0)return ms;let raw=headers.get("retry-after");if(raw===null)return;let seconds=Number(raw);if(Number.isFinite(seconds))return seconds>=0?seconds*1000:void 0;let date6=Date.parse(raw);if(!Number.isNaN(date6))return Math.max(0,date6-now)},retryDelayMs=(attempt,headers,policy=DEFAULT_RETRY_POLICY,random=Math.random)=>{if(policy.respectRetryAfter&&headers!==void 0){let retryAfter=parseRetryAfter(headers);if(retryAfter!==void 0&&retryAfter<=policy.maxRetryAfterMs)return retryAfter}let exponential=Math.min(policy.backoffInitialMs*2**attempt,policy.backoffMaxMs);return Math.round(exponential*(1-random()*policy.backoffJitter))},sleep=(ms,signal)=>new Promise((resolve,reject)=>{if(signal?.aborted)return reject(signal.reason);let onAbort=()=>{clearTimeout(timer),reject(signal?.reason)},timer=setTimeout(()=>{signal?.removeEventListener("abort",onAbort),resolve()},ms);signal?.addEventListener("abort",onAbort,{once:!0})}),TypeSafeError,isRecord2=(value)=>typeof value==="object"&&value!==null,extractMessage=(body)=>{if(typeof body==="string")return body||void 0;if(!isRecord2(body))return;let{error:error51,message,detail}=body;if(typeof error51==="string")return error51;if(isRecord2(error51)&&typeof error51.message==="string")return error51.message;if(typeof message==="string")return message;if(typeof detail==="string")return detail;if(isRecord2(detail)&&typeof detail.message==="string")return detail.message;if(Array.isArray(detail))return describeValidationErrors(detail)},describeValidationErrors=(errors6)=>{let parts=errors6.flatMap((e)=>{if(!isRecord2(e)||typeof e.msg!=="string")return[];let loc=Array.isArray(e.loc)?e.loc.filter((x)=>x!=="body").join("."):"";return[loc?`${loc}: ${e.msg}`:e.msg]});return parts.length>0?parts.join("; "):void 0},MAX_RAW_BODY_IN_MESSAGE=200,APIError2,BadRequestError,AuthenticationError,PermissionDeniedError,NotFoundError,UnprocessableEntityError,RateLimitError,InternalServerError,APIConnectionError,APITimeoutError,APIUserAbortError,LOG_LEVELS,DEFAULT_LOG_LEVEL="warn",isLogLevel2=(value)=>LOG_LEVELS.includes(value),parseLogLevel2=(value,source)=>{if(isLogLevel2(value))return value;throw new TypeSafeError(`Invalid log level "${value}" from ${source}. Expected one of: ${LOG_LEVELS.join(", ")}.`)},PREFIX="[typesafe-sdk]",consoleLogger,RANK,drop=()=>{},withLevel=(sink,level)=>{let enabled=(at)=>RANK[at]>=RANK[level];return{debug:enabled("debug")?(message,...args)=>sink.debug(message,...args):drop,info:enabled("info")?(message,...args)=>sink.info(message,...args):drop,warn:enabled("warn")?(message,...args)=>sink.warn(message,...args):drop,error:enabled("error")?(message,...args)=>sink.error(message,...args):drop}},KEY_HEADERS,OPAQUE_HEADERS,redactKey=(value)=>{let[scheme,secret]=value.includes(" ")?value.split(/\s+/,2):[void 0,value],tail=secret&&secret.length>8?secret.slice(-4):"";return`${scheme?`${scheme} `:""}***${tail}`},redact=(name,value)=>{let lower=name.toLowerCase();if(KEY_HEADERS.has(lower))return redactKey(value);if(OPAQUE_HEADERS.has(lower))return"***";return value},redactHeaders=(headers)=>Object.fromEntries(Object.entries(headers).map(([name,value])=>[name,redact(name,value)])),noul=(instructions=null,criteria)=>({type:"noul",instructions,criteria}),score=(instructions,criteria)=>{if(!Array.isArray(criteria))throw new TypeSafeError("Score criteria must be a list of descriptions indexed by score from zero, not a map.");return{type:"score",instructions,criteria}},choice=(instructions,criteria)=>{if(Array.isArray(criteria))throw new TypeSafeError("Choice criteria must be a map of labels to descriptions, not a list.");return{type:"choice",instructions,criteria}},validateQuestions=(questions)=>{if(Object.keys(questions).length===0)throw new TypeSafeError("At least one question is required.");for(let[name,question]of Object.entries(questions)){if(question.type!=="score")continue;if(!Array.isArray(question.criteria))throw new TypeSafeError(`Score question "${name}" has criteria that are not a list; score criteria must be a list of descriptions indexed by score from zero.`);if(question.criteria.length<2)throw new TypeSafeError(`Score question "${name}" has ${question.criteria.length} criteria; at least two scores are required.`)}},Models=class{#transport;constructor(transport){this.#transport=transport}list(options={}){return this.#transport.request("GET","/v1/models",options).map(unwrapModels)}},unwrapModels=(wire)=>{if(Array.isArray(wire?.models))return wire.models;throw new TypeSafeError("Unexpected response shape from GET /v1/models; expected { models: [...] }.")},g,isBrowser=()=>typeof g.window<"u"&&typeof g.window.document<"u"&&typeof g.navigator<"u",describeRuntime=()=>{let platform2=g.process?.platform&&g.process?.arch?` (${g.process.platform}; ${g.process.arch})`:"";if(g.Bun?.version)return`bun/${g.Bun.version}${platform2}`;if(g.Deno?.version?.deno)return`deno/${g.Deno.version.deno}${platform2}`;if(g.EdgeRuntime!==void 0)return"vercel-edge";if(g.navigator?.userAgent==="Cloudflare-Workers")return"cloudflare-workers";if(g.process?.versions?.node)return`node/${g.process.versions.node}${platform2}`;if(isBrowser())return"browser";return"unknown"},VERSION="0.6.0",missingApiKey=()=>{throw new TypeSafeError(`No API key was provided. Pass \`apiKey\` to the TypeSafeClient constructor or set the ${ENV.apiKey} environment variable.`)},missingFetch=()=>{throw new TypeSafeError("No global `fetch` is available in this runtime. Pass a `fetch` implementation to the TypeSafeClient constructor.")},refuseBrowser=()=>{throw new TypeSafeError("TypeSafeClient is running in a browser, which would expose your API key to anyone using the page. Call the API from a server instead, or pass `dangerouslyAllowBrowser: true` if you understand the risk.")},defaultFetch=(input,init)=>globalThis.fetch(input,init),assertNonNegativeInteger=(name,value)=>{if(!Number.isInteger(value)||value<0)throw new TypeSafeError(`\`${name}\` must be a non-negative integer, got ${String(value)}.`);return value},assertPositiveMs=(name,value)=>{if(!Number.isFinite(value)||value<=0)throw new TypeSafeError(`\`${name}\` must be a positive number of milliseconds, got ${String(value)}.`);return value},assertNonNegativeMs=(name,value)=>{if(!Number.isFinite(value)||value<0)throw new TypeSafeError(`\`${name}\` must be a non-negative number of milliseconds, got ${String(value)}.`);return value},assertFraction=(name,value)=>{if(!Number.isFinite(value)||value<0||value>1)throw new TypeSafeError(`\`${name}\` must be between 0 and 1, got ${String(value)}.`);return value},assertStatusSet=(name,statuses)=>{for(let status of statuses)if(!Number.isInteger(status)||status<100||status>999)throw new TypeSafeError(`\`${name}\` must contain HTTP status codes, got ${String(status)}.`);return statuses},resolveRetryPolicy=(base2,overrides)=>{let o3=overrides??{};return{maxRetries:o3.maxRetries===void 0?base2.maxRetries:assertNonNegativeInteger("retry.maxRetries",o3.maxRetries),backoffInitialMs:o3.backoffInitialMs===void 0?base2.backoffInitialMs:assertNonNegativeMs("retry.backoffInitialMs",o3.backoffInitialMs),backoffMaxMs:o3.backoffMaxMs===void 0?base2.backoffMaxMs:assertNonNegativeMs("retry.backoffMaxMs",o3.backoffMaxMs),backoffJitter:o3.backoffJitter===void 0?base2.backoffJitter:assertFraction("retry.backoffJitter",o3.backoffJitter),httpStatuses:new Set(o3.httpStatuses===void 0?base2.httpStatuses:assertStatusSet("retry.httpStatuses",o3.httpStatuses)),respectRetryAfter:o3.respectRetryAfter??base2.respectRetryAfter,maxRetryAfterMs:o3.maxRetryAfterMs===void 0?base2.maxRetryAfterMs:assertNonNegativeMs("retry.maxRetryAfterMs",o3.maxRetryAfterMs),apiConnectionError:o3.apiConnectionError??base2.apiConnectionError,apiTimeoutError:o3.apiTimeoutError??base2.apiTimeoutError}},isRetryableError=(err,policy)=>{if(err instanceof APITimeoutError)return policy.apiTimeoutError;if(err instanceof APIConnectionError)return policy.apiConnectionError;return!1},resolveLogLevel=(fromCode)=>{if(fromCode!==void 0)return parseLogLevel2(fromCode,"the `logLevel` option");let fromEnv=readEnv(ENV.logLevel);if(fromEnv!==void 0)return parseLogLevel2(fromEnv,ENV.logLevel);return DEFAULT_LOG_LEVEL},stripTrailingSlashes=(url2)=>url2.replace(/\/+$/,""),mergeHeaders=(...sources)=>{let entries=new Map;for(let source of sources)for(let[name,value]of Object.entries(source))if(value===void 0)entries.delete(name.toLowerCase());else entries.set(name.toLowerCase(),[name,value]);return Object.fromEntries(entries.values())},bufferResponse=async(response,signal)=>{let reader=response.clone().body?.getReader();if(!reader)return;let cancel=()=>{reader.cancel(signal.reason).catch(()=>{}),response.body?.cancel(signal.reason).catch(()=>{})};signal.addEventListener("abort",cancel,{once:!0});try{if(signal.aborted)cancel();signal.throwIfAborted();while(!(await reader.read()).done)signal.throwIfAborted();signal.throwIfAborted()}finally{signal.removeEventListener("abort",cancel),reader.releaseLock()}},RUNTIME,TypeSafeClient=class{#apiKey;baseURL;defaultModel;logLevel;logger;retry;timeout;defaultHeaders;fetch;models;#requestCount=0;constructor(config4={}){if(isBrowser()&&!config4.dangerouslyAllowBrowser)refuseBrowser();if(this.#apiKey=fromCodeOrEnv(config4.apiKey,ENV.apiKey)??missingApiKey(),this.baseURL=stripTrailingSlashes(fromCodeOrEnv(config4.baseURL,ENV.baseURL)??"https://api.typesafe.ai"),this.defaultModel=fromCodeOrEnv(config4.defaultModel,ENV.defaultModel)??"jev-latest",this.logLevel=resolveLogLevel(config4.logLevel),this.logger=withLevel(config4.logger??consoleLogger,this.logLevel),this.retry=resolveRetryPolicy(DEFAULT_RETRY_POLICY,config4.retry),this.timeout=assertPositiveMs("timeout",config4.timeout??1e4),this.defaultHeaders={...config4.defaultHeaders},config4.fetch===void 0&&typeof globalThis.fetch!=="function")missingFetch();this.fetch=config4.fetch??defaultFetch;let transport={request:(method,path8,options)=>this.#request(method,path8,options),defaultModel:this.defaultModel};this.models=new Models(transport)}systemOne(request,options={}){validateQuestions(request.questions);let body={...request,model:request.model??this.defaultModel};return this.#request("POST","/v1/systemone",{...options,body})}#request(method,path8,options={}){let resolved={method,path:path8,body:options.body,headers:mergeHeaders(this.defaultHeaders,options.headers??{}),signal:options.signal,timeout:options.timeout===void 0?this.timeout:assertPositiveMs("timeout",options.timeout),retry:resolveRetryPolicy(this.retry,options.retry)},tag=`#${++this.#requestCount} ${method} ${path8}`;return new APIPromise(this.fetchWithRetries(tag,resolved),async(res)=>{let parsed=await parseBody(res);return this.logger.debug(`${tag} <- body`,parsed),parsed})}async fetchWithRetries(tag,req){let url2=`${this.baseURL}${req.path}`,headers=mergeHeaders(req.headers,{Authorization:`Bearer ${this.#apiKey}`,Accept:"application/json","User-Agent":`typesafe-sdk/${VERSION}`,"X-TypeSafe-SDK":`typesafe-sdk/${VERSION}`,"X-TypeSafe-Runtime":RUNTIME,"Content-Type":req.body===void 0?void 0:"application/json","X-TypeSafe-Retry-Count":void 0}),body=req.body===void 0?void 0:JSON.stringify(req.body);for(let attempt=0;;attempt++){let retriesLeft=req.retry.maxRetries-attempt,attemptHeaders=attempt===0?headers:{...headers,"X-TypeSafe-Retry-Count":String(attempt)};this.logger.debug(`${tag} -> ${url2}`,{headers:redactHeaders(attemptHeaders),body:req.body});let started=Date.now(),res;try{res=await this.attempt(tag,url2,{method:req.method,headers:attemptHeaders,body},req)}catch(err){if(err instanceof APIUserAbortError||retriesLeft<=0)throw err;if(!isRetryableError(err,req.retry))throw err;await this.backOff(tag,attempt,retriesLeft,err.message,void 0,req);continue}let requestId=requestIdFrom(res.headers);if(this.logger.info(`${tag} <- ${res.status} in ${Date.now()-started}ms${requestId?` (request ${requestId})`:""}`),res.ok)return res;let errorBody=await parseBody(res);this.logger.debug(`${tag} <- error body`,errorBody);let error51=APIError2.fromResponse(res.status,errorBody,res.headers);if(retriesLeft<=0||!isRetryableStatus(res.status,req.retry))throw error51;await this.backOff(tag,attempt,retriesLeft,`${res.status}`,res.headers,req)}}async attempt(tag,url2,init,{signal,timeout}){let controller=new AbortController,abortFromCaller=()=>controller.abort(signal?.reason);if(signal?.aborted)abortFromCaller();signal?.addEventListener("abort",abortFromCaller,{once:!0});let timedOut=!1,timer=setTimeout(()=>{timedOut=!0,controller.abort()},timeout),started=Date.now(),elapsed=()=>`${Date.now()-started}ms`;try{let response=await this.fetch(url2,{...init,signal:controller.signal});return await bufferResponse(response,controller.signal),response}catch(err){if(signal?.aborted)throw this.logger.info(`${tag} aborted by caller after ${elapsed()}`),new APIUserAbortError(void 0,{cause:err});if(timedOut)throw this.logger.info(`${tag} timed out after ${elapsed()}`),new APITimeoutError(timeout,{cause:err});throw this.logger.info(`${tag} connection error after ${elapsed()}`,err),new APIConnectionError(err instanceof Error?`Connection error: ${err.message}`:void 0,{cause:err})}finally{clearTimeout(timer),signal?.removeEventListener("abort",abortFromCaller)}}async backOff(tag,attempt,retriesLeft,reason,headers,{retry,signal}){let delay=retryDelayMs(attempt,headers,retry),nth=attempt+1,total=attempt+retriesLeft;this.logger.info(`${tag} retrying in ${delay}ms (retry ${nth}/${total}) after ${reason}`);try{await sleep(delay,signal)}catch(err){throw this.logger.info(`${tag} aborted by caller while waiting to retry`),new APIUserAbortError(void 0,{cause:err})}}},parseBody=async(res)=>{let text3=await res.text();if(text3.length===0)return;if((res.headers.get("content-type")??"").includes("application/json"))try{return JSON.parse(text3)}catch{return text3}try{return JSON.parse(text3)}catch{return text3}};var init_dist8=__esm(()=>{APIPromise=class APIPromise2 extends Promise{#responsePromise;#parseResponse;#parsed;constructor(responsePromise,parseResponse){super((resolve)=>resolve(void 0));this.#responsePromise=responsePromise,this.#parseResponse=parseResponse}asResponse(){return this.#responsePromise}async withResponse(){let[data,response]=await Promise.all([this.#parse(),this.#responsePromise]);return{data,response,requestId:requestIdFrom(response.headers)}}map(fn){return new APIPromise2(this.#responsePromise,()=>this.#parse().then(fn))}#parse(){return this.#parsed??=this.#responsePromise.then(this.#parseResponse),this.#parsed}then(onfulfilled,onrejected){return this.#parse().then(onfulfilled,onrejected)}catch(onrejected){return this.#parse().catch(onrejected)}finally(onfinally){return this.#parse().finally(onfinally)}},ENV={apiKey:"TYPESAFE_API_KEY",baseURL:"TYPESAFE_BASE_URL",defaultModel:"TYPESAFE_DEFAULT_MODEL",logLevel:"TYPESAFE_LOG_LEVEL"},DEFAULT_RETRY_POLICY={maxRetries:2,backoffInitialMs:500,backoffMaxMs:5000,backoffJitter:0.25,httpStatuses:new Set([408,429,...range(500,600)]),respectRetryAfter:!0,maxRetryAfterMs:60000,apiConnectionError:!0,apiTimeoutError:!0};DEFAULT_RETRY_POLICY.maxRetries;TypeSafeError=class extends Error{constructor(message,options){super(message,options);this.name=new.target.name}},APIError2=class APIError3 extends TypeSafeError{status;headers;body;requestId;constructor(status,body,headers,message){super(message??APIError3.describe(status,body));this.status=status,this.body=body,this.headers=headers,this.requestId=requestIdFrom(headers)}static describe(status,body){let detail=extractMessage(body);if(detail)return`${status} ${detail}`;if(body===void 0)return`${status} status code (no body)`;let raw=typeof body==="string"?body:JSON.stringify(body);return`${status} ${raw.length>MAX_RAW_BODY_IN_MESSAGE?`${raw.slice(0,MAX_RAW_BODY_IN_MESSAGE)}…`:raw}`}static fromResponse(status,body,headers){if(status===400)return new BadRequestError(status,body,headers);if(status===401)return new AuthenticationError(status,body,headers);if(status===403)return new PermissionDeniedError(status,body,headers);if(status===404)return new NotFoundError(status,body,headers);if(status===422)return new UnprocessableEntityError(status,body,headers);if(status===429)return new RateLimitError(status,body,headers);if(status>=500)return new InternalServerError(status,body,headers);return new APIError3(status,body,headers)}},BadRequestError=class extends APIError2{},AuthenticationError=class extends APIError2{},PermissionDeniedError=class extends APIError2{},NotFoundError=class extends APIError2{},UnprocessableEntityError=class extends APIError2{},RateLimitError=class extends APIError2{retryAfterMs=parseRetryAfter(this.headers)},InternalServerError=class extends APIError2{},APIConnectionError=class extends TypeSafeError{constructor(message="Connection error.",options){super(message,options)}},APITimeoutError=class extends APIConnectionError{timeoutMs;constructor(timeoutMs,options){super(`Request timed out after ${timeoutMs}ms.`,options);this.timeoutMs=timeoutMs}},APIUserAbortError=class extends TypeSafeError{constructor(message="Request was aborted.",options){super(message,options)}},LOG_LEVELS=["debug","info","warn","error","off"],consoleLogger={debug:(message,...args)=>console.debug(`${PREFIX} ${message}`,...args),info:(message,...args)=>console.info(`${PREFIX} ${message}`,...args),warn:(message,...args)=>console.warn(`${PREFIX} ${message}`,...args),error:(message,...args)=>console.error(`${PREFIX} ${message}`,...args)},RANK={debug:0,info:1,warn:2,error:3,off:4},KEY_HEADERS=new Set(["authorization","proxy-authorization","x-api-key"]),OPAQUE_HEADERS=new Set(["cookie","set-cookie"]),g=globalThis,RUNTIME=describeRuntime()});function record2(value){return value!==null&&typeof value==="object"&&!Array.isArray(value)}function json2(value,ancestors=new Set){if(value===null||typeof value==="string"||typeof value==="boolean")return!0;if(typeof value==="number")return Number.isFinite(value);if(typeof value!=="object"||ancestors.has(value))return!1;ancestors.add(value);let valid=Object.values(value).every((entry)=>json2(entry,ancestors));return ancestors.delete(value),valid}function desc2(value){return(value===null||typeof value==="string"||typeof value==="object")&&json2(value)}function validateQuestions2(questions){let fail=(name)=>{throw new DecisionRequestError(`Invalid decision question: ${name}`,void 0,void 0)};if(!record2(questions)||Object.keys(questions).length===0)fail("expected a nonempty question map");for(let[name,question]of Object.entries(questions)){if(!record2(question))fail(name);if(question.prompt!==void 0&&!desc2(question.prompt))fail(name);switch(question.kind){case"choice":if(!record2(question.labels)||Object.keys(question.labels).length===0||!Object.values(question.labels).every(desc2))fail(name);break;case"score":if(!Array.isArray(question.rubric)||question.rubric.length<2||!Array.from(question.rubric).every(desc2))fail(name);break;case"noul":if(question.yes!==void 0&&!desc2(question.yes)||question.no!==void 0&&!desc2(question.no))fail(name);break;default:fail(name)}}}function bounded(value,max=1){return typeof value==="number"&&Number.isFinite(value)&&value>=0&&value<=max}function keysMatch(value,keys){return record2(value)&&Object.keys(value).length===keys.length&&keys.every((key)=>Object.hasOwn(value,key))}function validateAnswers(questions,answers){let fail=(name)=>{throw new DecisionBackendError(`Invalid decision response: ${name}`,void 0)};if(!keysMatch(answers,Object.keys(questions)))fail("answer names do not match questions");for(let[name,question]of Object.entries(questions)){let answer=answers[name];if(!record2(answer)||answer.kind!==question.kind)fail(name);if(question.kind==="noul"){if(!bounded(answer.probability))fail(name);continue}let keys=question.kind==="choice"?Object.keys(question.labels):Array.from(question.rubric.keys(),String);if(!bounded(answer.confidence)||!keysMatch(answer.probabilities,keys)||!Object.values(answer.probabilities).every((p)=>bounded(p)))fail(name);if(question.kind==="choice"){if(typeof answer.label!=="string"||!Object.hasOwn(question.labels,answer.label))fail(name)}else if(!bounded(answer.score,question.rubric.length-1)||!keysMatch(answer.legend,keys)||!Object.values(answer.legend).every(desc2))fail(name)}}var init_validation2=__esm(()=>{init_errors5()});function createTypesafeDriver(config4){let client;try{client=new TypeSafeClient({apiKey:config4.apiKey,baseURL:config4.baseURL,defaultModel:config4.model,timeout:config4.timeoutMs,retry:config4.maxRetries===void 0?void 0:{maxRetries:config4.maxRetries},fetch:config4.fetch})}catch(err){translateError(err)}return{name:"typesafe",async ask({state,questions,model}){validateQuestions2(questions);let result;try{let sdkQuestions=Object.fromEntries(Object.entries(questions).map(([name,question])=>[name,toSdkQuestion(question)]));result=await client.systemOne({state,questions:sdkQuestions,model})}catch(err){translateError(err)}if(!result?.answers||typeof result.answers!=="object"||Array.isArray(result.answers))throw new DecisionBackendError("Invalid decision response: expected answers map",void 0);let answers=Object.fromEntries(Object.entries(result.answers).map(([name,answer])=>[name,fromSdkAnswer(answer)]));return validateAnswers(questions,answers),answers}}}function toSdkQuestion(question){switch(question.kind){case"choice":return choice(question.prompt??null,question.labels);case"score":return score(question.prompt??null,question.rubric);case"noul":{let outcomes=question.yes===void 0&&question.no===void 0?void 0:{true:question.yes,false:question.no};return noul(question.prompt??null,outcomes)}}}function fromSdkAnswer(answer){if(!answer||typeof answer!=="object")throw new DecisionBackendError("Invalid decision response: expected answer object",void 0);switch(answer.type){case"choice":return{kind:"choice",label:answer.choice,confidence:answer.confidence,probabilities:answer.probabilities};case"score":return{kind:"score",score:answer.score,confidence:answer.confidence,legend:answer.legend,probabilities:answer.probabilities};case"noul":return{kind:"noul",probability:answer.noul};default:throw new DecisionBackendError("Invalid decision response: unknown answer kind",void 0)}}function translateError(err){let message=err instanceof Error?err.message:String(err);if(err instanceof RateLimitError)throw new DecisionRateLimitError(message,err.status,err.retryAfterMs,{cause:err});if(err instanceof AuthenticationError||err instanceof PermissionDeniedError)throw new DecisionAuthError(message,err.status,{cause:err});if(err instanceof APITimeoutError)throw new DecisionTimeoutError(message,err.timeoutMs,{cause:err});if(err instanceof APIConnectionError)throw new DecisionConnectionError(message,{cause:err});if(err instanceof APIError2){if(err.status<500){let raw=typeof err.body==="string"?err.body:JSON.stringify(err.body)??"";throw new DecisionRequestError(message,err.status,raw.slice(0,200)||void 0,{cause:err})}throw new DecisionBackendError(message,err.status,{cause:err})}if(err instanceof TypeSafeError)throw new DecisionRequestError(message,void 0,message,{cause:err});throw err}var init_typesafe_driver=__esm(()=>{init_dist8();init_errors5();init_validation2()});function resolveApiKey(options){let env2=options.env??getProcessEnv(),apiKey=options.apiKey??env2.TYPESAFE_API_KEY;if(!apiKey)throw new DecisionConfigError("Missing TYPESAFE_API_KEY — set it in the environment or pass options.apiKey.","TYPESAFE_API_KEY");return apiKey}async function resolveLayaDriver(options,importModule=(specifier)=>import(specifier)){let mod;try{mod=await importModule(LAYA_DRIVER_PACKAGE)}catch(cause){throw new DecisionConfigError(`The 'laya-local' backend requires '${LAYA_DRIVER_PACKAGE}' to be installed; install it with 'bun add ${LAYA_DRIVER_PACKAGE}'`,"LAYA_BACKEND",{cause})}if(typeof mod.createLayaDriver!=="function")throw new DecisionConfigError(`Module '${LAYA_DRIVER_PACKAGE}' does not export createLayaDriver`,"LAYA_BACKEND");return mod.createLayaDriver(options)}async function resolveFmDriver(options,importModule=(specifier)=>import(specifier)){let mod;try{mod=await importModule(FM_DRIVER_PACKAGE)}catch(cause){throw new DecisionConfigError(`The 'fm-local' backend requires '${FM_DRIVER_PACKAGE}' to be installed; install it with 'bun add ${FM_DRIVER_PACKAGE}'`,"FM_BACKEND",{cause})}if(typeof mod.createFmDriver!=="function")throw new DecisionConfigError(`Module '${FM_DRIVER_PACKAGE}' does not export createFmDriver`,"FM_BACKEND");return mod.createFmDriver(options)}function createDecisionMaker(options={}){let resolvedDriver,getDriver=async()=>{if(options.driver)return options.driver;if(resolvedDriver)return resolvedDriver;let backend=options.backend??"typesafe";if(backend==="typesafe")return resolvedDriver=createTypesafeDriver({apiKey:resolveApiKey(options),model:options.model,baseURL:options.baseURL,timeoutMs:options.timeoutMs,maxRetries:options.maxRetries,fetch:options.fetch}),resolvedDriver;if(backend==="laya-local")return resolvedDriver=await resolveLayaDriver(options),resolvedDriver;if(backend==="fm-local")return resolvedDriver=await resolveFmDriver(options),resolvedDriver;throw new DecisionConfigError(`Unknown decision backend '${backend}'`,"backend")},ask=async(req)=>{let driver3=await getDriver();validateQuestions2(req.questions);let answers=await driver3.ask(req);return validateAnswers(req.questions,answers),answers};return{driver:options.driver?.name??options.backend??"typesafe",ask,choice:(state,prompt,labels)=>ask({state,questions:{question:q.choice(prompt,labels)}}).then((a2)=>a2.question),score:(state,prompt,rubric)=>ask({state,questions:{question:q.score(prompt,rubric)}}).then((a2)=>a2.question),noul:(state,prompt,outcomes)=>ask({state,questions:{question:q.noul(prompt,outcomes)}}).then((a2)=>a2.question)}}var LAYA_DRIVER_PACKAGE="@gobing-ai/ts-laya-mlx",FM_DRIVER_PACKAGE="@gobing-ai/ts-decision-fm";var init_decision_maker=__esm(()=>{init_dist6();init_errors5();init_types3();init_typesafe_driver();init_validation2()});class ModelHealthProbeRegistry{probes=new Map;register(providerPrefix,probe){this.probes.set(providerPrefix,probe)}resolve(model){let slashIndex=model.indexOf("/"),provider=slashIndex>=0?model.slice(0,slashIndex):model;return this.probes.get(provider)??null}}function extractProvider(model){let slashIndex=model.indexOf("/");return slashIndex>=0?model.slice(0,slashIndex):model}function extractModelName(model){let slashIndex=model.indexOf("/");return slashIndex>=0?model.slice(slashIndex+1):model}class OmpModelProbe{apiClientConfig;constructor(options){this.apiClientConfig=options?.apiClientConfig}async probe(provider,model,config4){let checkedAt=new Date().toISOString(),providerConfig=OMP_PROVIDERS[provider];if(!providerConfig)return{status:"unknown",detail:`unknown omp provider '${provider}'`,checkedAt};let baseUrl=config4.endpoint??providerConfig.baseUrl;try{let response=await this.issueRequest(providerConfig.apiType,baseUrl,model,config4.apiKey,config4.timeoutMs);return this.interpretResponse(response,checkedAt)}catch(error51){if(error51 instanceof APIError&&error51.status===0)return{status:"unknown",detail:"probe timed out",checkedAt};return{status:"unknown",detail:error51 instanceof Error?error51.message:"probe failed",checkedAt}}}async issueRequest(apiType,baseUrl,model,apiKey,timeoutMs){let client=new APIClient({...this.apiClientConfig,baseUrl});if(apiType==="anthropic-messages")return await client.rawRequest("POST","/messages",JSON.stringify({model,messages:[{role:"user",content:"ping"}],max_tokens:1}),{headers:{"Content-Type":"application/json","x-api-key":apiKey,"anthropic-version":"2023-06-01"},timeout:timeoutMs,operationName:"model-health-probe anthropic-messages"});return await client.rawRequest("POST","/chat/completions",JSON.stringify({model,messages:[{role:"user",content:"ping"}],max_tokens:1}),{headers:{"Content-Type":"application/json",Authorization:`Bearer ${apiKey}`},timeout:timeoutMs,operationName:"model-health-probe openai-completions"})}interpretResponse(response,checkedAt){if(response.status===200)return{status:"available",checkedAt};if(response.status===429){let body=this.parseBody(response.body),errorType=body?.error?.type??body?.error?.code??"",errorMessage3=body?.error?.message??"";if(errorType.includes("quota")||errorType.includes("insufficient_quota")||errorType.includes("insufficient"))return{status:"quota_exhausted",detail:errorMessage3||"quota exceeded",checkedAt};return{status:"rate_limited",detail:errorMessage3||"rate limited",checkedAt}}return{status:"unavailable",detail:`HTTP ${response.status}`,checkedAt}}parseBody(body){try{return JSON.parse(body)}catch{return null}}}function observeQuotaHealthResult(result,options){if(result.status!=="quota_exhausted")return null;let producer=options.producer??new QuotaObservationProducer(options.events),observation=buildQuotaObservation({source:"health-probe",reason:"provider_quota_exhausted",observedAt:new Date(result.checkedAt),...result.detail!==void 0?{detail:result.detail}:{},attribution:options.attribution,...options.correlation!==void 0?{correlation:options.correlation}:{}});return producer.produce(observation),observation}var OMP_PROVIDERS,DEFAULT_PROBE_TIMEOUT_MS=1e4;var init_model_health_probe=__esm(()=>{init_dist7();init_quota();OMP_PROVIDERS={zai:{baseUrl:"https://api.z.ai/api/coding/paas/v4",apiType:"openai-completions"},volc:{baseUrl:"https://ark.cn-beijing.volces.com/api/coding",apiType:"anthropic-messages"},minimax:{baseUrl:"https://api.minimaxi.com/v1",apiType:"openai-completions"},deepseek:{baseUrl:"https://api.deepseek.com",apiType:"openai-completions"}}});class DoctorRunner{detector;runner;timeout;env;fs;logger;executors;probeRegistry;probeTimeoutMs;probeAuth;constructor(options={}){this.runner=options.runner??new AiRunner,this.detector=options.agentDetector??new AgentDetector({runner:this.runner}),this.timeout=options.timeout??DEFAULT_TIMEOUT_MS2,this.env=options.env??getProcessEnv(),this.fs=options.fileSystem??createNodeFileSystem2(),this.logger=options.logger??getLogger2("doctor"),this.executors=options.executors??[],this.probeTimeoutMs=options.probeTimeoutMs??DEFAULT_PROBE_TIMEOUT_MS,this.probeRegistry=options.probeRegistry??this.createDefaultRegistry(),this.probeAuth=options.probeAuth??!0}createDefaultRegistry(){let registry2=new ModelHealthProbeRegistry,probe=new OmpModelProbe;for(let provider of["zai","volc","minimax","deepseek"])registry2.register(provider,probe);return registry2}async runAll(){if(this.executors.length>0)return await this.runAllWithExecutors();let detected=await this.detector.detectAll(),byName=new Map(detected.map((agent)=>[agent.name,agent]));return await Promise.all(DISPLAY_ORDER.map((agent)=>this.buildResult(byName.get(agent)??{name:agent,installed:!1,version:null,channels:[],error:`Unknown agent: ${agent}`})))}async runAllWithExecutors(){let detected=await this.detector.detectAll(),byName=new Map(detected.map((agent)=>[agent.name,agent])),results=[];for(let executor of this.executors){let canonical=resolveAgentName(executor.agent),agentDetected=byName.get(executor.agent)??(canonical!==void 0?byName.get(canonical):void 0)??{name:executor.agent,installed:!1,version:null,channels:[],error:`Unknown agent: ${executor.agent}`},result=await this.buildResult(agentDetected);result.agent=executor.name,result.modelStatus=executor.model?await this.probeModel(executor.model):null,results.push(result)}return results}async runOne(agent){if(this.executors.length>0){let executor=this.executors.find((e)=>e.name===agent);if(executor){let detected=await this.detector.detectOne(executor.agent),result=await this.buildResult(detected);return result.agent=executor.name,result.modelStatus=executor.model?await this.probeModel(executor.model):null,result}}return this.buildResult(await this.detector.detectOne(agent))}async probeModel(model){let provider=extractProvider(model),probe=this.probeRegistry.resolve(model);if(!probe)return{status:"unknown",detail:`no probe registered for provider '${provider}'`,checkedAt:new Date().toISOString()};let apiKey=this.resolveApiKey(provider);if(!apiKey)return{status:"unknown",detail:`API key not found for provider '${provider}'`,checkedAt:new Date().toISOString()};return await probe.probe(provider,model,{apiKey,timeoutMs:this.probeTimeoutMs})}resolveApiKey(provider){return this.env[`${provider.toUpperCase()}_API_KEY`]}async buildResult(detected){let canonical=resolveAgentName(detected.name)??null,tier=canonical!==null&&TIER2_AGENTS.has(canonical)?2:1;this.logger.debug("checking agent",{agent:detected.name,installed:detected.installed,tier});let authenticated=!this.probeAuth?"unknown":detected.installed&&canonical!==null?await isAuthenticated(canonical,{runner:this.runner,env:this.env,fileSystem:this.fs,timeout:this.timeout}):"unauthenticated";return{agent:detected.name,installed:detected.installed,version:detected.version,authenticated,usable:detected.installed&&detected.version!==null,tier,channels:detected.channels,deprecated:detected.deprecated,replacedBy:detected.replacedBy,error:detected.error}}}var DEFAULT_TIMEOUT_MS2=5000;var init_doctor_runner=__esm(()=>{init_dist7();init_dist6();init_agent_detector();init_auth_shims();init_shims();init_ai_runner();init_model_health_probe()});var init_events=()=>{};function formatMessage(msg){return`[task from=${msg.fromId??"operator"} id=${msg.id}] ${msg.body}`}import{Buffer as Buffer5}from"node:buffer";class TeamAgentProcess{agentId;command;env;cwd;processExecutor;logger;subprocess=null;status="stopped";exitCode=null;subscribers=new Set;stderrTail="";quotaProducer;spec;quotaContext;stdinFramer;constructor(options){this.agentId=options.spec.id,this.command=options.command,this.env=options.env,this.cwd=options.cwd??options.spec.workspace,this.processExecutor=options.processExecutor??nodeBunFactory2.createProcessExecutor(),this.logger=options.logger??getLogger2("team-agent"),this.quotaProducer=new QuotaObservationProducer(options.events),this.spec=options.spec,this.quotaContext=options.quotaContext,this.stdinFramer=options.stdinFramer}async start(){if(this.status==="running")return;let[command,...args]=this.command;if(command===void 0)throw Error(`${this.agentId}: command must not be empty`);if(this.subprocess=this.processExecutor.runStreaming({command,args,label:`team-agent.${this.agentId}`,...this.cwd!==void 0?{cwd:this.cwd}:{},...this.env!==void 0?{env:this.env}:{}}),this.status="running",this.exitCode=null,this.stderrTail="",this.subprocess.stdout!==null)this.pipe(this.subprocess.stdout,!1);if(this.subprocess.stderr!==null)this.pipe(this.subprocess.stderr,!0);this.subprocess.exited.then((code)=>{if(this.exitCode=code,this.status==="running"){if(this.status=code===0?"stopped":"errored",this.status==="errored")this.classifyQuota()}})}async stop(){let process11=this.subprocess;if(process11===null){this.status="stopped";return}try{process11.endStdin()}catch(error51){this.warn("stdin close failed","stop.endStdin",error51)}process11.kill("SIGTERM");let timeout=new Promise((resolve)=>{setTimeout(()=>resolve("timeout"),5000)}),result=await Promise.race([process11.exited,timeout]);if(result==="timeout")process11.kill("SIGKILL"),this.exitCode=await process11.exited;else this.exitCode=result;this.status="stopped",this.subprocess=null}async send(message){if(this.status!=="running"||this.subprocess===null)return this.warn("send skipped because process is not running","send.notRunning"),{ok:!1};try{return this.subprocess.writeStdin(this.stdinFramer!==void 0?this.stdinFramer(message):`${message}
334
+ `),{ok:!0}}catch(error51){return this.warn("stdin write failed","send.writeStdin",error51),this.status="errored",{ok:!1}}}subscribe(callback){return this.subscribers.add(callback),()=>{this.subscribers.delete(callback)}}getStatus(){return this.status}getPid(){return this.subprocess?.pid??null}getExitCode(){return this.exitCode}async pipe(stream,isStderr){let reader=stream.getReader();try{while(!0){let chunk=await reader.read();if(chunk.done)break;let buffer=Buffer5.from(chunk.value);if(isStderr)this.retainStderrTail(buffer.toString("utf8"));for(let subscriber of this.subscribers)subscriber(buffer)}}catch(error51){if(this.warn("stream pipe failed","pipe",error51),this.status==="running")this.status="errored"}finally{reader.releaseLock()}}retainStderrTail(text3){this.stderrTail=(this.stderrTail+text3).slice(-MAX_QUOTA_EVIDENCE_BYTES)}classifyQuota(){let classification=classifyQuotaErrorRecord(this.stderrTail);if(!classification.quota)return;this.quotaProducer.produce(buildQuotaObservation({source:"streaming-error",reason:classification.reason,attribution:{...this.quotaContext,agent:this.quotaContext?.agent??this.spec.id,executor:this.quotaContext?.executor??this.spec.executor??this.spec.type}}))}warn(message,op,error51){this.logger.warn(message,{agentId:this.agentId,op,...error51!==void 0?{error:error51 instanceof Error?error51.message:String(error51)}:{}})}}var init_team_agent_process=__esm(()=>{init_dist7();init_dist6();init_quota()});class TeamOrchestrator{configDir;inbox;specs=[];running=new Map;processFactory;events;constructor(configDir,inbox,options={}){this.configDir=configDir,this.inbox=inbox,this.processFactory=options.processFactory??((processOptions)=>new TeamAgentProcess(processOptions)),this.events=options.events??(options.lifecycleBus?new EventBus({lifecycleBus:options.lifecycleBus}):new EventBus)}async loadSpecs(){return this.specs=await loadAgentSpecs(this.configDir),[...this.specs]}async getSpec(id){if(this.specs.length===0)await this.loadSpecs();return this.specs.find((spec)=>spec.id===id)}async startAgent(id){let spec=await this.requireSpec(id),agentType=this.requireAgentName(spec.type),peers=(await this.getPeerSpecs(spec.workspace,spec.id)).map((peer)=>({id:peer.id,type:peer.type,purpose:peer.purpose})),command=buildAgentCommand(agentType,{purpose:spec.purpose,systemPrompt:typeof spec.config.systemPrompt==="string"?spec.config.systemPrompt:void 0,peers},{workspace:spec.workspace}),process11=this.processFactory({spec,command:[command.command,...command.args],cwd:spec.workspace});return await process11.start(),this.running.set(id,process11),await this.injectPendingMessages(process11),this.events.emit("agent.started",{agentId:spec.id,agentType:spec.type,pid:process11.getPid(),severity:"info"}),process11}async stopAgent(id){let process11=this.running.get(id);if(process11===void 0)return;await process11.stop(),this.running.delete(id);let exitCode=process11.getExitCode();this.events.emit("agent.stopped",{agentId:id,exitCode,severity:exitCode===0||exitCode===null?"info":"warning"})}async restartAgent(id){return await this.stopAgent(id),this.startAgent(id)}async sendMessage(fromId,toId,body,inReplyTo){let msgId=await this.inbox.enqueue(fromId,toId,body,inReplyTo),process11=this.running.get(toId),ok=process11!==void 0?await this.flushInbox(process11,"live stdin injection failed"):!1;return this.events.emit("agent.message.sent",{agentId:toId,ok,severity:ok?"info":"warning"}),msgId}getRunningAgents(){return new Map(this.running)}async getAgentStatus(id){let process11=this.running.get(id);if(process11===void 0)return await this.getSpec(id)===void 0?"unknown":"stopped";return process11.getStatus()}async getPeerSpecs(workspace,excludeId){if(this.specs.length===0)await this.loadSpecs();return this.specs.filter((spec)=>spec.workspace===workspace&&spec.id!==excludeId)}async stopAll(){await Promise.all([...this.running.keys()].map((id)=>this.stopAgent(id)))}on(event,listener){return this.events.on(event,listener),()=>this.events.off(event,listener)}async requireSpec(id){let spec=await this.getSpec(id);if(spec===void 0)throw Error(`Agent spec not found: ${id}`);return spec}requireAgentName(type){let canonical=resolveAgentName(type);if(canonical===void 0)throw Error(`Unsupported agent type: ${type}`);return canonical}async injectPendingMessages(process11){return this.flushInbox(process11,"startup stdin injection failed")}async flushInbox(process11,failLabel){let ok=!0;for(;;){let messages=await this.inbox.drainPending(process11.agentId);if(messages.length===0)break;for(let message of messages)if((await process11.send(formatMessage(message))).ok)await this.inbox.markDelivered(message.id);else ok=!1,await this.inbox.markFailed(message.id,failLabel);if(messages.length<100)break}return ok}}var init_team_orchestrator=__esm(()=>{init_dist7();init_agent_spec();init_shims();init_ai_runner();init_team_agent_process()});var exports_dist3={};__export(exports_dist3,{validateAgentId:()=>validateAgentId,translateSlashCommand:()=>translateSlashCommand,saveAgentSpec:()=>saveAgentSpec,resolveLayaDriver:()=>resolveLayaDriver,resolveFmDriver:()=>resolveFmDriver,resolveAgentName:()=>resolveAgentName,q:()=>q,observeQuotaHealthResult:()=>observeQuotaHealthResult,normalizeObservedAt:()=>normalizeObservedAt,loadAgentSpecs:()=>loadAgentSpecs,isClaudeStyleSlashCommand:()=>isClaudeStyleSlashCommand,isAuthenticated:()=>isAuthenticated,isAgentName:()=>isAgentName,getGitContextSync:()=>getGitContextSync,getGitContext:()=>getGitContext,getAgentShim:()=>getAgentShim,getAgentSessionCapability:()=>getAgentSessionCapability,formatMessage:()=>formatMessage,extractProvider:()=>extractProvider,extractModelName:()=>extractModelName,deleteAgentSpec:()=>deleteAgentSpec,createDecisionMaker:()=>createDecisionMaker,classifyQuotaErrorRecord:()=>classifyQuotaErrorRecord,buildQuotaObservation:()=>buildQuotaObservation,buildIdentityPreamble:()=>buildIdentityPreamble,buildAgentCommand:()=>buildAgentCommand,assertSafeSessionId:()=>assertSafeSessionId,ValueError:()=>ValueError,TeamOrchestrator:()=>TeamOrchestrator,TeamAgentProcess:()=>TeamAgentProcess,TIER2_AGENTS:()=>TIER2_AGENTS,TIER1_PRIORITY:()=>TIER1_PRIORITY,QuotaObservationProducer:()=>QuotaObservationProducer,OmpModelProbe:()=>OmpModelProbe,ModelHealthProbeRegistry:()=>ModelHealthProbeRegistry,MAX_QUOTA_EVIDENCE_BYTES:()=>MAX_QUOTA_EVIDENCE_BYTES,DoctorRunner:()=>DoctorRunner,DecisionTimeoutError:()=>DecisionTimeoutError,DecisionRequestError:()=>DecisionRequestError,DecisionRateLimitError:()=>DecisionRateLimitError,DecisionError:()=>DecisionError,DecisionConnectionError:()=>DecisionConnectionError,DecisionConfigError:()=>DecisionConfigError,DecisionBackendError:()=>DecisionBackendError,DecisionAuthError:()=>DecisionAuthError,DISPLAY_ORDER:()=>DISPLAY_ORDER,DEFAULT_PROBE_TIMEOUT_MS:()=>DEFAULT_PROBE_TIMEOUT_MS,AiRunner:()=>AiRunner,AgentDetector:()=>AgentDetector,AGENT_SHIMS:()=>AGENT_SHIMS,AGENT_RUN_ID_ENV:()=>AGENT_RUN_ID_ENV,AGENT_EXECUTION_ID_ENV:()=>AGENT_EXECUTION_ID_ENV,AGENT_ACTION_ID_ENV:()=>AGENT_ACTION_ID_ENV});var init_dist9=__esm(()=>{init_agent_detector();init_agent_spec();init_auth_shims();init_shims();init_ai_runner();init_decision_maker();init_errors5();init_types3();init_doctor_runner();init_events();init_identity();init_model_health_probe();init_quota();init_slash_command();init_team_agent_process();init_team_orchestrator()});import{join as join6,resolve as resolve4}from"node:path";var ARTIFACT_ARRAY_CLASSIFICATION={byTool:"ranked",bySession:"ranked",topStepsByTokens:"ranked",topStepsByDuration:"ranked",topSteps:"ranked",bottlenecks:"ranked",coverage:"set",daily:"set",loops:"set",warnings:"set",pairings:"set",ladderSnapshot:"set",stepSupport:"set",phases:"set",tools:"set",skills:"set",sources:"set",models:"set"},RANKED_ARTIFACT_KEYS=new Set(Object.entries(ARTIFACT_ARRAY_CLASSIFICATION).filter(([,kind])=>kind==="ranked").map(([key])=>key));var RESOLVED_TOOL_NAME_SQL=`CASE
315
335
  WHEN tc.effective_tool_name IS NOT NULL AND tc.effective_tool_name != '' AND tc.effective_tool_name != 'unknown'
316
336
  THEN tc.effective_tool_name
317
337
  ELSE CASE
@@ -387,7 +407,12 @@ END`;var MEASURE_COLS="messages, tool_calls, skill_calls, fresh_input_tokens, ca
387
407
  ''
388
408
  )
389
409
  ELSE ''
390
- END`;var POST_WATERMARK_TABLES=[...KEYED_ROLLUP_TABLES,...GLOBAL_RANKED_ROLLUP_TABLES,"history_daily_stats","history_board_source_daily"];var HISTORY_IMPORT_SCHEMA_VERSION="0.5.5",HISTORY_IMPORT_SCHEMA_SQL=`
410
+ END`;var POST_WATERMARK_TABLES=[...KEYED_ROLLUP_TABLES,...GLOBAL_RANKED_ROLLUP_TABLES,"history_daily_stats","history_board_source_daily"];init_zod();import{createHash}from"node:crypto";function stableJson(value){if(Array.isArray(value))return`[${value.map((entry)=>entry===void 0?"null":stableJson(entry)).join(",")}]`;if(value!==null&&typeof value==="object"){let record2=value;return`{${Object.keys(record2).filter((key)=>record2[key]!==void 0).sort().map((key)=>`${JSON.stringify(key)}:${stableJson(record2[key])}`).join(",")}}`}return JSON.stringify(value)??"null"}function sha256(value){return createHash("sha256").update(stableJson(value)).digest("hex")}var MESSAGE_MAPPER_KEYS=["_codexUsageCarrier","session_id","seq","turn_index","role","record_type","disposition","ts","duration_ms","model","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","cost_usd","content_text","cwd","provenance","run_id","task_wbs","request_id"],TOOL_CALL_MAPPER_KEYS=["_messageSplitIndex","session_id","seq","tool_name","call_id","args_digest","args_raw","status","started_at","completed_at","duration_ms","result_bytes","error_text"],SKILL_CALL_MAPPER_KEYS=["_messageSplitIndex","session_id","seq","skill_name","invocation_kind","skill_path","args_raw","args_digest","call_id","status","started_at","completed_at","duration_ms"];function identityFieldMap(keys){let map2={};for(let key of keys)map2[key]=key;return map2}var HARNESS_SKILL_PACKAGES=new Set(["sp","rd3"]);function canonicalizeSkillName(raw){let name=raw.trim();if(name.startsWith("/")||name.startsWith("$"))name=name.slice(1);if(name.startsWith("skill:"))name=name.slice(6);let canonical=name.match(/^([a-z][a-z0-9]*):([a-z0-9-]+)$/);if(canonical!==null&&HARNESS_SKILL_PACKAGES.has(canonical[1]??""))return name;let dialect=name.match(/^([a-z][a-z0-9]*)-([a-z0-9-]+)$/);if(dialect!==null&&HARNESS_SKILL_PACKAGES.has(dialect[1]??""))return`${dialect[1]}:${dialect[2]}`;return name}function extractSkillCalls(raw,context,identity){switch(context?.source){case"claude":return detectClaudeSkillCalls(raw,identity);case"pi":return detectPiSkillCalls(raw,identity);case"omp":return detectOmpSkillCalls(raw,identity);case"codex":return detectCodexSkillCalls(raw,identity);case"agy":return detectAgySkillCalls(raw,identity);case"gemini":return detectGeminiSkillCalls(raw,identity);case"grok":return detectGrokSkillCalls(raw,identity);default:return[]}}function skillCallEntry(record2){return{targetTable:"history_skill_call",record:record2}}function skillRecord(identity,skillName,invocationKind,extra={}){return{_messageSplitIndex:identity.messageSplitIndex,session_id:identity.sessionId,seq:identity.seq,skill_name:canonicalizeSkillName(skillName),invocation_kind:invocationKind,skill_path:null,args_raw:null,args_digest:null,call_id:null,status:"ok",started_at:null,completed_at:null,duration_ms:null,...extra}}function skillNameFromPath(path){let normalized=path.replace(/\\/g,"/"),bySkillsSegment=normalized.match(/\/skills\/([^/]+)\/SKILL\.md$/i);if(bySkillsSegment!==null)return bySkillsSegment[1]??"";let stem=normalized.slice(0,normalized.length-9);return stem.split("/").pop()??stem}function detectClaudeSkillCalls(raw,identity){let contentBlocks=raw.content??o(raw.message).content;if(!Array.isArray(contentBlocks))return[];let rows=[];for(let block of contentBlocks){if(typeof block!=="object"||block===null)continue;let b=block;if(b.type!=="tool_use"||b.name!=="Skill")continue;let input=b.input??{},skill=s(input.skill);if(skill===void 0)continue;rows.push(skillRecord(identity,skill,s(o(b.caller).type)==="direct"?"user":"model",{args_raw:maybeArgsRaw("claude","Skill",input)??null,args_digest:argsDigest(input),call_id:s(b.id)??null}))}return rows}var PI_SKILL_WRAPPER=/<skill\s+name="([^"]+)"(?:\s+location="([^"]*)")?\s*>/g;function detectPiSkillCalls(raw,identity){let msg=raw.message;if(piRole(msg?.role??raw.role??raw.recordType??raw.type)!=="user")return[];let text=extractContentText(msg?.content??raw.content);if(text===void 0)return[];let rows=[];for(let match of text.matchAll(PI_SKILL_WRAPPER))rows.push(skillRecord(identity,match[1]??"","user",{skill_path:match[2]||null}));return rows}function detectOmpSkillCalls(raw,identity){let msg=raw.message;if(mapRole(msg?.role??raw.type??raw.role)!=="assistant")return[];let contentBlocks=msg?.content??raw.content;if(!Array.isArray(contentBlocks))return[];let rows=[];for(let block of contentBlocks){let call=normalizeOmpToolCall(block);if(call===null||call.name!=="Skill")continue;let input=call.input??call.arguments,skill=s(input?.skill);if(skill===void 0)continue;rows.push(skillRecord(identity,skill,"model",{args_raw:maybeArgsRaw("omp","Skill",input)??null,args_digest:argsDigest(input),call_id:s(call.id)??null}))}return rows}var CODEX_SKILL_BLOCK=/<skill>\s*<name>([^<]+)<\/name>\s*<path>([^<]+)<\/path>\s*<\/skill>/g;function detectCodexSkillCalls(raw,identity){let payload=raw.payload??raw,recordType=String(raw.type??""),payloadType=String(payload.type??""),role;if(recordType==="response_item")role=payloadType==="message"?mapRole(payload.role):payloadType==="agent_message"?"assistant":"meta";else if(recordType==="user"||recordType==="assistant")role=mapRole(recordType);else if(recordType==="message")role=mapRole(raw.role??payload.role);else return[];if(role!=="user")return[];let text=extractContentText(payload.content??raw.content)??s(payload.text,raw.text);if(text===void 0)return[];let rows=[];for(let match of text.matchAll(CODEX_SKILL_BLOCK))rows.push(skillRecord(identity,match[1]??"","user",{skill_path:match[2]??null}));return rows}function detectAgySkillCalls(raw,identity){if(String(raw.type??"")!=="PLANNER_RESPONSE"||!Array.isArray(raw.tool_calls))return[];let rows=[];for(let tc of raw.tool_calls){if(s(tc.name,tc.tool_name)!=="view_file")continue;let args=tc.args??tc.arguments??{};if(args.toolAction!=="Viewing skill file")continue;let path=s(args.AbsolutePath,args.absolute_path);if(path===void 0||!path.replace(/\\/g,"/").endsWith("/SKILL.md"))continue;let skillName=s(args.toolSummary)?.match(/SKILL\.md for (.+)$/)?.[1]??skillNameFromPath(path);rows.push(skillRecord(identity,skillName,"model",{skill_path:path,args_raw:maybeArgsRaw("agy","view_file",args)??null,args_digest:argsDigest(args)}))}return rows}var GEMINI_L0_PREFIX=/^\s*\/((?:sp|rd3)-[a-z0-9-]+)/;function detectGeminiSkillCalls(raw,identity){if(String(raw.type??"")!=="user")return[];let content=geminiContent(raw);if(content===null)return[];let match=content.match(GEMINI_L0_PREFIX);if(match===null)return[];return[skillRecord(identity,match[1]??"","user")]}function detectGrokSkillCalls(raw,identity){let n=normalizeGrokRecord(raw);if(n.recordType!=="tool_call"||n.toolName!=="read_file")return[];let meta3=n.body._meta??raw._meta??{};if(o(meta3["x.ai/tool"]).namespace!=="grok_build")return[];let targetFile=s(o(n.toolArgs).target_file);if(targetFile===void 0||!targetFile.replace(/\\/g,"/").endsWith("/SKILL.md"))return[];return[skillRecord(identity,skillNameFromPath(targetFile),"model",{skill_path:targetFile,args_raw:maybeArgsRaw("grok","read_file",n.toolArgs)??null,args_digest:argsDigest(n.toolArgs),started_at:n.ts??null})]}function argsDigest(args){let redacted=redactArgs(args);return sha256(redacted)}function redactArgs(args){if(typeof args==="string"){if(args.length>80)return"[REDACTED:long]";if(/[A-Za-z0-9+/]{40,}=*|[A-Za-z0-9_-]{20,}/.test(args))return"[REDACTED:secret]";return args}if(Array.isArray(args))return args.map(redactArgs);if(args!==null&&typeof args==="object"){let result={};for(let[key,value]of Object.entries(args))result[key]=redactArgs(value);return result}return args}var BASH_COMMAND_MAX_CHARS=8192,GENERIC_ARGS_MAX_CHARS=8192;function bashCommandOf(args){if(args===null||typeof args!=="object")return;let rec=args,command=rec.command??rec.CommandLine??rec.cmd??rec.script;if(typeof command==="string")return command;if(Array.isArray(command))return command.map(String).join(" ");return}var BULKY_PAYLOAD_KEYS=new Set(["content","codecontent","replacementcontent","targetcontent","filedata","buffer","blob","image","imagebase64"]);function normalizeKey(key){return key.toLowerCase().replace(/[^a-z0-9]/g,"")}function isShellTool(toolName){return/^(?:bash|shell|cmd|command|exec|execcommand|executecommand|runcommand|shellcommand|runshellcommand)$/.test(normalizeKey(toolName))}function sanitizeValue(value){if(typeof value==="string")return value.length>1000?`${value.slice(0,1000)}[truncated ${value.length} chars]`:value;if(Array.isArray(value))return value.map(sanitizeValue);if(value!==null&&typeof value==="object"){let out={};for(let[key,entry]of Object.entries(value))out[key]=typeof entry==="string"&&entry.length>120&&BULKY_PAYLOAD_KEYS.has(normalizeKey(key))?`[omitted ${entry.length} chars]`:sanitizeValue(entry);return out}return value}function serializeBounded(value){let serialized=JSON.stringify(sanitizeValue(value));if(serialized.length<=GENERIC_ARGS_MAX_CHARS)return serialized;let preview=serialized;for(;;){let wrapper=JSON.stringify({_truncated:!0,omittedChars:serialized.length-preview.length,preview});if(wrapper.length<=GENERIC_ARGS_MAX_CHARS)return wrapper;preview=preview.slice(0,preview.length-(wrapper.length-GENERIC_ARGS_MAX_CHARS))}}function maybeArgsRaw(_source,toolName,args){if(args===void 0||args===null)return;let value=args;if(typeof args==="string")try{value=JSON.parse(args)}catch{return args.length>BASH_COMMAND_MAX_CHARS?args.slice(0,BASH_COMMAND_MAX_CHARS):args}if(value!==null&&typeof value==="object"){let cmd=bashCommandOf(value);if(cmd!==void 0&&isShellTool(toolName))return cmd.length>BASH_COMMAND_MAX_CHARS?cmd.slice(0,BASH_COMMAND_MAX_CHARS):cmd;return serializeBounded(value)}return JSON.stringify(value)}function claudeSplit(raw,context){let entries=[],sessionId=s(raw.sessionId,raw.conversation_uuid)??"unknown",seq=typeof raw.seq==="number"?raw.seq:typeof raw.messageIndex==="number"?raw.messageIndex:0,ts=timestampOf(raw.ts,raw.timestamp,raw.createdAt),role=mapRole(raw.type??raw.role),recordType=String(raw.type??""),model=s(raw.model,o(raw.message).model),cwd=s(raw.cwd,raw.dir);if(raw.subtype==="turn_duration"&&typeof raw.durationMs==="number")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"system",record_type:"turn_duration",disposition:"meta",ts,duration_ms:raw.durationMs,content_text:null,provenance:"ambient"}}),entries;if(recordType==="attachment"||recordType.startsWith("file-history"))return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,provenance:"ambient"}}),entries;let usage=typeof raw.usage==="object"&&raw.usage!==null?raw.usage:o(raw.message).usage,inputTokens=raw.inputTokens??usage?.input_tokens,outputTokens=raw.outputTokens??usage?.output_tokens,cacheRead=usage?.cacheReadTokens??usage?.cache_read_tokens??usage?.cache_read_input_tokens,cacheWrite=usage?.cacheWriteTokens??usage?.cache_write_tokens??usage?.cache_creation_input_tokens,costUsd=computeCost(inputTokens,outputTokens,model),contentBlocks=raw.content??o(raw.message).content,contentText=extractContentText(contentBlocks),messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,turn_index:typeof raw.turnIndex==="number"?raw.turnIndex:void 0,role,record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:cacheWrite??null,cost_usd:costUsd??null,content_text:contentText??null,cwd:cwd??null,provenance:"ambient",request_id:s(raw.requestId)??null}}),Array.isArray(contentBlocks)&&role==="assistant")for(let block of contentBlocks){if(typeof block!=="object"||block===null)continue;let b=block;if(b.type==="tool_use")entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,call_id:s(b.id),tool_name:String(b.name??""),args_digest:argsDigest(b.input),args_raw:maybeArgsRaw("claude",String(b.name??""),b.input),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function piSplit(raw,context){let msg=raw.message,recordType=String(raw.type??raw.recordType??""),sessionId=sessionIdFromContext(context,raw),seq=context?.sourceLine??(typeof raw.seq==="number"?raw.seq:0),ts=timestampOf(raw.timestamp,raw.createdAt,raw.ts);if(recordType==="title"||recordType==="title_change"||recordType==="service_tier_change"||recordType==="session_info"||recordType==="ttsr_injection"||recordType==="session_init"||recordType==="session"||recordType==="model_change"||recordType==="thinking_level_change"||recordType==="compaction"||recordType==="custom"||recordType==="custom_message"||recordType.startsWith("custom."))return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,provenance:"ambient"}}];let entries=[],role=piRole(msg?.role??raw.role??recordType),model=s(raw.model,o(msg).model),cwd=s(raw.cwd,raw.dir),usage=msg?.usage??raw.usage,inputTokens=usage?.input??usage?.input_tokens??void 0,outputTokens=usage?.output??usage?.output_tokens??void 0,cacheRead=usage?.cacheRead??usage?.cache_read_tokens??void 0,cacheWrite=usage?.cacheWrite??usage?.cache_write_tokens??void 0,costObj=msg?.cost??raw.cost,costUsd=typeof costObj?.total==="number"?costObj.total:computeCost(inputTokens,outputTokens,model),contentBlocks=msg?.content??raw.content,durationMs=typeof msg?.duration==="number"&&Number.isFinite(msg.duration)?msg.duration:void 0,messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",ts,duration_ms:durationMs,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:cacheWrite??null,cost_usd:costUsd??null,content_text:extractContentText(contentBlocks)??s(raw.content,raw.text,msg?.content)??null,cwd:cwd??null,provenance:"ambient"}}),Array.isArray(contentBlocks)&&role==="assistant")for(let block of contentBlocks){let call=normalizeOmpToolCall(block);if(call===null)continue;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,tool_name:String(call.name??""),call_id:s(call.id),args_digest:argsDigest(call.input??call.arguments),args_raw:maybeArgsRaw("pi",String(call.name??""),call.input??call.arguments),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function piRole(type){let t=String(type??"").toLowerCase();if(t==="toolresult"||t==="tool_result"||t==="bashexecution"||t==="tool")return"user";let mapped=mapRole(t);if(mapped==="user"||mapped==="assistant"||mapped==="system")return mapped;return"unknown"}function ompSplit(raw,context){let msg=raw.message,recordType=String(raw.type??""),sessionId=sessionIdFromContext(context,raw),seq=context?.sourceLine??(typeof raw.seq==="number"?raw.seq:0),ts=timestampOf(raw.ts,raw.timestamp,raw.createdAt);if(recordType==="title"||recordType==="title_change"||recordType==="service_tier_change"||recordType==="ttsr_injection"||recordType==="session_init"||recordType==="session"||recordType==="model_change"||recordType==="thinking_level_change"||recordType==="compaction"||recordType==="custom"||recordType==="custom_message"||recordType.startsWith("custom."))return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,provenance:"ambient"}}];let entries=[],role=mapRole(msg?.role??raw.type??raw.role),model=s(raw.model,o(msg).model),cwd=s(raw.cwd,raw.dir),usage=msg?.usage??raw.usage,inputTokens=usage?.input??usage?.input_tokens??void 0,outputTokens=usage?.output??usage?.output_tokens??void 0,cacheRead=usage?.cacheRead??usage?.cache_read_tokens??void 0,cacheWrite=usage?.cacheWrite??usage?.cache_write_tokens??void 0,costObj=msg?.cost??raw.cost,costUsd=typeof costObj?.total==="number"?costObj.total:computeCost(inputTokens,outputTokens,model),contentBlocks=msg?.content??raw.content,durationMs=typeof msg?.duration==="number"&&Number.isFinite(msg.duration)?msg.duration:void 0,messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",ts,duration_ms:durationMs,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:cacheWrite??null,cost_usd:costUsd??null,content_text:extractContentText(contentBlocks)??s(raw.content,raw.text,msg?.content)??null,cwd:cwd??null,provenance:"ambient"}}),Array.isArray(contentBlocks)&&role==="assistant")for(let block of contentBlocks){let call=normalizeOmpToolCall(block);if(call===null)continue;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,tool_name:String(call.name??""),call_id:s(call.id),args_digest:argsDigest(call.input??call.arguments),args_raw:maybeArgsRaw("omp",String(call.name??""),call.input??call.arguments),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function normalizeOmpToolCall(block){if(typeof block!=="object"||block===null)return null;let nested=o(block.toolCall);if(Object.keys(nested).length>0)return nested;if(block.type==="toolCall")return block;return null}function codexSplit(raw,context){let entries=[],payload=raw.payload??raw,seq=typeof raw.seq==="number"?raw.seq:0,ts=timestampOf(raw.timestamp,raw.ts,payload.ts),recordType=String(raw.type??""),payloadType=String(payload.type??""),isShortFormat=recordType===""&&raw.id!==void 0&&raw.timestamp!==void 0&&raw.instructions!==void 0,explicitSessionId=s(raw.session_id,o(raw.session_meta).id);if(explicitSessionId===void 0&&recordType==="session_meta")explicitSessionId=s(payload.id,o(raw.payload).id);if(explicitSessionId===void 0&&isShortFormat)explicitSessionId=s(raw.id);let pathSessionId=context?.sourceFile?sessionIdFromSourcePath("codex",context.sourceFile):void 0,sessionId=explicitSessionId??pathSessionId??"unknown";if(isShortFormat)return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:"short_format",disposition:"meta",ts,provenance:"ambient"}}];let role,disposition,contentText,usage;if(recordType==="response_item")if(payloadType==="message")role=mapRole(payload.role),disposition="keep",contentText=extractContentText(payload.content)??s(payload.text)??null;else if(payloadType==="agent_message")role="assistant",disposition="keep",contentText=extractContentText(payload.content)??s(payload.text,payload.message)??null;else if(payloadType==="reasoning")role="assistant",disposition="keep",contentText=extractContentText(payload.summary)??s(payload.text)??null;else if(payloadType==="function_call"||payloadType==="custom_tool_call")role="tool",disposition="keep",contentText=null;else role="meta",disposition="meta",contentText=s(payload.text)??null;else if(recordType==="user"||recordType==="assistant")role=mapRole(recordType),disposition="keep",contentText=extractContentText(payload.content)??s(raw.content,payload.text)??null;else if(recordType==="message")role=mapRole(raw.role??payload.role),disposition="keep",contentText=extractContentText(payload.content??raw.content)??s(payload.text,raw.text)??null;else if(recordType==="event_msg")role="meta",disposition="meta",contentText=s(payload.message,payload.text)??null,usage=o(o(payload.info).last_token_usage);else role="meta",disposition="meta",contentText=s(payload.text,raw.instructions)??null;let model=s(raw.model,payload.model,o(o(raw.turn_context).payload).model),cwd=s(raw.cwd,raw.dir),tokenCount=payload.token_count,usageInput=usage?.input_tokens??tokenCount?.input??tokenCount?.input_tokens??void 0,usageOutput=usage?.output_tokens??tokenCount?.output??tokenCount?.output_tokens??void 0,cacheRead=usage?.cached_input_tokens??void 0,turnPayload=raw.turn_context?.payload,turnInputTokens=turnPayload?.input_tokens,turnOutputTokens=turnPayload?.output_tokens,finalInput=usageInput!==void 0?usageInput:turnInputTokens,finalOutput=usageOutput!==void 0?usageOutput:turnOutputTokens,costUsd=computeCost(finalInput,finalOutput,model),usageCarrier=finalInput!==void 0||finalOutput!==void 0?{input:finalInput??null,output:finalOutput??null,cacheRead:cacheRead??null}:void 0,stripUsage=role==="meta"&&usageCarrier!==void 0,messageSplitIndex=entries.length;entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition,ts,duration_ms:void 0,model:model??null,input_tokens:stripUsage?null:finalInput??null,output_tokens:stripUsage?null:finalOutput??null,cache_read_tokens:stripUsage?null:cacheRead??null,...usageCarrier!==void 0?{_codexUsageCarrier:usageCarrier}:{},cache_write_tokens:null,cost_usd:costUsd??null,content_text:contentText,cwd:cwd??null,provenance:"ambient"}});let toolItems=[];if((recordType==="response_item"||recordType==="function_call"||recordType==="custom_tool_call")&&(payloadType==="function_call"||payloadType==="custom_tool_call"))toolItems.push(payload);else if(payload.response_item)toolItems.push(payload.response_item);else if(Array.isArray(payload.response_items))toolItems.push(...payload.response_items);for(let item of toolItems){let fc=item.function_call??item,toolName=s(fc.name)??"",args=fc.arguments??fc.input;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,tool_name:toolName,call_id:s(fc.call_id),args_digest:argsDigest(args),args_raw:maybeArgsRaw("codex",toolName,args),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function agySplit(raw,context){let entries=[],recordType=String(raw.type??""),explicitSessionId=s(raw.session_id,raw.conversation_id,raw.conversationId),pathSessionId=context?.sourceFile?sessionIdFromSourcePath("agy",context.sourceFile):void 0,sessionId=explicitSessionId??pathSessionId??"unknown",seq=typeof raw.seq==="number"?raw.seq:typeof raw.step_index==="number"?raw.step_index:context?.sourceLine??0,ts=timestampOf(raw.created_at,raw.timestamp,raw.ts),role,disposition,contentText=null,messageRecordType=recordType;if(raw.display!==void 0)role="user",disposition="keep",contentText=s(raw.display)??null,messageRecordType=recordType.length>0?recordType:"USER_INPUT";else switch(recordType){case"USER_INPUT":case"ASK_QUESTION":role="user",disposition="keep",contentText=s(raw.content,raw.text,raw.message)??null;break;case"PLANNER_RESPONSE":role="assistant",disposition="keep",contentText=s(raw.content,raw.text,raw.message,raw.plan)??null;break;case"ERROR_MESSAGE":role="system",disposition="keep",contentText=s(raw.content,raw.text,raw.message)??null;break;case"RUN_COMMAND":case"VIEW_FILE":case"GREP_SEARCH":case"LIST_DIRECTORY":case"READ_URL_CONTENT":role="tool",disposition="keep",contentText=s(raw.content,raw.command,raw.file_path,raw.pattern)??null;break;case"CODE_ACTION":case"INVOKE_SUBAGENT":role="tool",disposition="keep",contentText=s(raw.content,raw.text)??null;break;case"CONVERSATION_HISTORY":case"CHECKPOINT":case"GENERIC":role="meta",disposition="meta",contentText=s(raw.content,raw.text)??null;break;default:if(recordType.length===0)role="unknown",disposition="unknown";else role="meta",disposition="meta",contentText=s(raw.content,raw.text)??null;break}let messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:messageRecordType,disposition,ts,duration_ms:void 0,model:null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:contentText,cwd:s(raw.workspace,raw.cwd)??null,provenance:"ambient"}}),recordType==="PLANNER_RESPONSE"&&Array.isArray(raw.tool_calls))for(let tc of raw.tool_calls)entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq:typeof tc.step_index==="number"?tc.step_index:seq,tool_name:String(tc.name??tc.tool_name??""),args_digest:argsDigest(tc.input??tc.arguments),args_raw:maybeArgsRaw("agy",String(tc.name??tc.tool_name??""),tc.input??tc.arguments),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}});for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function geminiSplit(raw,context){let recordType=String(raw.type??(raw.kind!==void 0?"session":raw.$set!==void 0?"state":"")),state=o(raw.$set),sessionId=sessionIdFromContext(context,raw),seq=context?.sourceLine??0,ts=timestampOf(raw.timestamp,raw.startTime,raw.lastUpdated,state.lastUpdated);if(recordType==="session"||recordType==="state")return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,content_text:s(state.summary)??null,provenance:"ambient"}}];let role=recordType==="gemini"?"assistant":recordType==="user"?"user":"system",tokens=o(raw.tokens),content=geminiContent(raw),entries=[{targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",ts,duration_ms:null,model:s(raw.model)??null,input_tokens:numberOrNull(tokens.input),output_tokens:numberOrNull(tokens.output),cache_read_tokens:numberOrNull(tokens.cached),cache_write_tokens:null,cost_usd:null,content_text:content,cwd:null,provenance:"ambient"}}];if(Array.isArray(raw.toolCalls))for(let value of raw.toolCalls){if(value===null||typeof value!=="object"||Array.isArray(value))continue;let tool=value,status=s(tool.status)??"unknown",timestamp=s(tool.timestamp),result=tool.result??tool.resultDisplay;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:s(tool.name,tool.displayName)??"unknown",args_digest:argsDigest(tool.args),args_raw:maybeArgsRaw("gemini",s(tool.name,tool.displayName)??"",tool.args),status,started_at:timestamp,completed_at:timestamp,duration_ms:null,result_bytes:result===void 0?null:new TextEncoder().encode(JSON.stringify(result)).byteLength,error_text:status==="error"?s(tool.resultDisplay,tool.result)??null:null}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex:0}))entries.push(skillCallEntry(record2));return entries}function dshSplit(raw,context){let recordType=String(raw.type??"");if(recordType==="session")return[{targetTable:"history_message",record:{session_id:s(raw.id)??sessionIdFromSourcePath("deepseek",context?.sourceFile??"")??"unknown",seq:0,role:"meta",record_type:"session",disposition:"meta",ts:timestampOf(raw.createdAt),cwd:s(raw.cwd)??null,content_text:null,provenance:"ambient"}}];if(recordType!=="user/message"&&recordType!=="assistant/message")return[];let data=o(raw.data),msg=o(data.message),seq=typeof raw.seq==="number"?raw.seq:context?.sourceLine??0,sessionId=sessionIdFromSourcePath("deepseek",context?.sourceFile??"")??"unknown",role=recordType==="user/message"?"user":"assistant",source=o(data.source??msg.source),model=s(source.model,o(data.model??msg.model).model),usage=data.usage??msg.usage,messageId=s(msg.id,data.id);return[{targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",...messageId!==void 0?{source_record_id:messageId}:{},ts:timestampOf(raw.time,data.time,msg.time),duration_ms:null,model:model??null,input_tokens:numberOrNull(usage?.input_tokens??usage?.input)??null,output_tokens:numberOrNull(usage?.output_tokens??usage?.output)??null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:extractContentText(data.content??msg.content)??s(data.text,msg.text)??null,cwd:null,provenance:"ambient"}}]}var UUID_PATTERN="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}",AGY_BRAIN_REGEX=new RegExp(`(?:^|\\/)brain\\/(${UUID_PATTERN})(?:\\/|$)`,"i"),DSH_SESSION_REGEX=new RegExp(`(?:^|\\/)session-(${UUID_PATTERN})(?:\\/|$)`,"i"),CODEX_ROLLOUT_REGEX=new RegExp(`(?:^|-|_)(${UUID_PATTERN})$`,"i");function sessionIdFromSourcePath(source,sourceFile){let normalized=sourceFile.replace(/\\/g,"/"),sLower=source.toLowerCase();if(sLower==="agy"||sLower==="antigravity")return normalized.match(AGY_BRAIN_REGEX)?.[1];if(sLower==="deepseek")return normalized.match(DSH_SESSION_REGEX)?.[1];if(sLower==="codex"){let basename=normalized.split("/").at(-1)??"";if(basename.startsWith("rollout-")&&basename.endsWith(".jsonl"))return basename.slice(0,-6).match(CODEX_ROLLOUT_REGEX)?.[1]}return}function sessionIdFromContext(context,raw){if(context!==void 0){let file2=context.sourceFile.split("/").at(-1);if(file2!==void 0)return file2.replace(/\.jsonl$/,"")}return s(raw.sessionId,raw.id)??"unknown"}function geminiContent(raw){let content=extractContentText(raw.content)??s(raw.text),thoughts=Array.isArray(raw.thoughts)?raw.thoughts.map((value)=>value!==null&&typeof value==="object"?s(o(value).description):void 0).filter((value)=>value!==void 0).join(`
411
+ `):"";return[content,thoughts].filter((value)=>value!==void 0&&value.length>0).join(`
412
+ `)||null}function numberOrNull(value){return typeof value==="number"&&Number.isFinite(value)?value:null}function normalizeGrokRecord(raw){let params=raw.params,update=params?.update,isUpdatesShape=typeof raw.method==="string"&&params!==void 0&&update!==void 0,body=isUpdatesShape?update:raw,recordType=String((isUpdatesShape?update?.sessionUpdate:raw.type)??raw.sessionUpdate??raw.eventType??(raw.file_snapshots!==void 0||raw.after_snapshots!==void 0?"file_snapshot":raw.prompt!==void 0?"user_message":raw.answer!==void 0||raw.question!==void 0?"assistant":"")),sessionId=s(params?.sessionId,raw.session_id,raw.sessionId,raw.parentSessionId,raw.btwSessionId,raw.params?.sessionId)??"unknown",ts=normalizeTs(raw.ts??raw.timestamp??raw.created_at??raw.askedAt??body.ts??body.timestamp),seq=typeof raw.seq==="number"?raw.seq:typeof body.seq==="number"?body.seq:0,meta3=body._meta??params?._meta??raw._meta,model=s(meta3?.modelId,body.model,raw.model),contentText=extractGrokContent(body.content??body.text??raw.content??raw.text??raw.prompt??(raw.answer!==void 0||raw.question!==void 0?[raw.question,raw.answer].filter((value)=>typeof value==="string").join(`
413
+ `):void 0)),usage=body.usage??raw.usage,toolMeta=meta3?.["x.ai/tool"],titleFallback=s(body.title)?.split("`")[0]?.trim(),toolName=s(toolMeta?.name,body.kind,body.tool_name,body.name,raw.tool_name,raw.name)??(titleFallback!==void 0&&titleFallback.length>0&&titleFallback.length<=40?titleFallback:""),toolArgs=body.rawInput??body.input??body.arguments??toolMeta?.input??raw.input??raw.arguments,toolStatus=s(body.status,raw.outcome,raw.status)??"ok",durationMs=typeof body.duration_ms==="number"?body.duration_ms:typeof raw.duration_ms==="number"?raw.duration_ms:typeof usage?.apiDurationMs==="number"?usage.apiDurationMs:void 0,errorText=body.error!==void 0?String(body.error):raw.error!==void 0?String(raw.error):void 0,hasTypeDiscriminator=recordType.length>0||isUpdatesShape;return{recordType,sessionId,ts,seq,body,model,contentText,usage,toolName,toolArgs,toolStatus,durationMs,errorText,hasTypeDiscriminator}}function normalizeTs(value){return timestampOf(value)}function extractGrokContent(content){if(typeof content==="string")return content;if(content!==null&&typeof content==="object"&&!Array.isArray(content)){let c=content;if(typeof c.text==="string")return c.text;if(typeof c.content==="string")return c.content}if(Array.isArray(content)){let parts=[];for(let block of content)if(typeof block==="string")parts.push(block);else if(block!==null&&typeof block==="object"){let b=block;if(typeof b.text==="string")parts.push(b.text)}return parts.length>0?parts.join(`
414
+ `):null}return null}var GROK_META_TYPES=new Set(["phase_changed","permission_requested","permission_resolved","mcp_server_starting","mcp_server_connected","mcp_config_resolved","mcp_managed_config_result","mcp_transport_decode_error","mcp_init_completed","mcp_health_check","loop_started","first_token","agent_thought_chunk","hook_execution","plan","session_recap","task_backgrounded","task_completed","retry_state","auto_compact_started","auto_compact_completed","compaction_checkpoint","image_compressed","reasoning","system","turn_started","turn_ended","yolo_toggled"]);function grokSplit(raw,context){let entries=[],n=normalizeGrokRecord(raw),{recordType,sessionId,ts,seq}=n;if(recordType==="turn_completed"){let usage=n.usage,modelUsage=usage?.modelUsage,modelFromUsage=modelUsage!==null&&typeof modelUsage==="object"?Object.keys(modelUsage)[0]:void 0,model=s(n.model,modelFromUsage),inputTokens=usage?.inputTokens??usage?.input??usage?.input_tokens,outputTokens=usage?.outputTokens??usage?.output??usage?.output_tokens,cacheRead=usage?.cachedReadTokens??usage?.cache_read_tokens;return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:n.durationMs??usage?.apiDurationMs??null,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries}if(recordType==="tool_started")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:n.toolName,args_digest:argsDigest(n.toolArgs),args_raw:maybeArgsRaw("grok",n.toolName,n.toolArgs),status:n.toolStatus||"ok",started_at:ts,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:n.errorText}}),entries;if(recordType==="tool_completed")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:n.durationMs??null,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:n.toolName,args_digest:null,args_raw:void 0,status:n.toolStatus||"ok",started_at:void 0,completed_at:ts,duration_ms:n.durationMs,result_bytes:void 0,error_text:n.errorText}}),entries;if(recordType==="tool_call"||recordType==="tool_call_update"){entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:n.toolName,args_digest:argsDigest(n.toolArgs),args_raw:maybeArgsRaw("grok",n.toolName,n.toolArgs),status:n.toolStatus||"ok",started_at:recordType==="tool_call"?ts:void 0,completed_at:recordType==="tool_call_update"?ts:void 0,duration_ms:n.durationMs,result_bytes:void 0,error_text:n.errorText}});for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex:0}))entries.push(skillCallEntry(record2));return entries}if(recordType==="user"||recordType==="user_message"||recordType==="user_message_chunk"||recordType==="message")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"user",record_type:recordType||"user_message",disposition:"keep",ts,duration_ms:void 0,model:null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;if(recordType==="assistant"||recordType==="agent_message_chunk")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;if(GROK_META_TYPES.has(recordType))return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,duration_ms:n.durationMs??null,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;if(!n.hasTypeDiscriminator||recordType.length===0)return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"unknown",record_type:stableFieldShape(raw),disposition:"unknown",ts,duration_ms:void 0,model:null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,duration_ms:n.durationMs??null,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries}function o(value){return typeof value==="object"&&value!==null?value:{}}function s(...values){for(let value of values){if(typeof value==="string"&&value.length>0)return value;if(typeof value==="number"&&Number.isFinite(value))return String(value)}return}function timestampOf(...values){for(let value of values){if(typeof value==="number"&&Number.isFinite(value)){let ms=value>1000000000000?value:value*1000;return new Date(ms).toISOString()}if(typeof value==="string"&&value.length>0){let asNum=Number(value);if(Number.isFinite(asNum)&&/^\d+(\.\d+)?$/.test(value.trim())){let ms=asNum>1000000000000?asNum:asNum*1000;return new Date(ms).toISOString()}return value}}return}function mapRole(type){let t=String(type??"").toLowerCase();if(t==="user"||t==="human"||t==="developer")return"user";if(t==="assistant"||t==="ai"||t==="model")return"assistant";if(t==="system"||t==="error")return"system";return t||"unknown"}function computeCost(inputTokens,outputTokens,model){if(inputTokens===void 0||inputTokens===null)return;if(outputTokens===void 0||outputTokens===null)return;let inputRate=model?.toLowerCase().includes("claude")?3:1,outputRate=model?.toLowerCase().includes("claude")?15:5;return(inputTokens*inputRate+outputTokens*outputRate)/1e6}function extractContentText(content){if(typeof content==="string")return content;if(!Array.isArray(content))return;let parts=[];for(let block of content){if(typeof block!=="object"||block===null)continue;let b=block;if(typeof b.text==="string")parts.push(b.text)}return parts.length>0?parts.join(`
415
+ `):void 0}function stableFieldShape(raw){return Object.keys(raw).map((k)=>k.toLowerCase()).sort().join("+")}var CLAUDE_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),PI_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),OMP_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),CODEX_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),AGY_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),GROK_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),GEMINI_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),DSH_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(["source_record_id"])),passthroughSchema=exports_external.object({}).passthrough(),CLAUDE_SCHEMA=passthroughSchema,PI_SCHEMA=passthroughSchema,OMP_SCHEMA=passthroughSchema,CODEX_SCHEMA=passthroughSchema,AGY_SCHEMA=passthroughSchema,GROK_SCHEMA=passthroughSchema,GEMINI_SCHEMA=passthroughSchema,DSH_SCHEMA=passthroughSchema;var HISTORY_IMPORT_SCHEMA_VERSION="0.5.9",HISTORY_IMPORT_SCHEMA_SQL=`
391
416
  CREATE TABLE IF NOT EXISTS history_import_checkpoint (
392
417
  source TEXT NOT NULL,
393
418
  source_file TEXT NOT NULL,
@@ -504,12 +529,7 @@ CREATE INDEX IF NOT EXISTS idx_history_skill_call_message_hash
504
529
  ON history_skill_call(message_hash);
505
530
  CREATE INDEX IF NOT EXISTS idx_history_skill_call_invocation_kind
506
531
  ON history_skill_call(invocation_kind);
507
- `.trim();init_zod();init_zod();import{createHash}from"node:crypto";function stableJson(value){if(Array.isArray(value))return`[${value.map((entry)=>entry===void 0?"null":stableJson(entry)).join(",")}]`;if(value!==null&&typeof value==="object"){let record2=value;return`{${Object.keys(record2).filter((key)=>record2[key]!==void 0).sort().map((key)=>`${JSON.stringify(key)}:${stableJson(record2[key])}`).join(",")}}`}return JSON.stringify(value)??"null"}function sha256(value){return createHash("sha256").update(stableJson(value)).digest("hex")}var MESSAGE_MAPPER_KEYS=["_codexUsageCarrier","session_id","seq","turn_index","role","record_type","disposition","ts","duration_ms","model","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","cost_usd","content_text","cwd","provenance","run_id","task_wbs","request_id"],TOOL_CALL_MAPPER_KEYS=["_messageSplitIndex","session_id","seq","tool_name","call_id","args_digest","args_raw","status","started_at","completed_at","duration_ms","result_bytes","error_text"],SKILL_CALL_MAPPER_KEYS=["_messageSplitIndex","session_id","seq","skill_name","invocation_kind","skill_path","args_raw","args_digest","call_id","status","started_at","completed_at","duration_ms"];function identityFieldMap(keys){let map2={};for(let key of keys)map2[key]=key;return map2}var HARNESS_SKILL_PACKAGES=new Set(["sp","rd3"]);function canonicalizeSkillName(raw){let name=raw.trim();if(name.startsWith("/")||name.startsWith("$"))name=name.slice(1);if(name.startsWith("skill:"))name=name.slice(6);let canonical=name.match(/^([a-z][a-z0-9]*):([a-z0-9-]+)$/);if(canonical!==null&&HARNESS_SKILL_PACKAGES.has(canonical[1]??""))return name;let dialect=name.match(/^([a-z][a-z0-9]*)-([a-z0-9-]+)$/);if(dialect!==null&&HARNESS_SKILL_PACKAGES.has(dialect[1]??""))return`${dialect[1]}:${dialect[2]}`;return name}function extractSkillCalls(raw,context,identity){switch(context?.source){case"claude":return detectClaudeSkillCalls(raw,identity);case"pi":return detectPiSkillCalls(raw,identity);case"omp":return detectOmpSkillCalls(raw,identity);case"codex":return detectCodexSkillCalls(raw,identity);case"agy":return detectAgySkillCalls(raw,identity);case"gemini":return detectGeminiSkillCalls(raw,identity);case"grok":return detectGrokSkillCalls(raw,identity);default:return[]}}function skillCallEntry(record2){return{targetTable:"history_skill_call",record:record2}}function skillRecord(identity,skillName,invocationKind,extra={}){return{_messageSplitIndex:identity.messageSplitIndex,session_id:identity.sessionId,seq:identity.seq,skill_name:canonicalizeSkillName(skillName),invocation_kind:invocationKind,skill_path:null,args_raw:null,args_digest:null,call_id:null,status:"ok",started_at:null,completed_at:null,duration_ms:null,...extra}}function skillNameFromPath(path){let normalized=path.replace(/\\/g,"/"),bySkillsSegment=normalized.match(/\/skills\/([^/]+)\/SKILL\.md$/i);if(bySkillsSegment!==null)return bySkillsSegment[1]??"";let stem=normalized.slice(0,normalized.length-9);return stem.split("/").pop()??stem}function detectClaudeSkillCalls(raw,identity){let contentBlocks=raw.content??o(raw.message).content;if(!Array.isArray(contentBlocks))return[];let rows=[];for(let block of contentBlocks){if(typeof block!=="object"||block===null)continue;let b=block;if(b.type!=="tool_use"||b.name!=="Skill")continue;let input=b.input??{},skill=s(input.skill);if(skill===void 0)continue;rows.push(skillRecord(identity,skill,s(o(b.caller).type)==="direct"?"user":"model",{args_raw:maybeArgsRaw("claude","Skill",input)??null,args_digest:argsDigest(input),call_id:s(b.id)??null}))}return rows}var PI_SKILL_WRAPPER=/<skill\s+name="([^"]+)"(?:\s+location="([^"]*)")?\s*>/g;function detectPiSkillCalls(raw,identity){let msg=raw.message;if(piRole(msg?.role??raw.role??raw.recordType??raw.type)!=="user")return[];let text=extractContentText(msg?.content??raw.content);if(text===void 0)return[];let rows=[];for(let match of text.matchAll(PI_SKILL_WRAPPER))rows.push(skillRecord(identity,match[1]??"","user",{skill_path:match[2]||null}));return rows}function detectOmpSkillCalls(raw,identity){let msg=raw.message;if(mapRole(msg?.role??raw.type??raw.role)!=="assistant")return[];let contentBlocks=msg?.content??raw.content;if(!Array.isArray(contentBlocks))return[];let rows=[];for(let block of contentBlocks){let call=normalizeOmpToolCall(block);if(call===null||call.name!=="Skill")continue;let input=call.input??call.arguments,skill=s(input?.skill);if(skill===void 0)continue;rows.push(skillRecord(identity,skill,"model",{args_raw:maybeArgsRaw("omp","Skill",input)??null,args_digest:argsDigest(input),call_id:s(call.id)??null}))}return rows}var CODEX_SKILL_BLOCK=/<skill>\s*<name>([^<]+)<\/name>\s*<path>([^<]+)<\/path>\s*<\/skill>/g;function detectCodexSkillCalls(raw,identity){let payload=raw.payload??raw,recordType=String(raw.type??""),payloadType=String(payload.type??""),role;if(recordType==="response_item")role=payloadType==="message"?mapRole(payload.role):payloadType==="agent_message"?"assistant":"meta";else if(recordType==="user"||recordType==="assistant")role=mapRole(recordType);else if(recordType==="message")role=mapRole(raw.role??payload.role);else return[];if(role!=="user")return[];let text=extractContentText(payload.content??raw.content)??s(payload.text,raw.text);if(text===void 0)return[];let rows=[];for(let match of text.matchAll(CODEX_SKILL_BLOCK))rows.push(skillRecord(identity,match[1]??"","user",{skill_path:match[2]??null}));return rows}function detectAgySkillCalls(raw,identity){if(String(raw.type??"")!=="PLANNER_RESPONSE"||!Array.isArray(raw.tool_calls))return[];let rows=[];for(let tc of raw.tool_calls){if(s(tc.name,tc.tool_name)!=="view_file")continue;let args=tc.args??tc.arguments??{};if(args.toolAction!=="Viewing skill file")continue;let path=s(args.AbsolutePath,args.absolute_path);if(path===void 0||!path.replace(/\\/g,"/").endsWith("/SKILL.md"))continue;let skillName=s(args.toolSummary)?.match(/SKILL\.md for (.+)$/)?.[1]??skillNameFromPath(path);rows.push(skillRecord(identity,skillName,"model",{skill_path:path,args_raw:maybeArgsRaw("agy","view_file",args)??null,args_digest:argsDigest(args)}))}return rows}var GEMINI_L0_PREFIX=/^\s*\/((?:sp|rd3)-[a-z0-9-]+)/;function detectGeminiSkillCalls(raw,identity){if(String(raw.type??"")!=="user")return[];let content=geminiContent(raw);if(content===null)return[];let match=content.match(GEMINI_L0_PREFIX);if(match===null)return[];return[skillRecord(identity,match[1]??"","user")]}function detectGrokSkillCalls(raw,identity){let n=normalizeGrokRecord(raw);if(n.recordType!=="tool_call"||n.toolName!=="read_file")return[];let meta3=n.body._meta??raw._meta??{};if(o(meta3["x.ai/tool"]).namespace!=="grok_build")return[];let targetFile=s(o(n.toolArgs).target_file);if(targetFile===void 0||!targetFile.replace(/\\/g,"/").endsWith("/SKILL.md"))return[];return[skillRecord(identity,skillNameFromPath(targetFile),"model",{skill_path:targetFile,args_raw:maybeArgsRaw("grok","read_file",n.toolArgs)??null,args_digest:argsDigest(n.toolArgs),started_at:n.ts??null})]}function argsDigest(args){let redacted=redactArgs(args);return sha256(redacted)}function redactArgs(args){if(typeof args==="string"){if(args.length>80)return"[REDACTED:long]";if(/[A-Za-z0-9+/]{40,}=*|[A-Za-z0-9_-]{20,}/.test(args))return"[REDACTED:secret]";return args}if(Array.isArray(args))return args.map(redactArgs);if(args!==null&&typeof args==="object"){let result={};for(let[key,value]of Object.entries(args))result[key]=redactArgs(value);return result}return args}var BASH_COMMAND_MAX_CHARS=8192,GENERIC_ARGS_MAX_CHARS=8192;function bashCommandOf(args){if(args===null||typeof args!=="object")return;let rec=args,command=rec.command??rec.CommandLine??rec.cmd??rec.script;if(typeof command==="string")return command;if(Array.isArray(command))return command.map(String).join(" ");return}var BULKY_PAYLOAD_KEYS=new Set(["content","codecontent","replacementcontent","targetcontent","filedata","buffer","blob","image","imagebase64"]);function normalizeKey(key){return key.toLowerCase().replace(/[^a-z0-9]/g,"")}function isShellTool(toolName){return/^(?:bash|shell|cmd|command|exec|execcommand|executecommand|runcommand|shellcommand|runshellcommand)$/.test(normalizeKey(toolName))}function sanitizeValue(value){if(typeof value==="string")return value.length>1000?`${value.slice(0,1000)}[truncated ${value.length} chars]`:value;if(Array.isArray(value))return value.map(sanitizeValue);if(value!==null&&typeof value==="object"){let out={};for(let[key,entry]of Object.entries(value))out[key]=typeof entry==="string"&&entry.length>120&&BULKY_PAYLOAD_KEYS.has(normalizeKey(key))?`[omitted ${entry.length} chars]`:sanitizeValue(entry);return out}return value}function serializeBounded(value){let serialized=JSON.stringify(sanitizeValue(value));if(serialized.length<=GENERIC_ARGS_MAX_CHARS)return serialized;let preview=serialized;for(;;){let wrapper=JSON.stringify({_truncated:!0,omittedChars:serialized.length-preview.length,preview});if(wrapper.length<=GENERIC_ARGS_MAX_CHARS)return wrapper;preview=preview.slice(0,preview.length-(wrapper.length-GENERIC_ARGS_MAX_CHARS))}}function maybeArgsRaw(_source,toolName,args){if(args===void 0||args===null)return;let value=args;if(typeof args==="string")try{value=JSON.parse(args)}catch{return args.length>BASH_COMMAND_MAX_CHARS?args.slice(0,BASH_COMMAND_MAX_CHARS):args}if(value!==null&&typeof value==="object"){let cmd=bashCommandOf(value);if(cmd!==void 0&&isShellTool(toolName))return cmd.length>BASH_COMMAND_MAX_CHARS?cmd.slice(0,BASH_COMMAND_MAX_CHARS):cmd;return serializeBounded(value)}return JSON.stringify(value)}function claudeSplit(raw,context){let entries=[],sessionId=s(raw.sessionId,raw.conversation_uuid)??"unknown",seq=typeof raw.seq==="number"?raw.seq:typeof raw.messageIndex==="number"?raw.messageIndex:0,ts=timestampOf(raw.ts,raw.timestamp,raw.createdAt),role=mapRole(raw.type??raw.role),recordType=String(raw.type??""),model=s(raw.model,o(raw.message).model),cwd=s(raw.cwd,raw.dir);if(raw.subtype==="turn_duration"&&typeof raw.durationMs==="number")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"system",record_type:"turn_duration",disposition:"meta",ts,duration_ms:raw.durationMs,content_text:null,provenance:"ambient"}}),entries;if(recordType==="attachment"||recordType.startsWith("file-history"))return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,provenance:"ambient"}}),entries;let usage=typeof raw.usage==="object"&&raw.usage!==null?raw.usage:o(raw.message).usage,inputTokens=raw.inputTokens??usage?.input_tokens,outputTokens=raw.outputTokens??usage?.output_tokens,cacheRead=usage?.cacheReadTokens??usage?.cache_read_tokens??usage?.cache_read_input_tokens,cacheWrite=usage?.cacheWriteTokens??usage?.cache_write_tokens??usage?.cache_creation_input_tokens,costUsd=computeCost(inputTokens,outputTokens,model),contentBlocks=raw.content??o(raw.message).content,contentText=extractContentText(contentBlocks),messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,turn_index:typeof raw.turnIndex==="number"?raw.turnIndex:void 0,role,record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:cacheWrite??null,cost_usd:costUsd??null,content_text:contentText??null,cwd:cwd??null,provenance:"ambient",request_id:s(raw.requestId)??null}}),Array.isArray(contentBlocks)&&role==="assistant")for(let block of contentBlocks){if(typeof block!=="object"||block===null)continue;let b=block;if(b.type==="tool_use")entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,call_id:s(b.id),tool_name:String(b.name??""),args_digest:argsDigest(b.input),args_raw:maybeArgsRaw("claude",String(b.name??""),b.input),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function piSplit(raw,context){let msg=raw.message,recordType=String(raw.type??raw.recordType??""),sessionId=sessionIdFromContext(context,raw),seq=context?.sourceLine??(typeof raw.seq==="number"?raw.seq:0),ts=timestampOf(raw.timestamp,raw.createdAt,raw.ts);if(recordType==="title"||recordType==="title_change"||recordType==="service_tier_change"||recordType==="session_info"||recordType==="ttsr_injection"||recordType==="session_init"||recordType==="session"||recordType==="model_change"||recordType==="thinking_level_change"||recordType==="compaction"||recordType==="custom"||recordType==="custom_message"||recordType.startsWith("custom."))return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,provenance:"ambient"}}];let entries=[],role=piRole(msg?.role??raw.role??recordType),model=s(raw.model,o(msg).model),cwd=s(raw.cwd,raw.dir),usage=msg?.usage??raw.usage,inputTokens=usage?.input??usage?.input_tokens??void 0,outputTokens=usage?.output??usage?.output_tokens??void 0,cacheRead=usage?.cacheRead??usage?.cache_read_tokens??void 0,cacheWrite=usage?.cacheWrite??usage?.cache_write_tokens??void 0,costObj=msg?.cost??raw.cost,costUsd=typeof costObj?.total==="number"?costObj.total:computeCost(inputTokens,outputTokens,model),contentBlocks=msg?.content??raw.content,durationMs=typeof msg?.duration==="number"&&Number.isFinite(msg.duration)?msg.duration:void 0,messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",ts,duration_ms:durationMs,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:cacheWrite??null,cost_usd:costUsd??null,content_text:extractContentText(contentBlocks)??s(raw.content,raw.text,msg?.content)??null,cwd:cwd??null,provenance:"ambient"}}),Array.isArray(contentBlocks)&&role==="assistant")for(let block of contentBlocks){let call=normalizeOmpToolCall(block);if(call===null)continue;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,tool_name:String(call.name??""),call_id:s(call.id),args_digest:argsDigest(call.input??call.arguments),args_raw:maybeArgsRaw("pi",String(call.name??""),call.input??call.arguments),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function piRole(type){let t=String(type??"").toLowerCase();if(t==="toolresult"||t==="tool_result"||t==="bashexecution"||t==="tool")return"user";let mapped=mapRole(t);if(mapped==="user"||mapped==="assistant"||mapped==="system")return mapped;return"unknown"}function ompSplit(raw,context){let msg=raw.message,recordType=String(raw.type??""),sessionId=sessionIdFromContext(context,raw),seq=context?.sourceLine??(typeof raw.seq==="number"?raw.seq:0),ts=timestampOf(raw.ts,raw.timestamp,raw.createdAt);if(recordType==="title"||recordType==="title_change"||recordType==="service_tier_change"||recordType==="ttsr_injection"||recordType==="session_init"||recordType==="session"||recordType==="model_change"||recordType==="thinking_level_change"||recordType==="compaction"||recordType==="custom"||recordType==="custom_message"||recordType.startsWith("custom."))return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,provenance:"ambient"}}];let entries=[],role=mapRole(msg?.role??raw.type??raw.role),model=s(raw.model,o(msg).model),cwd=s(raw.cwd,raw.dir),usage=msg?.usage??raw.usage,inputTokens=usage?.input??usage?.input_tokens??void 0,outputTokens=usage?.output??usage?.output_tokens??void 0,cacheRead=usage?.cacheRead??usage?.cache_read_tokens??void 0,cacheWrite=usage?.cacheWrite??usage?.cache_write_tokens??void 0,costObj=msg?.cost??raw.cost,costUsd=typeof costObj?.total==="number"?costObj.total:computeCost(inputTokens,outputTokens,model),contentBlocks=msg?.content??raw.content,durationMs=typeof msg?.duration==="number"&&Number.isFinite(msg.duration)?msg.duration:void 0,messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",ts,duration_ms:durationMs,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:cacheWrite??null,cost_usd:costUsd??null,content_text:extractContentText(contentBlocks)??s(raw.content,raw.text,msg?.content)??null,cwd:cwd??null,provenance:"ambient"}}),Array.isArray(contentBlocks)&&role==="assistant")for(let block of contentBlocks){let call=normalizeOmpToolCall(block);if(call===null)continue;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,tool_name:String(call.name??""),call_id:s(call.id),args_digest:argsDigest(call.input??call.arguments),args_raw:maybeArgsRaw("omp",String(call.name??""),call.input??call.arguments),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function normalizeOmpToolCall(block){if(typeof block!=="object"||block===null)return null;let nested=o(block.toolCall);if(Object.keys(nested).length>0)return nested;if(block.type==="toolCall")return block;return null}function codexSplit(raw,context){let entries=[],payload=raw.payload??raw,seq=typeof raw.seq==="number"?raw.seq:0,ts=timestampOf(raw.timestamp,raw.ts,payload.ts),recordType=String(raw.type??""),payloadType=String(payload.type??""),isShortFormat=recordType===""&&raw.id!==void 0&&raw.timestamp!==void 0&&raw.instructions!==void 0,explicitSessionId=s(raw.session_id,o(raw.session_meta).id);if(explicitSessionId===void 0&&recordType==="session_meta")explicitSessionId=s(payload.id,o(raw.payload).id);if(explicitSessionId===void 0&&isShortFormat)explicitSessionId=s(raw.id);let pathSessionId=context?.sourceFile?sessionIdFromSourcePath("codex",context.sourceFile):void 0,sessionId=explicitSessionId??pathSessionId??"unknown";if(isShortFormat)return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:"short_format",disposition:"meta",ts,provenance:"ambient"}}];let role,disposition,contentText,usage;if(recordType==="response_item")if(payloadType==="message")role=mapRole(payload.role),disposition="keep",contentText=extractContentText(payload.content)??s(payload.text)??null;else if(payloadType==="agent_message")role="assistant",disposition="keep",contentText=extractContentText(payload.content)??s(payload.text,payload.message)??null;else if(payloadType==="reasoning")role="assistant",disposition="keep",contentText=extractContentText(payload.summary)??s(payload.text)??null;else if(payloadType==="function_call"||payloadType==="custom_tool_call")role="tool",disposition="keep",contentText=null;else role="meta",disposition="meta",contentText=s(payload.text)??null;else if(recordType==="user"||recordType==="assistant")role=mapRole(recordType),disposition="keep",contentText=extractContentText(payload.content)??s(raw.content,payload.text)??null;else if(recordType==="message")role=mapRole(raw.role??payload.role),disposition="keep",contentText=extractContentText(payload.content??raw.content)??s(payload.text,raw.text)??null;else if(recordType==="event_msg")role="meta",disposition="meta",contentText=s(payload.message,payload.text)??null,usage=o(o(payload.info).last_token_usage);else role="meta",disposition="meta",contentText=s(payload.text,raw.instructions)??null;let model=s(raw.model,payload.model,o(o(raw.turn_context).payload).model),cwd=s(raw.cwd,raw.dir),tokenCount=payload.token_count,usageInput=usage?.input_tokens??tokenCount?.input??tokenCount?.input_tokens??void 0,usageOutput=usage?.output_tokens??tokenCount?.output??tokenCount?.output_tokens??void 0,cacheRead=usage?.cached_input_tokens??void 0,turnPayload=raw.turn_context?.payload,turnInputTokens=turnPayload?.input_tokens,turnOutputTokens=turnPayload?.output_tokens,finalInput=usageInput!==void 0?usageInput:turnInputTokens,finalOutput=usageOutput!==void 0?usageOutput:turnOutputTokens,costUsd=computeCost(finalInput,finalOutput,model),usageCarrier=finalInput!==void 0||finalOutput!==void 0?{input:finalInput??null,output:finalOutput??null,cacheRead:cacheRead??null}:void 0,stripUsage=role==="meta"&&usageCarrier!==void 0,messageSplitIndex=entries.length;entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition,ts,duration_ms:void 0,model:model??null,input_tokens:stripUsage?null:finalInput??null,output_tokens:stripUsage?null:finalOutput??null,cache_read_tokens:stripUsage?null:cacheRead??null,...usageCarrier!==void 0?{_codexUsageCarrier:usageCarrier}:{},cache_write_tokens:null,cost_usd:costUsd??null,content_text:contentText,cwd:cwd??null,provenance:"ambient"}});let toolItems=[];if((recordType==="response_item"||recordType==="function_call"||recordType==="custom_tool_call")&&(payloadType==="function_call"||payloadType==="custom_tool_call"))toolItems.push(payload);else if(payload.response_item)toolItems.push(payload.response_item);else if(Array.isArray(payload.response_items))toolItems.push(...payload.response_items);for(let item of toolItems){let fc=item.function_call??item,toolName=s(fc.name)??"",args=fc.arguments??fc.input;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq,tool_name:toolName,call_id:s(fc.call_id),args_digest:argsDigest(args),args_raw:maybeArgsRaw("codex",toolName,args),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function agySplit(raw,context){let entries=[],recordType=String(raw.type??""),explicitSessionId=s(raw.session_id,raw.conversation_id,raw.conversationId),pathSessionId=context?.sourceFile?sessionIdFromSourcePath("agy",context.sourceFile):void 0,sessionId=explicitSessionId??pathSessionId??"unknown",seq=typeof raw.seq==="number"?raw.seq:typeof raw.step_index==="number"?raw.step_index:context?.sourceLine??0,ts=timestampOf(raw.created_at,raw.timestamp,raw.ts),role,disposition,contentText=null,messageRecordType=recordType;if(raw.display!==void 0)role="user",disposition="keep",contentText=s(raw.display)??null,messageRecordType=recordType.length>0?recordType:"USER_INPUT";else switch(recordType){case"USER_INPUT":case"ASK_QUESTION":role="user",disposition="keep",contentText=s(raw.content,raw.text,raw.message)??null;break;case"PLANNER_RESPONSE":role="assistant",disposition="keep",contentText=s(raw.content,raw.text,raw.message,raw.plan)??null;break;case"ERROR_MESSAGE":role="system",disposition="keep",contentText=s(raw.content,raw.text,raw.message)??null;break;case"RUN_COMMAND":case"VIEW_FILE":case"GREP_SEARCH":case"LIST_DIRECTORY":case"READ_URL_CONTENT":role="tool",disposition="keep",contentText=s(raw.content,raw.command,raw.file_path,raw.pattern)??null;break;case"CODE_ACTION":case"INVOKE_SUBAGENT":role="tool",disposition="keep",contentText=s(raw.content,raw.text)??null;break;case"CONVERSATION_HISTORY":case"CHECKPOINT":case"GENERIC":role="meta",disposition="meta",contentText=s(raw.content,raw.text)??null;break;default:if(recordType.length===0)role="unknown",disposition="unknown";else role="meta",disposition="meta",contentText=s(raw.content,raw.text)??null;break}let messageSplitIndex=entries.length;if(entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:messageRecordType,disposition,ts,duration_ms:void 0,model:null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:contentText,cwd:s(raw.workspace,raw.cwd)??null,provenance:"ambient"}}),recordType==="PLANNER_RESPONSE"&&Array.isArray(raw.tool_calls))for(let tc of raw.tool_calls)entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:messageSplitIndex,session_id:sessionId,seq:typeof tc.step_index==="number"?tc.step_index:seq,tool_name:String(tc.name??tc.tool_name??""),args_digest:argsDigest(tc.input??tc.arguments),args_raw:maybeArgsRaw("agy",String(tc.name??tc.tool_name??""),tc.input??tc.arguments),status:"ok",started_at:void 0,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:void 0}});for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex}))entries.push(skillCallEntry(record2));return entries}function geminiSplit(raw,context){let recordType=String(raw.type??(raw.kind!==void 0?"session":raw.$set!==void 0?"state":"")),state=o(raw.$set),sessionId=sessionIdFromContext(context,raw),seq=context?.sourceLine??0,ts=timestampOf(raw.timestamp,raw.startTime,raw.lastUpdated,state.lastUpdated);if(recordType==="session"||recordType==="state")return[{targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,content_text:s(state.summary)??null,provenance:"ambient"}}];let role=recordType==="gemini"?"assistant":recordType==="user"?"user":"system",tokens=o(raw.tokens),content=geminiContent(raw),entries=[{targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",ts,duration_ms:null,model:s(raw.model)??null,input_tokens:numberOrNull(tokens.input),output_tokens:numberOrNull(tokens.output),cache_read_tokens:numberOrNull(tokens.cached),cache_write_tokens:null,cost_usd:null,content_text:content,cwd:null,provenance:"ambient"}}];if(Array.isArray(raw.toolCalls))for(let value of raw.toolCalls){if(value===null||typeof value!=="object"||Array.isArray(value))continue;let tool=value,status=s(tool.status)??"unknown",timestamp=s(tool.timestamp),result=tool.result??tool.resultDisplay;entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:s(tool.name,tool.displayName)??"unknown",args_digest:argsDigest(tool.args),args_raw:maybeArgsRaw("gemini",s(tool.name,tool.displayName)??"",tool.args),status,started_at:timestamp,completed_at:timestamp,duration_ms:null,result_bytes:result===void 0?null:new TextEncoder().encode(JSON.stringify(result)).byteLength,error_text:status==="error"?s(tool.resultDisplay,tool.result)??null:null}})}for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex:0}))entries.push(skillCallEntry(record2));return entries}function dshSplit(raw,context){let recordType=String(raw.type??"");if(recordType==="session")return[{targetTable:"history_message",record:{session_id:s(raw.id)??sessionIdFromSourcePath("deepseek",context?.sourceFile??"")??"unknown",seq:0,role:"meta",record_type:"session",disposition:"meta",ts:timestampOf(raw.createdAt),cwd:s(raw.cwd)??null,content_text:null,provenance:"ambient"}}];if(recordType!=="user/message"&&recordType!=="assistant/message")return[];let data=o(raw.data),msg=o(data.message),seq=typeof raw.seq==="number"?raw.seq:context?.sourceLine??0,sessionId=sessionIdFromSourcePath("deepseek",context?.sourceFile??"")??"unknown",role=recordType==="user/message"?"user":"assistant",source=o(data.source??msg.source),model=s(source.model,o(data.model??msg.model).model),usage=data.usage??msg.usage,messageId=s(msg.id,data.id);return[{targetTable:"history_message",record:{session_id:sessionId,seq,role,record_type:recordType,disposition:"keep",...messageId!==void 0?{source_record_id:messageId}:{},ts:timestampOf(raw.time,data.time,msg.time),duration_ms:null,model:model??null,input_tokens:numberOrNull(usage?.input_tokens??usage?.input)??null,output_tokens:numberOrNull(usage?.output_tokens??usage?.output)??null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:extractContentText(data.content??msg.content)??s(data.text,msg.text)??null,cwd:null,provenance:"ambient"}}]}var UUID_PATTERN="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}",AGY_BRAIN_REGEX=new RegExp(`(?:^|\\/)brain\\/(${UUID_PATTERN})(?:\\/|$)`,"i"),DSH_SESSION_REGEX=new RegExp(`(?:^|\\/)session-(${UUID_PATTERN})(?:\\/|$)`,"i"),CODEX_ROLLOUT_REGEX=new RegExp(`(?:^|-|_)(${UUID_PATTERN})$`,"i");function sessionIdFromSourcePath(source,sourceFile){let normalized=sourceFile.replace(/\\/g,"/"),sLower=source.toLowerCase();if(sLower==="agy"||sLower==="antigravity")return normalized.match(AGY_BRAIN_REGEX)?.[1];if(sLower==="deepseek")return normalized.match(DSH_SESSION_REGEX)?.[1];if(sLower==="codex"){let basename=normalized.split("/").at(-1)??"";if(basename.startsWith("rollout-")&&basename.endsWith(".jsonl"))return basename.slice(0,-6).match(CODEX_ROLLOUT_REGEX)?.[1]}return}function sessionIdFromContext(context,raw){if(context!==void 0){let file2=context.sourceFile.split("/").at(-1);if(file2!==void 0)return file2.replace(/\.jsonl$/,"")}return s(raw.sessionId,raw.id)??"unknown"}function geminiContent(raw){let content=extractContentText(raw.content)??s(raw.text),thoughts=Array.isArray(raw.thoughts)?raw.thoughts.map((value)=>value!==null&&typeof value==="object"?s(o(value).description):void 0).filter((value)=>value!==void 0).join(`
508
- `):"";return[content,thoughts].filter((value)=>value!==void 0&&value.length>0).join(`
509
- `)||null}function numberOrNull(value){return typeof value==="number"&&Number.isFinite(value)?value:null}function normalizeGrokRecord(raw){let params=raw.params,update=params?.update,isUpdatesShape=typeof raw.method==="string"&&params!==void 0&&update!==void 0,body=isUpdatesShape?update:raw,recordType=String((isUpdatesShape?update?.sessionUpdate:raw.type)??raw.sessionUpdate??raw.eventType??(raw.file_snapshots!==void 0||raw.after_snapshots!==void 0?"file_snapshot":raw.prompt!==void 0?"user_message":raw.answer!==void 0||raw.question!==void 0?"assistant":"")),sessionId=s(params?.sessionId,raw.session_id,raw.sessionId,raw.parentSessionId,raw.btwSessionId,raw.params?.sessionId)??"unknown",ts=normalizeTs(raw.ts??raw.timestamp??raw.created_at??raw.askedAt??body.ts??body.timestamp),seq=typeof raw.seq==="number"?raw.seq:typeof body.seq==="number"?body.seq:0,meta3=body._meta??params?._meta??raw._meta,model=s(meta3?.modelId,body.model,raw.model),contentText=extractGrokContent(body.content??body.text??raw.content??raw.text??raw.prompt??(raw.answer!==void 0||raw.question!==void 0?[raw.question,raw.answer].filter((value)=>typeof value==="string").join(`
510
- `):void 0)),usage=body.usage??raw.usage,toolMeta=meta3?.["x.ai/tool"],titleFallback=s(body.title)?.split("`")[0]?.trim(),toolName=s(toolMeta?.name,body.kind,body.tool_name,body.name,raw.tool_name,raw.name)??(titleFallback!==void 0&&titleFallback.length>0&&titleFallback.length<=40?titleFallback:""),toolArgs=body.rawInput??body.input??body.arguments??toolMeta?.input??raw.input??raw.arguments,toolStatus=s(body.status,raw.outcome,raw.status)??"ok",durationMs=typeof body.duration_ms==="number"?body.duration_ms:typeof raw.duration_ms==="number"?raw.duration_ms:typeof usage?.apiDurationMs==="number"?usage.apiDurationMs:void 0,errorText=body.error!==void 0?String(body.error):raw.error!==void 0?String(raw.error):void 0,hasTypeDiscriminator=recordType.length>0||isUpdatesShape;return{recordType,sessionId,ts,seq,body,model,contentText,usage,toolName,toolArgs,toolStatus,durationMs,errorText,hasTypeDiscriminator}}function normalizeTs(value){return timestampOf(value)}function extractGrokContent(content){if(typeof content==="string")return content;if(content!==null&&typeof content==="object"&&!Array.isArray(content)){let c=content;if(typeof c.text==="string")return c.text;if(typeof c.content==="string")return c.content}if(Array.isArray(content)){let parts=[];for(let block of content)if(typeof block==="string")parts.push(block);else if(block!==null&&typeof block==="object"){let b=block;if(typeof b.text==="string")parts.push(b.text)}return parts.length>0?parts.join(`
511
- `):null}return null}var GROK_META_TYPES=new Set(["phase_changed","permission_requested","permission_resolved","mcp_server_starting","mcp_server_connected","mcp_config_resolved","mcp_managed_config_result","mcp_transport_decode_error","mcp_init_completed","mcp_health_check","loop_started","first_token","agent_thought_chunk","hook_execution","plan","session_recap","task_backgrounded","task_completed","retry_state","auto_compact_started","auto_compact_completed","compaction_checkpoint","image_compressed","reasoning","system","turn_started","turn_ended","yolo_toggled"]);function grokSplit(raw,context){let entries=[],n=normalizeGrokRecord(raw),{recordType,sessionId,ts,seq}=n;if(recordType==="turn_completed"){let usage=n.usage,modelUsage=usage?.modelUsage,modelFromUsage=modelUsage!==null&&typeof modelUsage==="object"?Object.keys(modelUsage)[0]:void 0,model=s(n.model,modelFromUsage),inputTokens=usage?.inputTokens??usage?.input??usage?.input_tokens,outputTokens=usage?.outputTokens??usage?.output??usage?.output_tokens,cacheRead=usage?.cachedReadTokens??usage?.cache_read_tokens;return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:n.durationMs??usage?.apiDurationMs??null,model:model??null,input_tokens:inputTokens??null,output_tokens:outputTokens??null,cache_read_tokens:cacheRead??null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries}if(recordType==="tool_started")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:n.toolName,args_digest:argsDigest(n.toolArgs),args_raw:maybeArgsRaw("grok",n.toolName,n.toolArgs),status:n.toolStatus||"ok",started_at:ts,completed_at:void 0,duration_ms:void 0,result_bytes:void 0,error_text:n.errorText}}),entries;if(recordType==="tool_completed")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:n.durationMs??null,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:n.toolName,args_digest:null,args_raw:void 0,status:n.toolStatus||"ok",started_at:void 0,completed_at:ts,duration_ms:n.durationMs,result_bytes:void 0,error_text:n.errorText}}),entries;if(recordType==="tool_call"||recordType==="tool_call_update"){entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries.push({targetTable:"history_tool_call",record:{_messageSplitIndex:0,session_id:sessionId,seq,tool_name:n.toolName,args_digest:argsDigest(n.toolArgs),args_raw:maybeArgsRaw("grok",n.toolName,n.toolArgs),status:n.toolStatus||"ok",started_at:recordType==="tool_call"?ts:void 0,completed_at:recordType==="tool_call_update"?ts:void 0,duration_ms:n.durationMs,result_bytes:void 0,error_text:n.errorText}});for(let record2 of extractSkillCalls(raw,context,{sessionId,seq,messageSplitIndex:0}))entries.push(skillCallEntry(record2));return entries}if(recordType==="user"||recordType==="user_message"||recordType==="user_message_chunk"||recordType==="message")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"user",record_type:recordType||"user_message",disposition:"keep",ts,duration_ms:void 0,model:null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;if(recordType==="assistant"||recordType==="agent_message_chunk")return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"assistant",record_type:recordType,disposition:"keep",ts,duration_ms:void 0,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;if(GROK_META_TYPES.has(recordType))return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,duration_ms:n.durationMs??null,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;if(!n.hasTypeDiscriminator||recordType.length===0)return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"unknown",record_type:stableFieldShape(raw),disposition:"unknown",ts,duration_ms:void 0,model:null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries;return entries.push({targetTable:"history_message",record:{session_id:sessionId,seq,role:"meta",record_type:recordType,disposition:"meta",ts,duration_ms:n.durationMs??null,model:n.model??null,input_tokens:null,output_tokens:null,cache_read_tokens:null,cache_write_tokens:null,cost_usd:null,content_text:n.contentText,cwd:null,provenance:"ambient"}}),entries}function o(value){return typeof value==="object"&&value!==null?value:{}}function s(...values){for(let value of values){if(typeof value==="string"&&value.length>0)return value;if(typeof value==="number"&&Number.isFinite(value))return String(value)}return}function timestampOf(...values){for(let value of values){if(typeof value==="number"&&Number.isFinite(value)){let ms=value>1000000000000?value:value*1000;return new Date(ms).toISOString()}if(typeof value==="string"&&value.length>0){let asNum=Number(value);if(Number.isFinite(asNum)&&/^\d+(\.\d+)?$/.test(value.trim())){let ms=asNum>1000000000000?asNum:asNum*1000;return new Date(ms).toISOString()}return value}}return}function mapRole(type){let t=String(type??"").toLowerCase();if(t==="user"||t==="human"||t==="developer")return"user";if(t==="assistant"||t==="ai"||t==="model")return"assistant";if(t==="system"||t==="error")return"system";return t||"unknown"}function computeCost(inputTokens,outputTokens,model){if(inputTokens===void 0||inputTokens===null)return;if(outputTokens===void 0||outputTokens===null)return;let inputRate=model?.toLowerCase().includes("claude")?3:1,outputRate=model?.toLowerCase().includes("claude")?15:5;return(inputTokens*inputRate+outputTokens*outputRate)/1e6}function extractContentText(content){if(typeof content==="string")return content;if(!Array.isArray(content))return;let parts=[];for(let block of content){if(typeof block!=="object"||block===null)continue;let b=block;if(typeof b.text==="string")parts.push(b.text)}return parts.length>0?parts.join(`
512
- `):void 0}function stableFieldShape(raw){return Object.keys(raw).map((k)=>k.toLowerCase()).sort().join("+")}var CLAUDE_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),PI_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),OMP_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),CODEX_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),AGY_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),GROK_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),GEMINI_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(TOOL_CALL_MAPPER_KEYS,SKILL_CALL_MAPPER_KEYS)),DSH_FIELD_MAP=identityFieldMap(MESSAGE_MAPPER_KEYS.concat(["source_record_id"])),passthroughSchema=exports_external.object({}).passthrough(),CLAUDE_SCHEMA=passthroughSchema,PI_SCHEMA=passthroughSchema,OMP_SCHEMA=passthroughSchema,CODEX_SCHEMA=passthroughSchema,AGY_SCHEMA=passthroughSchema,GROK_SCHEMA=passthroughSchema,GEMINI_SCHEMA=passthroughSchema,DSH_SCHEMA=passthroughSchema;var sourceRecordSchema=exports_external.object({source_record_id:exports_external.string().min(1),created_at:exports_external.string().min(1),content:exports_external.string().min(1),role:exports_external.string().optional(),model:exports_external.string().optional()}).passthrough();function firstString(...values){for(let value of values){if(typeof value==="string"&&value.length>0)return value;if(typeof value==="number"&&Number.isFinite(value))return String(value)}return}function defaultCreatedAt(value){return firstString(value)??new Date(0).toISOString()}function defaultRecordId(value,raw,context){return firstString(value,raw.id,raw.uuid,raw.message_id,raw.messageId,raw.session_id,raw.sessionId,raw.conversation_id)??`${context.source}:${context.sourceFile}:${context.sourceLine}:${context.splitIndex}`}function defaultContent(value,raw){return firstString(value,raw.content,raw.text,raw.message,raw.prompt,raw.response,raw.output)}function transforms(){return{source_record_id:defaultRecordId,created_at:defaultCreatedAt,content:defaultContent,role:(value,raw)=>firstString(value,raw.role,raw.type),model:(value,raw)=>firstString(value,raw.model,raw.model_name,raw.modelName)}}function sourceDefinition(source,displayName,defaultRoots,filePatterns){return{source,displayName,defaultRoots,filePatterns,targetTable:`history_etl_${source}`,splitConfig:source==="pi"?{mode:"one-to-many",field:"messages"}:{mode:"one-to-one"},fieldMap:{id:"source_record_id",uuid:"source_record_id",message_id:"source_record_id",messageId:"source_record_id",session_id:"source_record_id",sessionId:"source_record_id",conversation_id:"source_record_id",timestamp:"created_at",created_at:"created_at",createdAt:"created_at",time:"created_at",content:"content",text:"content",message:"content",prompt:"content",response:"content",output:"content",role:"role",type:"role",model:"model",model_name:"model",modelName:"model"},fieldTransforms:transforms(),schema:sourceRecordSchema}}function customSourceDefinition(source,displayName,defaultRoots,filePatterns,split,fieldMap,schema){return{source,displayName,defaultRoots,filePatterns,targetTable:`history_etl_${source}`,splitConfig:{mode:"custom",split},fieldMap,fieldTransforms:{},schema}}var SOURCE_DEFINITIONS={pi:customSourceDefinition("pi","Pi",[".pi/agent/sessions"],["*.jsonl"],piSplit,PI_FIELD_MAP,PI_SCHEMA),claude:customSourceDefinition("claude","Claude Code",[".claude/projects"],["*.jsonl"],claudeSplit,CLAUDE_FIELD_MAP,CLAUDE_SCHEMA),codex:customSourceDefinition("codex","Codex",[".codex/sessions"],["*.jsonl"],codexSplit,CODEX_FIELD_MAP,CODEX_SCHEMA),omp:customSourceDefinition("omp","OMP",[".omp/agent/sessions"],["*.jsonl"],ompSplit,OMP_FIELD_MAP,OMP_SCHEMA),grok:customSourceDefinition("grok","Grok",[".grok/sessions"],["*.jsonl"],grokSplit,GROK_FIELD_MAP,GROK_SCHEMA),agy:{...customSourceDefinition("agy","Antigravity CLI",[".gemini/antigravity-cli"],["*.jsonl"],agySplit,AGY_FIELD_MAP,AGY_SCHEMA),corruptLinePolicy:"skip"},gemini:customSourceDefinition("gemini","Gemini CLI",[".gemini/tmp",".config/gemini"],["*.jsonl"],geminiSplit,GEMINI_FIELD_MAP,GEMINI_SCHEMA),deepseek:{...customSourceDefinition("deepseek","DeepSeek dsh",[".dsh/sessions"],["session.v3.jsonl","session.v3.jsonl.zstd"],dshSplit,DSH_FIELD_MAP,DSH_SCHEMA),corruptLinePolicy:"skip"},opencode:sourceDefinition("opencode","OpenCode",[".opencode",".local/share/opencode"],["*.jsonl"]),antigravity:sourceDefinition("antigravity","Antigravity",[".antigravity"],["*.jsonl"]),openclaw:sourceDefinition("openclaw","OpenClaw",[".openclaw"],["*.jsonl"])};var TYPED_HISTORY_TABLES=["history_message","history_tool_call","history_skill_call"];var BOOKKEEPING_HISTORY_TABLES=["history_import_checkpoint","history_import_ledger"],IMPORTER_OWNED_TABLES=[...TYPED_HISTORY_TABLES,...BOOKKEEPING_HISTORY_TABLES,...Object.values(SOURCE_DEFINITIONS).map((def)=>def.targetTable)];var SPUR_OWNED_HISTORY_TABLES=["history_run_session","history_task_session","history_tool_alias_map","history_daily_stats","history_board_loop_findings","history_board_message_5m","history_board_model_stats","history_board_ranked_steps","history_board_rollup_meta","history_board_rollup_watermark","history_board_rollup_bucket","history_board_session_stats","history_board_skill_5m","history_board_source_daily","history_board_source_stats","history_board_dimension_daily","history_board_kpi_window","history_board_tool_5m","history_board_tool_stats"],HISTORY_RESET_TABLES=[...IMPORTER_OWNED_TABLES,...SPUR_OWNED_HISTORY_TABLES];var IMPORTER_SCHEMA_LEDGER_PREFIX="importer_schema@";class ActionRunDao{db;constructor(db2){this.db=db2}async completedAtById(id){return(await this.db.queryFirst("SELECT completed_at FROM action_runs WHERE id = ?",id))?.completed_at??null}async setStartedAt(id,startedAt){await this.db.run("UPDATE action_runs SET started_at = ? WHERE id = ?",startedAt,id)}async actionRowsByRunId(runId){try{return await this.db.queryAll("SELECT id, node, kind, status, duration_ms, ok, result_json, started_at, completed_at, created_at FROM action_runs WHERE run_id = ? ORDER BY created_at",runId)}catch(error51){if(error51 instanceof Error&&error51.message.includes("no such table: action_runs"))return[];throw error51}}}init_dist4();init_schema();init_schema();init_schema();var workspacesTable=defineTable("workspaces",{id:text("id").primaryKey(),name:text("name").notNull().unique(),root:text("root").notNull(),purpose:text("purpose"),defaultAgent:text("default_agent"),...standardColumns}),workspaces=workspacesTable.table;var runsTable=defineTable("runs",{id:text("id").primaryKey(),workspaceId:text("workspace_id").references(()=>workspaces.id),workflowName:text("workflow_name"),mode:text("mode"),status:text("status").notNull(),agent:text("agent"),externalKey:text("external_key"),startedAt:integer2("started_at").notNull(),completedAt:integer2("completed_at"),metadataJson:text("metadata_json").notNull().default("{}"),...standardColumns}),runs=runsTable.table;var artifactsTable=defineTable("artifacts",{id:text("id").primaryKey(),runId:text("run_id").references(()=>runs.id),path:text("path").notNull(),kind:text("kind").notNull(),...standardColumns}),artifacts=artifactsTable.table;function createId(prefix){return`${prefix}_${crypto.randomUUID()}`}class ArtifactDao extends EntityDao{constructor(adapter){super(adapter,artifacts,[artifacts.id],"artifacts")}record(input){return super.create({id:createId("artifact"),runId:input.runId??null,path:input.path,kind:input.kind})}artifactsByRunId(runId){return this.adapter.queryAll("SELECT path, kind FROM artifacts WHERE run_id = ? ORDER BY id",runId)}artifactsWithIdByRunId(runId){return this.adapter.queryAll("SELECT id, path, kind FROM artifacts WHERE run_id = ? ORDER BY id",runId)}}init_schema();var phaseRunsTable=defineTable("phase_runs",{id:text("id").primaryKey(),runId:text("run_id").notNull().references(()=>runs.id),phase:text("phase").notNull(),status:text("status").notNull(),startedAt:integer2("started_at"),completedAt:integer2("completed_at"),...standardColumns}),phaseRuns=phaseRunsTable.table;init_dist4();function normalizePersistedWorkflowLayer(layer){if(layer==="bundled")return"shared";if(layer==="project"||layer==="registered"||layer==="shared")return layer;return null}class RunDao extends EntityDao{constructor(adapter){super(adapter,runs,[runs.id],"runs")}open(input={}){return super.create({id:createId("run"),workspaceId:input.workspaceId??null,status:input.status??"pending",agent:input.agent??null,startedAt:Date.now(),completedAt:null})}traceRows(filter){return this.adapter.queryAll(`SELECT id, workflow_name, mode, status, agent, started_at, completed_at, metadata_json
532
+ `.trim();init_zod();var sourceRecordSchema=exports_external.object({source_record_id:exports_external.string().min(1),created_at:exports_external.string().min(1),content:exports_external.string().min(1),role:exports_external.string().optional(),model:exports_external.string().optional()}).passthrough();function firstString(...values){for(let value of values){if(typeof value==="string"&&value.length>0)return value;if(typeof value==="number"&&Number.isFinite(value))return String(value)}return}function defaultCreatedAt(value){return firstString(value)??new Date(0).toISOString()}function defaultRecordId(value,raw,context){return firstString(value,raw.id,raw.uuid,raw.message_id,raw.messageId,raw.session_id,raw.sessionId,raw.conversation_id)??`${context.source}:${context.sourceFile}:${context.sourceLine}:${context.splitIndex}`}function defaultContent(value,raw){return firstString(value,raw.content,raw.text,raw.message,raw.prompt,raw.response,raw.output)}function transforms(){return{source_record_id:defaultRecordId,created_at:defaultCreatedAt,content:defaultContent,role:(value,raw)=>firstString(value,raw.role,raw.type),model:(value,raw)=>firstString(value,raw.model,raw.model_name,raw.modelName)}}function sourceDefinition(source,displayName,defaultRoots,filePatterns){return{source,displayName,defaultRoots,filePatterns,targetTable:`history_etl_${source}`,splitConfig:source==="pi"?{mode:"one-to-many",field:"messages"}:{mode:"one-to-one"},fieldMap:{id:"source_record_id",uuid:"source_record_id",message_id:"source_record_id",messageId:"source_record_id",session_id:"source_record_id",sessionId:"source_record_id",conversation_id:"source_record_id",timestamp:"created_at",created_at:"created_at",createdAt:"created_at",time:"created_at",content:"content",text:"content",message:"content",prompt:"content",response:"content",output:"content",role:"role",type:"role",model:"model",model_name:"model",modelName:"model"},fieldTransforms:transforms(),schema:sourceRecordSchema}}function customSourceDefinition(source,displayName,defaultRoots,filePatterns,split,fieldMap,schema){return{source,displayName,defaultRoots,filePatterns,targetTable:`history_etl_${source}`,splitConfig:{mode:"custom",split},fieldMap,fieldTransforms:{},schema}}var SOURCE_DEFINITIONS={pi:customSourceDefinition("pi","Pi",[".pi/agent/sessions"],["*.jsonl"],piSplit,PI_FIELD_MAP,PI_SCHEMA),claude:customSourceDefinition("claude","Claude Code",[".claude/projects"],["*.jsonl"],claudeSplit,CLAUDE_FIELD_MAP,CLAUDE_SCHEMA),codex:customSourceDefinition("codex","Codex",[".codex/sessions"],["*.jsonl"],codexSplit,CODEX_FIELD_MAP,CODEX_SCHEMA),omp:customSourceDefinition("omp","OMP",[".omp/agent/sessions"],["*.jsonl"],ompSplit,OMP_FIELD_MAP,OMP_SCHEMA),grok:customSourceDefinition("grok","Grok",[".grok/sessions"],["*.jsonl"],grokSplit,GROK_FIELD_MAP,GROK_SCHEMA),agy:{...customSourceDefinition("agy","Antigravity CLI",[".gemini/antigravity-cli"],["*.jsonl"],agySplit,AGY_FIELD_MAP,AGY_SCHEMA),corruptLinePolicy:"skip"},gemini:customSourceDefinition("gemini","Gemini CLI",[".gemini/tmp",".config/gemini"],["*.jsonl"],geminiSplit,GEMINI_FIELD_MAP,GEMINI_SCHEMA),deepseek:{...customSourceDefinition("deepseek","DeepSeek dsh",[".dsh/sessions"],["session.v3.jsonl","session.v3.jsonl.zstd"],dshSplit,DSH_FIELD_MAP,DSH_SCHEMA),corruptLinePolicy:"skip"},opencode:sourceDefinition("opencode","OpenCode",[".opencode",".local/share/opencode"],["*.jsonl"]),antigravity:sourceDefinition("antigravity","Antigravity",[".antigravity"],["*.jsonl"]),openclaw:sourceDefinition("openclaw","OpenClaw",[".openclaw"],["*.jsonl"])};var TYPED_HISTORY_TABLES=["history_message","history_tool_call","history_skill_call"];var BOOKKEEPING_HISTORY_TABLES=["history_import_checkpoint","history_import_ledger"],IMPORTER_OWNED_TABLES=[...TYPED_HISTORY_TABLES,...BOOKKEEPING_HISTORY_TABLES,...Object.values(SOURCE_DEFINITIONS).map((def)=>def.targetTable)];var SPUR_OWNED_HISTORY_TABLES=["history_run_session","history_task_session","history_tool_alias_map","history_daily_stats","history_board_loop_findings","history_board_message_5m","history_board_model_stats","history_board_ranked_steps","history_board_rollup_meta","history_board_rollup_watermark","history_board_rollup_bucket","history_board_session_stats","history_board_skill_5m","history_board_source_daily","history_board_source_stats","history_board_dimension_daily","history_board_kpi_window","history_board_tool_5m","history_board_tool_stats"],HISTORY_RESET_TABLES=[...IMPORTER_OWNED_TABLES,...SPUR_OWNED_HISTORY_TABLES];var IMPORTER_SCHEMA_LEDGER_PREFIX="importer_schema@";class ActionRunDao{db;constructor(db2){this.db=db2}async completedAtById(id){return(await this.db.queryFirst("SELECT completed_at FROM action_runs WHERE id = ?",id))?.completed_at??null}async setStartedAt(id,startedAt){await this.db.run("UPDATE action_runs SET started_at = ? WHERE id = ?",startedAt,id)}async actionRowsByRunId(runId){try{return await this.db.queryAll("SELECT id, node, kind, status, duration_ms, ok, result_json, started_at, completed_at, created_at FROM action_runs WHERE run_id = ? ORDER BY created_at",runId)}catch(error51){if(error51 instanceof Error&&error51.message.includes("no such table: action_runs"))return[];throw error51}}}init_dist4();init_schema();init_schema();init_schema();var workspacesTable=defineTable("workspaces",{id:text("id").primaryKey(),name:text("name").notNull().unique(),root:text("root").notNull(),purpose:text("purpose"),defaultAgent:text("default_agent"),...standardColumns}),workspaces=workspacesTable.table;var runsTable=defineTable("runs",{id:text("id").primaryKey(),workspaceId:text("workspace_id").references(()=>workspaces.id),workflowName:text("workflow_name"),mode:text("mode"),status:text("status").notNull(),agent:text("agent"),externalKey:text("external_key"),startedAt:integer2("started_at").notNull(),completedAt:integer2("completed_at"),metadataJson:text("metadata_json").notNull().default("{}"),...standardColumns}),runs=runsTable.table;var artifactsTable=defineTable("artifacts",{id:text("id").primaryKey(),runId:text("run_id").references(()=>runs.id),path:text("path").notNull(),kind:text("kind").notNull(),...standardColumns}),artifacts=artifactsTable.table;function createId(prefix){return`${prefix}_${crypto.randomUUID()}`}class ArtifactDao extends EntityDao{constructor(adapter){super(adapter,artifacts,[artifacts.id],"artifacts")}record(input){return super.create({id:createId("artifact"),runId:input.runId??null,path:input.path,kind:input.kind})}artifactsByRunId(runId){return this.adapter.queryAll("SELECT path, kind FROM artifacts WHERE run_id = ? ORDER BY id",runId)}artifactsWithIdByRunId(runId){return this.adapter.queryAll("SELECT id, path, kind FROM artifacts WHERE run_id = ? ORDER BY id",runId)}}init_schema();var phaseRunsTable=defineTable("phase_runs",{id:text("id").primaryKey(),runId:text("run_id").notNull().references(()=>runs.id),phase:text("phase").notNull(),status:text("status").notNull(),startedAt:integer2("started_at"),completedAt:integer2("completed_at"),...standardColumns}),phaseRuns=phaseRunsTable.table;init_dist4();function normalizePersistedWorkflowLayer(layer){if(layer==="bundled")return"shared";if(layer==="project"||layer==="registered"||layer==="shared")return layer;return null}class RunDao extends EntityDao{constructor(adapter){super(adapter,runs,[runs.id],"runs")}open(input={}){return super.create({id:createId("run"),workspaceId:input.workspaceId??null,status:input.status??"pending",agent:input.agent??null,startedAt:Date.now(),completedAt:null})}traceRows(filter){return this.adapter.queryAll(`SELECT id, workflow_name, mode, status, agent, started_at, completed_at, metadata_json
513
533
  FROM runs
514
534
  WHERE (?1 IS NULL OR workflow_name = ?1)
515
535
  AND (?2 IS NULL OR status = ?2)
@@ -520,7 +540,7 @@ CREATE INDEX IF NOT EXISTS idx_history_skill_call_invocation_kind
520
540
  OR (started_at = ?4 AND id < ?5)
521
541
  )
522
542
  ORDER BY started_at DESC, id DESC
523
- LIMIT ?6`,filter.workflow??null,filter.status??null,filter.since??null,filter.before?.started_at??null,filter.before?.id??null,filter.limit)}traceRowById(runId){return this.adapter.queryFirst("SELECT id, workflow_name, mode, status, agent, started_at, completed_at, metadata_json FROM runs WHERE id = ?",runId)}mergeMetadata(runId,patch){return this.adapter.run(`UPDATE runs
543
+ LIMIT ?6`,filter.workflow??null,filter.status??null,filter.since??null,filter.before?.started_at??null,filter.before?.id??null,filter.limit)}traceRowById(runId){return this.adapter.queryFirst("SELECT id, workflow_name, mode, status, agent, started_at, completed_at, terminal_reason, metadata_json FROM runs WHERE id = ?",runId)}mergeMetadata(runId,patch){return this.adapter.run(`UPDATE runs
524
544
  SET metadata_json = json_patch(
525
545
  COALESCE(NULLIF(metadata_json, ''), '{}'),
526
546
  ?1
@@ -551,7 +571,7 @@ CREATE INDEX IF NOT EXISTS idx_history_skill_call_invocation_kind
551
571
  ORDER BY started_at ASC`,cutoffIso)}async finalizeStale(runId,reason){let nowIso=new Date().toISOString();await this.adapter.run(`UPDATE runs
552
572
  SET status = 'failed', completed_at = ?1, updated_at = ?1,
553
573
  metadata_json = json_set(COALESCE(NULLIF(metadata_json, ''), '{}'), '$.staleReason', ?2)
554
- WHERE id = ?3 AND status IN ('running', 'pending')`,nowIso,reason,runId)}async setPid(runId,pid){await this.adapter.run("UPDATE runs SET pid = ? WHERE id = ?",pid,runId)}async getPid(runId){return(await this.adapter.queryFirst("SELECT pid FROM runs WHERE id = ?",runId))?.pid??null}}init_schema();var transitionRunsTable=defineTable("transition_runs",{id:text("id").primaryKey(),runId:text("run_id").notNull().references(()=>runs.id),fromState:text("from_state").notNull(),toState:text("to_state").notNull(),trigger:text("trigger"),status:text("status").notNull(),...standardColumns}),transitionRuns=transitionRunsTable.table;init_schema();var workflowStatesTable=defineTable("workflow_states",{id:text("id").primaryKey(),runId:text("run_id").notNull().references(()=>runs.id),state:text("state").notNull(),dataJson:text("data_json").notNull(),...standardColumns}),workflowStates=workflowStatesTable.table;init_dist6();class WorkflowValidationError extends Error{details;constructor(message,details){super(message);this.details=details,this.name="WorkflowValidationError"}}class FSMError extends Error{details;constructor(message,details){super(message);this.details=details,this.name="FSMError"}}class RunCollisionError extends Error{constructor(runId){super(`Workflow run "${runId}" already exists`);this.name="RunCollisionError"}}class WorkflowResumeError extends Error{details;constructor(message,details){super(message);this.details=details,this.name="WorkflowResumeError"}}init_dist7();init_dist6();var RUNTIME_BUILTIN_KEYS=["workflow","runId","task","state","node","iteration","run","runtime"];function runtimeBuiltins(workflowName,stateOrNodeId,runId,transitionsTaken,mode){return{workflow:workflowName,runId,task:workflowName,state:stateOrNodeId,node:stateOrNodeId,iteration:transitionsTaken,run:runId,runtime:mode}}function allowedEnv(names,source=getProcessEnv()){return Object.fromEntries(names.flatMap((name)=>source[name]===void 0?[]:[[name,source[name]]]))}class RunLifecycle{workflowName;mode;runId;externalKey;persistence;events;logger;ownerAttempt;constructor(runId,workflowName,mode,deps,externalKey){this.workflowName=workflowName,this.mode=mode,this.runId=runId,this.externalKey=externalKey,this.persistence=deps.persistence,this.events=deps.events??(deps.lifecycleBus?new EventBus({lifecycleBus:deps.lifecycleBus}):void 0),this.logger=(deps.logger??getLogger2("workflow")).child({runId,workflow:workflowName,mode})}static forExternalTransition(workflowName,runId,deps,externalKey){return new RunLifecycle(runId,workflowName,"state-machine",deps,externalKey)}static async run(workflowName,mode,deps,options,loop){return await traceAsync("workflow.run",async()=>{let startedAt=new Date().toISOString(),proposed={...RunLifecycle.runRecord(options.runId??crypto.randomUUID(),workflowName,mode,startedAt,options.metadata,options.externalKey),owner_attempt:crypto.randomUUID()},record2=proposed;if(options.externalKey===void 0)await deps.persistence.createRun(proposed);else if(record2=await deps.persistence.createOrAttachRun(proposed),record2.owner_attempt!==proposed.owner_attempt){let snapshot=await deps.persistence.loadLatestStateSnapshot(record2.id);return{runId:record2.id,workflowName:record2.workflow_name,mode:record2.mode==="transition-flow"?"transition-flow":"state-machine",status:record2.status,finalState:snapshot?.state??"",transitionsTaken:snapshotTransitions(snapshot?.data)}}let extKey=record2.external_key??void 0,lifecycle=new RunLifecycle(record2.id,workflowName,mode,deps,extKey);return lifecycle.ownerAttempt=proposed.owner_attempt??void 0,lifecycle.logger.info("workflow run started"),addSpanEvent("workflow.run.started",{workflowName,mode,runId:lifecycle.runId,dryRun:options.dryRun??!1}),lifecycle.events?.emit("workflow.run.started",{workflowName,mode,runId:lifecycle.runId,dryRun:options.dryRun??!1,externalKey:extKey,severity:"info"}),await lifecycle.execute(loop)},{attributes:{"workflow.name":workflowName,"workflow.mode":mode}})}static async resume(workflowName,mode,deps,runId,externalKey,loop,ownerAttempt){return await traceAsync("workflow.run",async()=>{let lifecycle=new RunLifecycle(runId,workflowName,mode,deps,externalKey);return lifecycle.ownerAttempt=ownerAttempt,lifecycle.logger.info("workflow run resumed"),await lifecycle.execute(loop)},{attributes:{"workflow.name":workflowName,"workflow.mode":mode}})}async finalizeAsOwner(status,completedAt){if(this.ownerAttempt===void 0){await this.persistence.finalizeRun(this.runId,status,completedAt);return}if(await this.persistence.finalizeRun(this.runId,status,completedAt,{ownerAttempt:this.ownerAttempt})===!1)throw this.events?.emit("workflow.run.stale_owner",{runId:this.runId,ownerAttemptId:this.ownerAttempt,status,severity:"warning"}),new WorkflowResumeError(`stale owner "${this.ownerAttempt}" cannot finalize run "${this.runId}" as "${status}": ownership was lost`)}async execute(loop){try{return await loop(this)}catch(error51){try{await this.finalizeAsOwner("failed",new Date().toISOString())}catch(finalizeError){throw AggregateError([error51,finalizeError],"Workflow execution and failure persistence failed")}throw error51}}async enter(stateOrNodeId,transitionsTaken,persist=!0,vars){if(persist){let data={transitionsTaken};if(vars!==void 0)data.effectiveVars=vars;await this.persistence.saveWorkflowState(this.runId,stateOrNodeId,data),await this.persistence.savePhase(this.runId,stateOrNodeId,"running")}addSpanEvent("workflow.node.enter",{runId:this.runId,node:stateOrNodeId,transitionsTaken}),this.events?.emit("workflow.node.enter",{runId:this.runId,node:stateOrNodeId,transitionsTaken,severity:"info"})}async commitHop(from,to,trigger,transitionsTaken,phase,vars){let data={transitionsTaken};if(vars!==void 0)data.effectiveVars=vars;await this.persistence.commitTransition(this.runId,from,to,trigger,to,data,phase),addSpanEvent("workflow.node.transition",{runId:this.runId,from,to,...trigger===null?{}:{trigger}}),this.events?.emit("workflow.node.transition",{runId:this.runId,from,to,trigger,externalKey:this.externalKey,severity:"info"})}async recordTransition(from,to,trigger){await this.persistence.saveTransition(this.runId,from,to,trigger),addSpanEvent("workflow.node.transition",{runId:this.runId,from,to,...trigger===null?{}:{trigger}}),this.events?.emit("workflow.node.transition",{runId:this.runId,from,to,trigger,externalKey:this.externalKey,severity:"info"})}async done(finalState,transitionsTaken){return await this.persistence.savePhase(this.runId,finalState,"done"),await this.finalizeAsOwner("done",new Date().toISOString()),this.logger.info("workflow run done",{finalState,transitionsTaken}),addSpanEvent("workflow.run.done",{runId:this.runId,finalState,transitionsTaken}),this.events?.emit("workflow.run.done",{runId:this.runId,finalState,transitionsTaken,externalKey:this.externalKey,severity:"info"}),this.result("done",finalState,transitionsTaken)}async fail(finalState,transitionsTaken,reason="failed"){return await this.persistence.savePhase(this.runId,finalState,"failed"),await this.finalizeAsOwner("failed",new Date().toISOString()),addSpanEvent("workflow.run.failed",{runId:this.runId,finalState,reason}),this.events?.emit("workflow.run.failed",{runId:this.runId,finalState,reason,externalKey:this.externalKey,severity:"error"}),this.logger.warn("workflow run failed",{finalState,transitionsTaken,reason}),this.result("failed",finalState,transitionsTaken,reason)}async pause(stateOrNodeId,transitionsTaken,vars,lastActionResult){let data={transitionsTaken};if(vars!==void 0)data.effectiveVars=vars;if(lastActionResult!==void 0)data.lastActionResult={ok:lastActionResult.ok};return await this.persistence.saveWorkflowState(this.runId,stateOrNodeId,data),await this.persistence.savePhase(this.runId,stateOrNodeId,"paused"),await this.finalizeAsOwner("paused",new Date().toISOString()),this.logger.info("workflow run paused",{stateOrNodeId,transitionsTaken}),addSpanEvent("workflow.run.paused",{runId:this.runId,node:stateOrNodeId,transitionsTaken}),this.events?.emit("workflow.run.paused",{runId:this.runId,node:stateOrNodeId,transitionsTaken,externalKey:this.externalKey,severity:"warning"}),this.result("paused",stateOrNodeId,transitionsTaken)}actionStart(stateOrNodeId,kind){addSpanEvent("workflow.action.start",{runId:this.runId,node:stateOrNodeId,kind}),this.events?.emit("workflow.action.start",{runId:this.runId,node:stateOrNodeId,kind,severity:"info"})}actionDone(stateOrNodeId,kind,durationMs,ok){addSpanEvent("workflow.action.done",{runId:this.runId,node:stateOrNodeId,kind,durationMs,ok}),this.events?.emit("workflow.action.done",{runId:this.runId,node:stateOrNodeId,kind,durationMs,ok,severity:ok?"info":"error"})}warnActionFailed(stateOrNodeId,transitionsTaken,error51){addSpanEvent("workflow.action.failed_continue",{runId:this.runId,node:stateOrNodeId,transitionsTaken,...error51===void 0?{}:{error:error51}}),this.events?.emit("workflow.action.failed_continue",{runId:this.runId,node:stateOrNodeId,transitionsTaken,...error51===void 0?{}:{error:error51},severity:"warning"}),this.logger.warn("action failed (continuing)",{node:stateOrNodeId,transitionsTaken,error:error51})}guardEvaluated(from,to,kind,passed){this.events?.emit("workflow.guard.evaluated",{runId:this.runId,from,to,kind,passed,externalKey:this.externalKey,severity:passed?"info":"warning"})}hitlAsk(node,kind,message){this.events?.emit("workflow.hitl.ask",{runId:this.runId,node,kind,message,severity:"info"})}hitlResponse(node,ok){this.events?.emit("workflow.hitl.response",{runId:this.runId,node,ok,severity:ok?"info":"warning"})}result(status,finalState,transitionsTaken,reason){return{runId:this.runId,workflowName:this.workflowName,mode:this.mode,status,finalState,transitionsTaken,...reason===void 0?{}:{reason}}}static runRecord(runId,workflowName,mode,startedAt,metadata,externalKey){return{id:runId,workflow_name:workflowName,mode,status:"running",started_at:startedAt,metadata_json:JSON.stringify(metadata??{}),completed_at:null,external_key:externalKey??null}}}function snapshotTransitions(data){let value=data?.transitionsTaken;return typeof value==="number"&&Number.isSafeInteger(value)&&value>=0?value:0}function snapshotActionResult(data){let value=data?.lastActionResult;return value!==null&&typeof value==="object"&&"ok"in value&&typeof value.ok==="boolean"?{ok:value.ok}:void 0}class CapabilityRegistry{kind;capabilities=new Map;constructor(kind){this.kind=kind}register(name,capability,origin2="extension"){this.capabilities.set(name,{capability,origin:origin2})}has(name){return this.capabilities.has(name)}get(name){let entry=this.capabilities.get(name);if(entry===void 0)throw Error(`Unknown ${this.kind}: ${name}`);return entry.capability}getEntry(name){return this.capabilities.get(name)}list(){return[...this.capabilities.keys()]}entries(){return[...this.capabilities.entries()]}}function assertRelativeExtensionPath(path8,options={}){let where=options.sourceName!==void 0?` declared by "${options.sourceName}"`:"";if(/^([/\\]|[A-Za-z]:[/\\])/.test(path8))throw Error(`extension path "${path8}"${where} must be relative (no absolute paths)`);if(path8.split(/[/\\]/).includes(".."))throw Error(`extension path "${path8}"${where} must not contain ".." traversal`)}init_zod();var RESERVED_VAR_NAMES=new Set(["task","state","node","iteration","run","runtime"]),IDENTIFIER=/^[A-Za-z_][A-Za-z0-9_]*$/,VarsSchema=exports_external.record(exports_external.string(),exports_external.string()).superRefine((vars,ctx)=>{for(let key of Object.keys(vars)){if(!IDENTIFIER.test(key))ctx.addIssue({code:"custom",message:`Invalid variable name "${key}" (must be a valid identifier)`});if(RESERVED_VAR_NAMES.has(key))ctx.addIssue({code:"custom",message:`Variable name "${key}" is reserved for runtime use`})}}),EnvSchema=exports_external.object({allow:exports_external.array(exports_external.string().regex(IDENTIFIER,"env.allow entries must be valid identifiers")).optional()}),relativeExtensionPath=exports_external.string().min(1).superRefine((value,ctx)=>{try{assertRelativeExtensionPath(value)}catch(error51){ctx.addIssue({code:"custom",message:error51 instanceof Error?error51.message:"invalid extension path"})}}),WorkflowExtensionsSchema=exports_external.object({actions:exports_external.array(relativeExtensionPath).optional(),guards:exports_external.array(relativeExtensionPath).optional()}).strict(),ActionDefSchema=exports_external.object({kind:exports_external.string().min(1),options:exports_external.record(exports_external.string(),exports_external.unknown()).optional(),onError:exports_external.enum(["fail","continue"]).optional()}),GuardDefSchema=exports_external.object({kind:exports_external.string().min(1),options:exports_external.record(exports_external.string(),exports_external.unknown()).optional()}),StateMachineWorkflowDefSchema=exports_external.object({$schema:exports_external.string().optional(),kind:exports_external.literal("state-machine").optional(),name:exports_external.string().min(1),version:exports_external.string().optional(),description:exports_external.string().optional(),initialState:exports_external.string().min(1),terminalStates:exports_external.array(exports_external.string().min(1)).optional(),failureStates:exports_external.array(exports_external.string().min(1)).optional(),iterationBound:exports_external.number().int().positive().optional(),defaultOnError:exports_external.enum(["fail","continue"]).optional(),vars:VarsSchema.optional(),env:EnvSchema.optional(),states:exports_external.array(exports_external.object({id:exports_external.string().min(1),description:exports_external.string().optional(),onEnter:exports_external.array(ActionDefSchema).optional(),onExit:exports_external.array(ActionDefSchema).optional(),pause:exports_external.boolean().optional(),resumeRerun:exports_external.boolean().optional()}).strict()),transitions:exports_external.array(exports_external.object({from:exports_external.string().min(1),to:exports_external.string().min(1),description:exports_external.string().optional(),trigger:exports_external.string().optional(),guard:GuardDefSchema.optional()}).strict()),extensions:WorkflowExtensionsSchema.optional()}).strict(),TransitionFlowWorkflowDefSchema=exports_external.object({$schema:exports_external.string().optional(),kind:exports_external.literal("transition-flow"),name:exports_external.string().min(1),version:exports_external.string().optional(),description:exports_external.string().optional(),initialNode:exports_external.string().min(1),terminalNodes:exports_external.array(exports_external.string().min(1)).optional(),iterationBound:exports_external.number().int().positive().optional(),defaultOnError:exports_external.enum(["fail","continue"]).optional(),vars:VarsSchema.optional(),env:EnvSchema.optional(),nodes:exports_external.array(exports_external.object({id:exports_external.string().min(1),description:exports_external.string().optional(),type:exports_external.enum(["action","gate","parallel","decision"]).optional(),action:ActionDefSchema.optional(),pause:exports_external.boolean().optional(),resumeRerun:exports_external.boolean().optional()}).strict()),edges:exports_external.array(exports_external.object({from:exports_external.string().min(1),to:exports_external.string().min(1),description:exports_external.string().optional(),condition:GuardDefSchema.optional()}).strict()),extensions:WorkflowExtensionsSchema.optional()}).strict(),WorkflowDefSchema=exports_external.union([StateMachineWorkflowDefSchema,TransitionFlowWorkflowDefSchema]);async function loadWorkflowDef(path8,options={}){return parseWorkflowDef(await loadStructuredConfig(path8,options),path8)}function validateWorkflowDef(workflow){if(workflow.kind==="transition-flow")validateTransitionFlow(workflow);else validateStateMachine(workflow)}function validateStateMachine(workflow){let errors6=[],ids=workflow.states.map((state)=>state.id),states=new Set(ids),terminals=new Set(workflow.terminalStates??[]),failures=new Set(workflow.failureStates??[]);for(let id of duplicates(ids))errors6.push(`State "${id}" is declared more than once`);for(let failure of failures)if(!states.has(failure))errors6.push(`Failure state "${failure}" is not declared`);else if(!terminals.has(failure))errors6.push(`Failure state "${failure}" must also be declared as a terminal state`);if(!states.has(workflow.initialState))errors6.push(`Initial state "${workflow.initialState}" is not declared`);else if(terminals.has(workflow.initialState))errors6.push(`Initial state "${workflow.initialState}" must not be a terminal state`);for(let terminal of terminals)if(!states.has(terminal))errors6.push(`Terminal state "${terminal}" is not declared`);let outboundByState=new Map;for(let transition of workflow.transitions){if(!states.has(transition.from))errors6.push(`Transition source "${transition.from}" is not declared`);if(!states.has(transition.to))errors6.push(`Transition target "${transition.to}" is not declared`);let list=outboundByState.get(transition.from)??[];list.push(transition),outboundByState.set(transition.from,list)}for(let state of workflow.states){let outbound=outboundByState.get(state.id)??[];if(terminals.has(state.id)){if(outbound.length>0)errors6.push(`Terminal state "${state.id}" must not declare transitions`);continue}let ungatedIndex=outbound.findIndex((transition)=>transition.guard===void 0);if(ungatedIndex!==-1&&ungatedIndex<outbound.length-1)errors6.push(`State "${state.id}" has an unguarded transition that is not last; later transitions are unreachable`)}errors6.push(...checkVariableReferences(collectActionOptions(workflow),workflow.vars,workflow.env)),throwIfErrors(workflow,errors6)}function parseWorkflowDef(parsed,source){let result=selectWorkflowSchema(parsed).safeParse(parsed);if(!result.success)throw new WorkflowValidationError(`Workflow definition failed schema validation for ${source}: ${formatWorkflowIssues(result.error.issues)}`,result.error.issues);return validateWorkflowDef(result.data),result.data}function selectWorkflowSchema(parsed){if(parsed!==null&&typeof parsed==="object"){let value=parsed;if(value.kind==="transition-flow"||"nodes"in value||"edges"in value||"initialNode"in value)return TransitionFlowWorkflowDefSchema}return StateMachineWorkflowDefSchema}function formatWorkflowIssues(issues){return issues.map((issue2)=>{let path8=issue2.path.map(String).join(".");return path8.length>0?`${path8}: ${issue2.message}`:issue2.message}).join("; ")}function validateTransitionFlow(workflow){let errors6=[],ids=workflow.nodes.map((node)=>node.id),nodes=new Set(ids);for(let id of duplicates(ids))errors6.push(`Node "${id}" is declared more than once`);if(!nodes.has(workflow.initialNode))errors6.push(`Initial node "${workflow.initialNode}" is not declared`);let seenEdges=new Set;for(let edge of workflow.edges){if(!nodes.has(edge.from))errors6.push(`Edge source "${edge.from}" is not declared`);if(!nodes.has(edge.to))errors6.push(`Edge target "${edge.to}" is not declared`);let key=`${edge.from}→${edge.to}`;if(seenEdges.has(key))errors6.push(`Duplicate edge "${key}"`);seenEdges.add(key)}for(let terminal of workflow.terminalNodes??[]){if(!nodes.has(terminal))errors6.push(`Terminal node "${terminal}" is not declared`);if(workflow.edges.some((edge)=>edge.from===terminal))errors6.push(`Terminal node "${terminal}" must not declare edges`)}for(let node of workflow.nodes){let outbound=workflow.edges.filter((edge)=>edge.from===node.id),unconditional=outbound.findIndex((edge)=>edge.condition===void 0);if(unconditional!==-1&&unconditional<outbound.length-1)errors6.push(`Node "${node.id}" has an unconditional edge that is not last; later edges are unreachable`)}errors6.push(...checkVariableReferences(collectActionOptions(workflow),workflow.vars,workflow.env)),throwIfErrors(workflow,errors6)}function duplicates(ids){let seen=new Set,dupes=new Set;for(let id of ids){if(seen.has(id))dupes.add(id);seen.add(id)}return[...dupes]}function collectActionOptions(workflow){let optionSets=[],actions=workflow.kind==="transition-flow"?workflow.nodes.flatMap((node)=>node.action?[node.action]:[]):workflow.states.flatMap((state)=>[...state.onEnter??[],...state.onExit??[]]);for(let action of actions)if(action.options)optionSets.push(action.options);return optionSets}var RUNTIME_TEMPLATE_NAMESPACES=new Set(RUNTIME_BUILTIN_KEYS);function checkVariableReferences(optionSets,vars,env2){let declaredVars=new Set(Object.keys(vars??{})),allowedEnv2=new Set(env2?.allow??[]),errors6=[],reference=/\$\{([^}]+)\}/g;for(let options of optionSets)for(let value of Object.values(options)){if(typeof value!=="string")continue;for(let match of value.matchAll(reference)){let expr=(match[1]??"").trim(),[namespace,name]=expr.includes(".")?expr.split(".",2):[expr,void 0];if(namespace==="vars"){if(name!==void 0&&!declaredVars.has(name))errors6.push(`Unknown variable reference "\${${expr}}" (no var "${name}" declared)`)}else if(namespace==="env"){if(name!==void 0&&!allowedEnv2.has(name))errors6.push(`Env reference "\${${expr}}" is not in env.allow`)}else if(namespace!==void 0&&!RUNTIME_TEMPLATE_NAMESPACES.has(namespace))errors6.push(`Unknown template reference "\${${expr}}"`)}}return errors6}function throwIfErrors(workflow,errors6){if(errors6.length>0)throw new WorkflowValidationError(`Workflow "${workflow.name}" is invalid: ${errors6.join("; ")}`,errors6)}init_dist6();var TEMPLATE_REF=/\$\{([^}]+)\}/g;function mergeVars(workflowVars={},overrideVars={}){return{...workflowVars,...overrideVars}}function mergeSetVars(vars,setVars){if(setVars===void 0)return vars;let filtered={};for(let[key,value]of Object.entries(setVars))if(typeof value==="string")filtered[key]=value;return mergeVars(vars,filtered)}function resolveTemplates(value,context4){if(typeof value==="string")return resolveTemplateString(value,context4);if(Array.isArray(value))return value.map((entry)=>resolveTemplates(entry,context4));if(value!==null&&typeof value==="object")return Object.fromEntries(Object.entries(value).map(([key,entry])=>[key,resolveTemplates(entry,context4)]));return value}function resolveTemplateString(value,context4){return value.replace(TEMPLATE_REF,(_match,name)=>{return lookupRef(name,context4)})}function lookupRef(name,context4){if(name.startsWith("vars.")){let key=name.slice(5),resolved2=context4.vars[key];if(resolved2===void 0)throw new WorkflowValidationError(`Workflow variable "${key}" is not defined`);return resolved2}if(name.startsWith("env.")){let key=name.slice(4),resolved2=context4.env[key];if(resolved2===void 0)throw new WorkflowValidationError(`Environment variable "${key}" is not defined`);return resolved2}let resolved=context4.builtins?.[name];if(resolved===void 0)throw new WorkflowValidationError(`Workflow builtin "${name}" is not defined`);return String(resolved)}var SHELL_ENV_OPTION="__wfShellEnv",SHELL_BINDING=/^\$\{__WF_\d+\}$/,SHELL_BINDING_ANY=/\$\{__WF_\d+\}|\$__WF_\d+\b/;function resolveShellCommandTemplates(options,context4){let{command,args,...rest}=options;if(typeof command!=="string")return resolveTemplates(rest,context4);if(args!==void 0&&!Array.isArray(args))throw Error(`shell action "args" must be a string array when defined; got ${typeof args}`);if(Array.isArray(args)&&args.length>0)return{...resolveTemplates(rest,context4),command:resolveTemplateString(command,context4),args:resolveTemplates(args,context4)};let env2={},index2=0;if(!(SHELL_ENV_OPTION in options)&&SHELL_BINDING_ANY.test(command))throw Error("shell command must not contain the reserved $__WF_ placeholder namespace; it is minted by the template-binding pass");let existingBindings=options[SHELL_ENV_OPTION];if(existingBindings!==void 0&&typeof existingBindings==="object"&&existingBindings!==null){Object.assign(env2,existingBindings);while(`__WF_${index2}`in env2)index2++}let bound=command.replace(TEMPLATE_REF,(match,name)=>{if(SHELL_BINDING.test(match))return match;let key=`__WF_${index2++}`;return env2[key]=lookupRef(name,context4),`\${${key}}`});return{...resolveTemplates(rest,context4),command:bound,[SHELL_ENV_OPTION]:env2}}function resolveOnErrorPolicy(actionOnError,workflowDefault,runOptionOverride){return actionOnError??workflowDefault??runOptionOverride??"fail"}class WorkflowEngineHost{lifecycleBus;actions=new CapabilityRegistry("workflow action");guards=new CapabilityRegistry("workflow guard");constructor(lifecycleBus){this.lifecycleBus=lifecycleBus}registerAction(action,origin2="extension"){return this.actions.register(action.kind,action,origin2),this}registerGuard(guard,origin2="extension"){return this.guards.register(guard.kind,guard,origin2),this}hasAction(kind){return this.actions.has(kind)}hasGuard(kind){return this.guards.has(kind)}listActions(){return this.actions.list()}listGuards(){return this.guards.list()}actionOrigin(kind){return this.actions.getEntry(kind)?.origin}guardOrigin(kind){return this.guards.getEntry(kind)?.origin}async runAction(kind,options,context4){if(!this.actions.has(kind))throw new WorkflowValidationError(`Unknown workflow action "${kind}"`);return await this.actions.get(kind).execute(options,context4)}async evaluateGuard(kind,options,context4){return(await this.evaluateGuardResult(kind,options,context4)).passed}async evaluateGuardResult(kind,options,context4){if(!this.guards.has(kind))throw new WorkflowValidationError(`Unknown workflow guard "${kind}"`);let result=await this.guards.get(kind).evaluate(options,context4);return typeof result==="boolean"?{passed:result}:result}}function createDefaultWorkflowEngineHost(options={}){let host=new WorkflowEngineHost(options.lifecycleBus);return host.registerAction(new NoteActionRunner,"builtin"),host.registerAction(new ShellActionRunner(options.processExecutor??nodeBunFactory2.createProcessExecutor()),"builtin"),host.registerAction(new EventEmitActionRunner,"builtin"),host.registerGuard(new ShellGuardRunner(options.processExecutor??nodeBunFactory2.createProcessExecutor()),"builtin"),host.registerGuard({kind:"always",evaluate:async()=>!0},"builtin"),host.registerGuard({kind:"never",evaluate:async()=>!1},"builtin"),host.registerGuard({kind:"action-ok",evaluate:async(_options,context4)=>context4.lastActionResult?.ok===!0},"builtin"),host}class NoteActionRunner{kind="note";async execute(options,context4){let message=String(options.message??"");return context4?.events?.emit("workflow.hitl.note",{runId:context4.runId,node:context4.stateOrNodeId,message,severity:"info"}),{ok:!0,data:{message}}}}class EventEmitActionRunner{kind="event.emit";async execute(options,context4){let name=String(options.name??"");if(!name)return{ok:!1,error:'event.emit requires a non-empty "name" option'};let payload=options.payload??{};return context4?.events?.emit("workflow.custom",{name,payload,severity:"info"}),{ok:!0,data:{name,payload}}}}async function spawnShellCommand(processExecutor,options,workdir){let command=stringOption(options,"command"),explicitArgs=arrayOption(options,"args"),spawn2=explicitArgs.length===0?{command:"/bin/sh",args:["-c",command]}:{command,args:explicitArgs},timeout=optionalTimeoutOption(options),envOption=options[SHELL_ENV_OPTION],env2=envOption!==null&&typeof envOption==="object"?envOption:void 0,result=await processExecutor.run({command:spawn2.command,args:spawn2.args,cwd:optionalStringOption(options,"cwd",workdir),...env2!==void 0?{env:env2,envMode:"merge"}:{},...timeout!==void 0?{timeout}:{},rejectOnError:!1,forceBuffered:!0});return{stdout:result.stdout,stderr:result.stderr,exitCode:result.exitCode,timedOut:result.outcome==="timeout"}}class ShellActionRunner{processExecutor;kind="shell";constructor(processExecutor){this.processExecutor=processExecutor}async execute(options,context4){let spawn2=await spawnShellCommand(this.processExecutor,options,context4.workdir);if(spawn2.timedOut){let timeout=optionalTimeoutOption(options);return{ok:!1,data:{stdout:spawn2.stdout,stderr:spawn2.stderr,exitCode:spawn2.exitCode,timedOut:!0},error:`Shell action timed out after ${timeout}ms`}}let command=stringOption(options,"command");return{ok:spawn2.exitCode===0,data:{stdout:spawn2.stdout,stderr:spawn2.stderr,exitCode:spawn2.exitCode},...spawn2.exitCode===0?{}:{error:`Command "${command}" exited with ${spawn2.exitCode}`}}}}class ShellGuardRunner{processExecutor;kind="shell";constructor(processExecutor){this.processExecutor=processExecutor}async evaluate(options,context4){let spawn2=await spawnShellCommand(this.processExecutor,options,context4.workdir);return{passed:!spawn2.timedOut&&spawn2.exitCode===0,report:{stdout:spawn2.stdout,stderr:spawn2.stderr,exitCode:spawn2.exitCode,...spawn2.timedOut?{timedOut:!0}:{}}}}}function stringOption(options,key,fallback){let value=options[key];if(typeof value==="string")return value;if(fallback!==void 0)return fallback;throw new WorkflowValidationError(`Action option "${key}" must be a string`)}function optionalStringOption(options,key,fallback){let value=options[key];if(typeof value==="string")return value;if(value===void 0)return fallback;throw new WorkflowValidationError(`Action option "${key}" must be a string`)}function arrayOption(options,key){let value=options[key];if(value===void 0)return[];if(Array.isArray(value)&&value.every((entry)=>typeof entry==="string"))return value;throw new WorkflowValidationError(`Action option "${key}" must be a string array`)}function optionalTimeoutOption(options){let value=options.timeout;if(value===void 0)return;if(typeof value==="number"&&Number.isFinite(value)&&value>0)return value;throw new WorkflowValidationError('shell option "timeout" must be a positive number of milliseconds')}var WORKFLOW_ENGINE_SCHEMA_SQL=`
574
+ WHERE id = ?3 AND status IN ('running', 'pending')`,nowIso,reason,runId)}async setPid(runId,pid){await this.adapter.run("UPDATE runs SET pid = ? WHERE id = ?",pid,runId)}async getPid(runId){return(await this.adapter.queryFirst("SELECT pid FROM runs WHERE id = ?",runId))?.pid??null}}var CHILD_TABLES=["action_runs","phase_runs","transition_runs","workflow_states"];function insertIfAbsentOps(table3,rows,targetColumns){return rows.map((row)=>{let columns2=Object.keys(row).filter((column2)=>targetColumns.has(column2));return{sql:`INSERT INTO ${table3} (${columns2.join(", ")}) VALUES (${columns2.map(()=>"?").join(", ")}) ON CONFLICT(id) DO NOTHING`,params:columns2.map((column2)=>row[column2])}})}async function tableColumns(db2,table3){let rows=await db2.queryAll(`PRAGMA table_info(${table3})`);return new Set(rows.map((row)=>row.name))}async function listRunIds(from){return(await from.queryAll("SELECT id FROM runs")).map((row)=>row.id)}async function transferRunTables(from,to){let persistedIds=[],skipped=[],targetRunsColumns=await tableColumns(to,"runs"),sourceRows=await from.queryAll("SELECT * FROM runs");for(let row of sourceRows){let id=String(row.id);if(await to.queryFirst("SELECT id FROM runs WHERE id = ?",id)!==void 0){skipped.push({id,reason:"id-exists"});continue}if(row.external_key!==null&&row.external_key!==void 0){if(await to.queryFirst("SELECT id FROM runs WHERE external_key IS NOT NULL AND workflow_name IS ? AND external_key = ?",row.workflow_name??null,row.external_key)!==void 0){skipped.push({id,reason:"external-key-conflict"});continue}}let ops=insertIfAbsentOps("runs",[row],targetRunsColumns);for(let table3 of CHILD_TABLES)ops.push(...insertIfAbsentOps(table3,await from.queryAll(`SELECT * FROM ${table3} WHERE run_id = ?`,id),await tableColumns(to,table3)));await to.batch(ops),persistedIds.push(id)}return{persistedIds,skipped}}init_schema();var transitionRunsTable=defineTable("transition_runs",{id:text("id").primaryKey(),runId:text("run_id").notNull().references(()=>runs.id),fromState:text("from_state").notNull(),toState:text("to_state").notNull(),trigger:text("trigger"),status:text("status").notNull(),...standardColumns}),transitionRuns=transitionRunsTable.table;init_schema();var workflowStatesTable=defineTable("workflow_states",{id:text("id").primaryKey(),runId:text("run_id").notNull().references(()=>runs.id),state:text("state").notNull(),dataJson:text("data_json").notNull(),...standardColumns}),workflowStates=workflowStatesTable.table;init_dist6();class WorkflowValidationError extends Error{details;constructor(message,details){super(message);this.details=details,this.name="WorkflowValidationError"}}class FSMError extends Error{details;constructor(message,details){super(message);this.details=details,this.name="FSMError"}}class RunCollisionError extends Error{constructor(runId){super(`Workflow run "${runId}" already exists`);this.name="RunCollisionError"}}class WorkflowResumeError extends Error{details;constructor(message,details){super(message);this.details=details,this.name="WorkflowResumeError"}}init_dist7();init_dist6();var RUNTIME_BUILTIN_KEYS=["workflow","runId","task","state","node","iteration","run","runtime"];function runtimeBuiltins(workflowName,stateOrNodeId,runId,transitionsTaken,mode){return{workflow:workflowName,runId,task:workflowName,state:stateOrNodeId,node:stateOrNodeId,iteration:transitionsTaken,run:runId,runtime:mode}}function allowedEnv(names,source=getProcessEnv()){return Object.fromEntries(names.flatMap((name)=>source[name]===void 0?[]:[[name,source[name]]]))}class RunLifecycle{workflowName;mode;runId;externalKey;persistence;events;logger;ownerAttempt;constructor(runId,workflowName,mode,deps,externalKey){this.workflowName=workflowName,this.mode=mode,this.runId=runId,this.externalKey=externalKey,this.persistence=deps.persistence,this.events=deps.events??(deps.lifecycleBus?new EventBus({lifecycleBus:deps.lifecycleBus}):void 0),this.logger=(deps.logger??getLogger2("workflow")).child({runId,workflow:workflowName,mode})}static forExternalTransition(workflowName,runId,deps,externalKey){return new RunLifecycle(runId,workflowName,"state-machine",deps,externalKey)}static async run(workflowName,mode,deps,options,loop){return await traceAsync("workflow.run",async()=>{let startedAt=new Date().toISOString(),proposed={...RunLifecycle.runRecord(options.runId??crypto.randomUUID(),workflowName,mode,startedAt,options.metadata,options.externalKey),owner_attempt:crypto.randomUUID()},record2=proposed;if(options.externalKey===void 0)await deps.persistence.createRun(proposed);else if(record2=await deps.persistence.createOrAttachRun(proposed),record2.owner_attempt!==proposed.owner_attempt){let snapshot=await deps.persistence.loadLatestStateSnapshot(record2.id);return{runId:record2.id,workflowName:record2.workflow_name,mode:record2.mode==="transition-flow"?"transition-flow":"state-machine",status:record2.status,finalState:snapshot?.state??"",transitionsTaken:snapshotTransitions(snapshot?.data)}}let extKey=record2.external_key??void 0,lifecycle=new RunLifecycle(record2.id,workflowName,mode,deps,extKey);return lifecycle.ownerAttempt=proposed.owner_attempt??void 0,lifecycle.logger.info("workflow run started"),addSpanEvent("workflow.run.started",{workflowName,mode,runId:lifecycle.runId,dryRun:options.dryRun??!1}),lifecycle.events?.emit("workflow.run.started",{workflowName,mode,runId:lifecycle.runId,dryRun:options.dryRun??!1,externalKey:extKey,severity:"info"}),await lifecycle.execute(loop)},{attributes:{"workflow.name":workflowName,"workflow.mode":mode}})}static async resume(workflowName,mode,deps,runId,externalKey,loop,ownerAttempt){return await traceAsync("workflow.run",async()=>{let lifecycle=new RunLifecycle(runId,workflowName,mode,deps,externalKey);return lifecycle.ownerAttempt=ownerAttempt,lifecycle.logger.info("workflow run resumed"),await lifecycle.execute(loop)},{attributes:{"workflow.name":workflowName,"workflow.mode":mode}})}async finalizeAsOwner(status,completedAt,reason){if(this.ownerAttempt===void 0){await this.persistence.finalizeRun(this.runId,status,completedAt,void 0,reason);return}if(await this.persistence.finalizeRun(this.runId,status,completedAt,{ownerAttempt:this.ownerAttempt},reason)===!1)throw this.events?.emit("workflow.run.stale_owner",{runId:this.runId,ownerAttemptId:this.ownerAttempt,status,severity:"warning"}),new WorkflowResumeError(`stale owner "${this.ownerAttempt}" cannot finalize run "${this.runId}" as "${status}": ownership was lost`)}async execute(loop){try{return await loop(this)}catch(error51){try{await this.finalizeAsOwner("failed",new Date().toISOString(),"failed")}catch(finalizeError){throw AggregateError([error51,finalizeError],"Workflow execution and failure persistence failed")}throw error51}}async enter(stateOrNodeId,transitionsTaken,persist=!0,vars){if(persist){let data={transitionsTaken};if(vars!==void 0)data.effectiveVars=vars;await this.persistence.saveWorkflowState(this.runId,stateOrNodeId,data),await this.persistence.savePhase(this.runId,stateOrNodeId,"running")}addSpanEvent("workflow.node.enter",{runId:this.runId,node:stateOrNodeId,transitionsTaken}),this.events?.emit("workflow.node.enter",{runId:this.runId,node:stateOrNodeId,transitionsTaken,severity:"info"})}async commitHop(from,to,trigger,transitionsTaken,phase,vars){let data={transitionsTaken};if(vars!==void 0)data.effectiveVars=vars;await this.persistence.commitTransition(this.runId,from,to,trigger,to,data,phase),addSpanEvent("workflow.node.transition",{runId:this.runId,from,to,...trigger===null?{}:{trigger}}),this.events?.emit("workflow.node.transition",{runId:this.runId,from,to,trigger,externalKey:this.externalKey,severity:"info"})}async recordTransition(from,to,trigger){await this.persistence.saveTransition(this.runId,from,to,trigger),addSpanEvent("workflow.node.transition",{runId:this.runId,from,to,...trigger===null?{}:{trigger}}),this.events?.emit("workflow.node.transition",{runId:this.runId,from,to,trigger,externalKey:this.externalKey,severity:"info"})}async done(finalState,transitionsTaken,reason){return await this.persistence.savePhase(this.runId,finalState,"done"),await this.finalizeAsOwner("done",new Date().toISOString(),reason),this.logger.info("workflow run done",{finalState,transitionsTaken}),addSpanEvent("workflow.run.done",{runId:this.runId,finalState,transitionsTaken}),this.events?.emit("workflow.run.done",{runId:this.runId,finalState,transitionsTaken,externalKey:this.externalKey,severity:"info"}),this.result("done",finalState,transitionsTaken,reason)}async fail(finalState,transitionsTaken,reason="failed"){return await this.persistence.savePhase(this.runId,finalState,"failed"),await this.finalizeAsOwner("failed",new Date().toISOString(),reason),addSpanEvent("workflow.run.failed",{runId:this.runId,finalState,reason}),this.events?.emit("workflow.run.failed",{runId:this.runId,finalState,reason,externalKey:this.externalKey,severity:"error"}),this.logger.warn("workflow run failed",{finalState,transitionsTaken,reason}),this.result("failed",finalState,transitionsTaken,reason)}async pause(stateOrNodeId,transitionsTaken,vars,lastActionResult,reason){let data={transitionsTaken};if(vars!==void 0)data.effectiveVars=vars;if(lastActionResult!==void 0)data.lastActionResult={ok:lastActionResult.ok};return await this.persistence.saveWorkflowState(this.runId,stateOrNodeId,data),await this.persistence.savePhase(this.runId,stateOrNodeId,"paused"),await this.finalizeAsOwner("paused",new Date().toISOString(),reason),this.logger.info("workflow run paused",{stateOrNodeId,transitionsTaken}),addSpanEvent("workflow.run.paused",{runId:this.runId,node:stateOrNodeId,transitionsTaken}),this.events?.emit("workflow.run.paused",{runId:this.runId,node:stateOrNodeId,transitionsTaken,externalKey:this.externalKey,severity:"warning"}),this.result("paused",stateOrNodeId,transitionsTaken)}actionStart(stateOrNodeId,kind){addSpanEvent("workflow.action.start",{runId:this.runId,node:stateOrNodeId,kind}),this.events?.emit("workflow.action.start",{runId:this.runId,node:stateOrNodeId,kind,severity:"info"})}actionDone(stateOrNodeId,kind,durationMs,ok){addSpanEvent("workflow.action.done",{runId:this.runId,node:stateOrNodeId,kind,durationMs,ok}),this.events?.emit("workflow.action.done",{runId:this.runId,node:stateOrNodeId,kind,durationMs,ok,severity:ok?"info":"error"})}warnActionFailed(stateOrNodeId,transitionsTaken,error51){addSpanEvent("workflow.action.failed_continue",{runId:this.runId,node:stateOrNodeId,transitionsTaken,...error51===void 0?{}:{error:error51}}),this.events?.emit("workflow.action.failed_continue",{runId:this.runId,node:stateOrNodeId,transitionsTaken,...error51===void 0?{}:{error:error51},severity:"warning"}),this.logger.warn("action failed (continuing)",{node:stateOrNodeId,transitionsTaken,error:error51})}guardEvaluated(from,to,kind,passed){this.events?.emit("workflow.guard.evaluated",{runId:this.runId,from,to,kind,passed,externalKey:this.externalKey,severity:passed?"info":"warning"})}hitlAsk(node,kind,message){this.events?.emit("workflow.hitl.ask",{runId:this.runId,node,kind,message,severity:"info"})}hitlResponse(node,ok){this.events?.emit("workflow.hitl.response",{runId:this.runId,node,ok,severity:ok?"info":"warning"})}result(status,finalState,transitionsTaken,reason){return{runId:this.runId,workflowName:this.workflowName,mode:this.mode,status,finalState,transitionsTaken,...reason===void 0?{}:{reason}}}static runRecord(runId,workflowName,mode,startedAt,metadata,externalKey){return{id:runId,workflow_name:workflowName,mode,status:"running",started_at:startedAt,metadata_json:JSON.stringify(metadata??{}),completed_at:null,external_key:externalKey??null}}}function snapshotTransitions(data){let value=data?.transitionsTaken;return typeof value==="number"&&Number.isSafeInteger(value)&&value>=0?value:0}function snapshotActionResult(data){let value=data?.lastActionResult;return value!==null&&typeof value==="object"&&"ok"in value&&typeof value.ok==="boolean"?{ok:value.ok}:void 0}class CapabilityRegistry{kind;capabilities=new Map;constructor(kind){this.kind=kind}register(name,capability,origin2="extension"){this.capabilities.set(name,{capability,origin:origin2})}has(name){return this.capabilities.has(name)}get(name){let entry=this.capabilities.get(name);if(entry===void 0)throw Error(`Unknown ${this.kind}: ${name}`);return entry.capability}getEntry(name){return this.capabilities.get(name)}list(){return[...this.capabilities.keys()]}entries(){return[...this.capabilities.entries()]}}function assertRelativeExtensionPath(path8,options={}){let where=options.sourceName!==void 0?` declared by "${options.sourceName}"`:"";if(/^([/\\]|[A-Za-z]:[/\\])/.test(path8))throw Error(`extension path "${path8}"${where} must be relative (no absolute paths)`);if(path8.split(/[/\\]/).includes(".."))throw Error(`extension path "${path8}"${where} must not contain ".." traversal`)}init_zod();var RESERVED_VAR_NAMES=new Set(["task","state","node","iteration","run","runtime"]),IDENTIFIER=/^[A-Za-z_][A-Za-z0-9_]*$/,VarsSchema=exports_external.record(exports_external.string(),exports_external.string()).superRefine((vars,ctx)=>{for(let key of Object.keys(vars)){if(!IDENTIFIER.test(key))ctx.addIssue({code:"custom",message:`Invalid variable name "${key}" (must be a valid identifier)`});if(RESERVED_VAR_NAMES.has(key))ctx.addIssue({code:"custom",message:`Variable name "${key}" is reserved for runtime use`})}}),EnvSchema=exports_external.object({allow:exports_external.array(exports_external.string().regex(IDENTIFIER,"env.allow entries must be valid identifiers")).optional()}),relativeExtensionPath=exports_external.string().min(1).superRefine((value,ctx)=>{try{assertRelativeExtensionPath(value)}catch(error51){ctx.addIssue({code:"custom",message:error51 instanceof Error?error51.message:"invalid extension path"})}}),WorkflowExtensionsSchema=exports_external.object({actions:exports_external.array(relativeExtensionPath).optional(),guards:exports_external.array(relativeExtensionPath).optional()}).strict(),ActionDefSchema=exports_external.object({kind:exports_external.string().min(1),options:exports_external.record(exports_external.string(),exports_external.unknown()).optional(),onError:exports_external.enum(["fail","continue"]).optional()}),GuardDefSchema=exports_external.object({kind:exports_external.string().min(1),options:exports_external.record(exports_external.string(),exports_external.unknown()).optional()}),StateMachineWorkflowDefSchema=exports_external.object({$schema:exports_external.string().optional(),kind:exports_external.literal("state-machine").optional(),name:exports_external.string().min(1),version:exports_external.string().optional(),description:exports_external.string().optional(),initialState:exports_external.string().min(1),terminalStates:exports_external.array(exports_external.string().min(1)).optional(),failureStates:exports_external.array(exports_external.string().min(1)).optional(),iterationBound:exports_external.number().int().positive().optional(),defaultOnError:exports_external.enum(["fail","continue"]).optional(),vars:VarsSchema.optional(),env:EnvSchema.optional(),states:exports_external.array(exports_external.object({id:exports_external.string().min(1),description:exports_external.string().optional(),onEnter:exports_external.array(ActionDefSchema).optional(),onExit:exports_external.array(ActionDefSchema).optional(),pause:exports_external.boolean().optional(),resumeRerun:exports_external.boolean().optional()}).strict()),transitions:exports_external.array(exports_external.object({from:exports_external.string().min(1),to:exports_external.string().min(1),description:exports_external.string().optional(),trigger:exports_external.string().optional(),guard:GuardDefSchema.optional(),terminalReason:exports_external.string().optional()}).strict()),extensions:WorkflowExtensionsSchema.optional()}).strict(),TransitionFlowWorkflowDefSchema=exports_external.object({$schema:exports_external.string().optional(),kind:exports_external.literal("transition-flow"),name:exports_external.string().min(1),version:exports_external.string().optional(),description:exports_external.string().optional(),initialNode:exports_external.string().min(1),terminalNodes:exports_external.array(exports_external.string().min(1)).optional(),iterationBound:exports_external.number().int().positive().optional(),defaultOnError:exports_external.enum(["fail","continue"]).optional(),vars:VarsSchema.optional(),env:EnvSchema.optional(),nodes:exports_external.array(exports_external.object({id:exports_external.string().min(1),description:exports_external.string().optional(),type:exports_external.enum(["action","gate","parallel","decision"]).optional(),action:ActionDefSchema.optional(),pause:exports_external.boolean().optional(),resumeRerun:exports_external.boolean().optional()}).strict()),edges:exports_external.array(exports_external.object({from:exports_external.string().min(1),to:exports_external.string().min(1),description:exports_external.string().optional(),condition:GuardDefSchema.optional()}).strict()),extensions:WorkflowExtensionsSchema.optional()}).strict(),WorkflowDefSchema=exports_external.union([StateMachineWorkflowDefSchema,TransitionFlowWorkflowDefSchema]);async function loadWorkflowDef(path8,options={}){return parseWorkflowDef(await loadStructuredConfig(path8,options),path8)}function validateWorkflowDef(workflow){if(workflow.kind==="transition-flow")validateTransitionFlow(workflow);else validateStateMachine(workflow)}function validateStateMachine(workflow){let errors6=[],ids=workflow.states.map((state)=>state.id),states=new Set(ids),terminals=new Set(workflow.terminalStates??[]),failures=new Set(workflow.failureStates??[]);for(let id of duplicates(ids))errors6.push(`State "${id}" is declared more than once`);for(let failure of failures)if(!states.has(failure))errors6.push(`Failure state "${failure}" is not declared`);else if(!terminals.has(failure))errors6.push(`Failure state "${failure}" must also be declared as a terminal state`);if(!states.has(workflow.initialState))errors6.push(`Initial state "${workflow.initialState}" is not declared`);else if(terminals.has(workflow.initialState))errors6.push(`Initial state "${workflow.initialState}" must not be a terminal state`);for(let terminal of terminals)if(!states.has(terminal))errors6.push(`Terminal state "${terminal}" is not declared`);let outboundByState=new Map;for(let transition of workflow.transitions){if(!states.has(transition.from))errors6.push(`Transition source "${transition.from}" is not declared`);if(!states.has(transition.to))errors6.push(`Transition target "${transition.to}" is not declared`);let list=outboundByState.get(transition.from)??[];list.push(transition),outboundByState.set(transition.from,list)}for(let state of workflow.states){let outbound=outboundByState.get(state.id)??[];if(terminals.has(state.id)){if(outbound.length>0)errors6.push(`Terminal state "${state.id}" must not declare transitions`);continue}let ungatedIndex=outbound.findIndex((transition)=>transition.guard===void 0);if(ungatedIndex!==-1&&ungatedIndex<outbound.length-1)errors6.push(`State "${state.id}" has an unguarded transition that is not last; later transitions are unreachable`)}errors6.push(...checkVariableReferences(collectActionOptions(workflow),workflow.vars,workflow.env)),throwIfErrors(workflow,errors6)}function parseWorkflowDef(parsed,source){let result=selectWorkflowSchema(parsed).safeParse(parsed);if(!result.success)throw new WorkflowValidationError(`Workflow definition failed schema validation for ${source}: ${formatWorkflowIssues(result.error.issues)}`,result.error.issues);return validateWorkflowDef(result.data),result.data}function selectWorkflowSchema(parsed){if(parsed!==null&&typeof parsed==="object"){let value=parsed;if(value.kind==="transition-flow"||"nodes"in value||"edges"in value||"initialNode"in value)return TransitionFlowWorkflowDefSchema}return StateMachineWorkflowDefSchema}function formatWorkflowIssues(issues){return issues.map((issue2)=>{let path8=issue2.path.map(String).join(".");return path8.length>0?`${path8}: ${issue2.message}`:issue2.message}).join("; ")}function validateTransitionFlow(workflow){let errors6=[],ids=workflow.nodes.map((node)=>node.id),nodes=new Set(ids);for(let id of duplicates(ids))errors6.push(`Node "${id}" is declared more than once`);if(!nodes.has(workflow.initialNode))errors6.push(`Initial node "${workflow.initialNode}" is not declared`);let seenEdges=new Set;for(let edge of workflow.edges){if(!nodes.has(edge.from))errors6.push(`Edge source "${edge.from}" is not declared`);if(!nodes.has(edge.to))errors6.push(`Edge target "${edge.to}" is not declared`);let key=`${edge.from}→${edge.to}`;if(seenEdges.has(key))errors6.push(`Duplicate edge "${key}"`);seenEdges.add(key)}for(let terminal of workflow.terminalNodes??[]){if(!nodes.has(terminal))errors6.push(`Terminal node "${terminal}" is not declared`);if(workflow.edges.some((edge)=>edge.from===terminal))errors6.push(`Terminal node "${terminal}" must not declare edges`)}for(let node of workflow.nodes){let outbound=workflow.edges.filter((edge)=>edge.from===node.id),unconditional=outbound.findIndex((edge)=>edge.condition===void 0);if(unconditional!==-1&&unconditional<outbound.length-1)errors6.push(`Node "${node.id}" has an unconditional edge that is not last; later edges are unreachable`)}errors6.push(...checkVariableReferences(collectActionOptions(workflow),workflow.vars,workflow.env)),throwIfErrors(workflow,errors6)}function duplicates(ids){let seen=new Set,dupes=new Set;for(let id of ids){if(seen.has(id))dupes.add(id);seen.add(id)}return[...dupes]}function collectActionOptions(workflow){let optionSets=[],actions=workflow.kind==="transition-flow"?workflow.nodes.flatMap((node)=>node.action?[node.action]:[]):workflow.states.flatMap((state)=>[...state.onEnter??[],...state.onExit??[]]);for(let action of actions)if(action.options)optionSets.push(action.options);return optionSets}var RUNTIME_TEMPLATE_NAMESPACES=new Set(RUNTIME_BUILTIN_KEYS);function checkVariableReferences(optionSets,vars,env2){let declaredVars=new Set(Object.keys(vars??{})),allowedEnv2=new Set(env2?.allow??[]),errors6=[],reference=/\$\{([^}]+)\}/g;for(let options of optionSets)for(let value of Object.values(options)){if(typeof value!=="string")continue;for(let match of value.matchAll(reference)){let expr=(match[1]??"").trim(),[namespace,name]=expr.includes(".")?expr.split(".",2):[expr,void 0];if(namespace==="vars"){if(name!==void 0&&!declaredVars.has(name))errors6.push(`Unknown variable reference "\${${expr}}" (no var "${name}" declared)`)}else if(namespace==="env"){if(name!==void 0&&!allowedEnv2.has(name))errors6.push(`Env reference "\${${expr}}" is not in env.allow`)}else if(namespace!==void 0&&!RUNTIME_TEMPLATE_NAMESPACES.has(namespace))errors6.push(`Unknown template reference "\${${expr}}"`)}}return errors6}function throwIfErrors(workflow,errors6){if(errors6.length>0)throw new WorkflowValidationError(`Workflow "${workflow.name}" is invalid: ${errors6.join("; ")}`,errors6)}init_dist6();var TEMPLATE_REF=/\$\{([^}]+)\}/g;function mergeVars(workflowVars={},overrideVars={}){return{...workflowVars,...overrideVars}}function mergeSetVars(vars,setVars){if(setVars===void 0)return vars;let filtered={};for(let[key,value]of Object.entries(setVars))if(typeof value==="string")filtered[key]=value;return mergeVars(vars,filtered)}function resolveTemplates(value,context4){if(typeof value==="string")return resolveTemplateString(value,context4);if(Array.isArray(value))return value.map((entry)=>resolveTemplates(entry,context4));if(value!==null&&typeof value==="object")return Object.fromEntries(Object.entries(value).map(([key,entry])=>[key,resolveTemplates(entry,context4)]));return value}function resolveTemplateString(value,context4){return value.replace(TEMPLATE_REF,(_match,name)=>{return lookupRef(name,context4)})}function lookupRef(name,context4){if(name.startsWith("vars.")){let key=name.slice(5),resolved2=context4.vars[key];if(resolved2===void 0)throw new WorkflowValidationError(`Workflow variable "${key}" is not defined`);return resolved2}if(name.startsWith("env.")){let key=name.slice(4),resolved2=context4.env[key];if(resolved2===void 0)throw new WorkflowValidationError(`Environment variable "${key}" is not defined`);return resolved2}let resolved=context4.builtins?.[name];if(resolved===void 0)throw new WorkflowValidationError(`Workflow builtin "${name}" is not defined`);return String(resolved)}var SHELL_ENV_OPTION="__wfShellEnv",SHELL_BINDING=/^\$\{__WF_\d+\}$/,SHELL_BINDING_ANY=/\$\{__WF_\d+\}|\$__WF_\d+\b/;function resolveShellCommandTemplates(options,context4){let{command,args,...rest}=options;if(typeof command!=="string")return resolveTemplates(rest,context4);if(args!==void 0&&!Array.isArray(args))throw Error(`shell action "args" must be a string array when defined; got ${typeof args}`);if(Array.isArray(args)&&args.length>0)return{...resolveTemplates(rest,context4),command:resolveTemplateString(command,context4),args:resolveTemplates(args,context4)};let env2={},index2=0;if(!(SHELL_ENV_OPTION in options)&&SHELL_BINDING_ANY.test(command))throw Error("shell command must not contain the reserved $__WF_ placeholder namespace; it is minted by the template-binding pass");let existingBindings=options[SHELL_ENV_OPTION];if(existingBindings!==void 0&&typeof existingBindings==="object"&&existingBindings!==null){Object.assign(env2,existingBindings);while(`__WF_${index2}`in env2)index2++}let bound=command.replace(TEMPLATE_REF,(match,name)=>{if(SHELL_BINDING.test(match))return match;let key=`__WF_${index2++}`;return env2[key]=lookupRef(name,context4),`\${${key}}`});return{...resolveTemplates(rest,context4),command:bound,[SHELL_ENV_OPTION]:env2}}function resolveOnErrorPolicy(actionOnError,workflowDefault,runOptionOverride){return actionOnError??workflowDefault??runOptionOverride??"fail"}class WorkflowEngineHost{lifecycleBus;actions=new CapabilityRegistry("workflow action");guards=new CapabilityRegistry("workflow guard");constructor(lifecycleBus){this.lifecycleBus=lifecycleBus}registerAction(action,origin2="extension"){return this.actions.register(action.kind,action,origin2),this}registerGuard(guard,origin2="extension"){return this.guards.register(guard.kind,guard,origin2),this}hasAction(kind){return this.actions.has(kind)}hasGuard(kind){return this.guards.has(kind)}listActions(){return this.actions.list()}listGuards(){return this.guards.list()}actionOrigin(kind){return this.actions.getEntry(kind)?.origin}guardOrigin(kind){return this.guards.getEntry(kind)?.origin}async runAction(kind,options,context4){if(!this.actions.has(kind))throw new WorkflowValidationError(`Unknown workflow action "${kind}"`);return await this.actions.get(kind).execute(options,context4)}async evaluateGuard(kind,options,context4){return(await this.evaluateGuardResult(kind,options,context4)).passed}async evaluateGuardResult(kind,options,context4){if(!this.guards.has(kind))throw new WorkflowValidationError(`Unknown workflow guard "${kind}"`);let result=await this.guards.get(kind).evaluate(options,context4);return typeof result==="boolean"?{passed:result}:result}}function createDefaultWorkflowEngineHost(options={}){let host=new WorkflowEngineHost(options.lifecycleBus);return host.registerAction(new NoteActionRunner,"builtin"),host.registerAction(new ShellActionRunner(options.processExecutor??nodeBunFactory2.createProcessExecutor()),"builtin"),host.registerAction(new EventEmitActionRunner,"builtin"),host.registerGuard(new ShellGuardRunner(options.processExecutor??nodeBunFactory2.createProcessExecutor()),"builtin"),host.registerGuard({kind:"always",evaluate:async()=>!0},"builtin"),host.registerGuard({kind:"never",evaluate:async()=>!1},"builtin"),host.registerGuard({kind:"action-ok",evaluate:async(_options,context4)=>context4.lastActionResult?.ok===!0},"builtin"),host}class NoteActionRunner{kind="note";async execute(options,context4){let message=String(options.message??"");return context4?.events?.emit("workflow.hitl.note",{runId:context4.runId,node:context4.stateOrNodeId,message,severity:"info"}),{ok:!0,data:{message}}}}class EventEmitActionRunner{kind="event.emit";async execute(options,context4){let name=String(options.name??"");if(!name)return{ok:!1,error:'event.emit requires a non-empty "name" option'};let payload=options.payload??{};return context4?.events?.emit("workflow.custom",{name,payload,severity:"info"}),{ok:!0,data:{name,payload}}}}async function spawnShellCommand(processExecutor,options,workdir){let command=stringOption(options,"command"),explicitArgs=arrayOption(options,"args"),spawn2=explicitArgs.length===0?{command:"/bin/sh",args:["-c",command]}:{command,args:explicitArgs},timeout=optionalTimeoutOption(options),envOption=options[SHELL_ENV_OPTION],env2=envOption!==null&&typeof envOption==="object"?envOption:void 0,result=await processExecutor.run({command:spawn2.command,args:spawn2.args,cwd:optionalStringOption(options,"cwd",workdir),...env2!==void 0?{env:env2,envMode:"merge"}:{},...timeout!==void 0?{timeout}:{},rejectOnError:!1,forceBuffered:!0});return{stdout:result.stdout,stderr:result.stderr,exitCode:result.exitCode,timedOut:result.outcome==="timeout"}}class ShellActionRunner{processExecutor;kind="shell";constructor(processExecutor){this.processExecutor=processExecutor}async execute(options,context4){let spawn2=await spawnShellCommand(this.processExecutor,options,context4.workdir);if(spawn2.timedOut){let timeout=optionalTimeoutOption(options);return{ok:!1,data:{stdout:spawn2.stdout,stderr:spawn2.stderr,exitCode:spawn2.exitCode,timedOut:!0},error:`Shell action timed out after ${timeout}ms`}}let command=stringOption(options,"command");return{ok:spawn2.exitCode===0,data:{stdout:spawn2.stdout,stderr:spawn2.stderr,exitCode:spawn2.exitCode},...spawn2.exitCode===0?{}:{error:`Command "${command}" exited with ${spawn2.exitCode}`}}}}class ShellGuardRunner{processExecutor;kind="shell";constructor(processExecutor){this.processExecutor=processExecutor}async evaluate(options,context4){let spawn2=await spawnShellCommand(this.processExecutor,options,context4.workdir);return{passed:!spawn2.timedOut&&spawn2.exitCode===0,report:{stdout:spawn2.stdout,stderr:spawn2.stderr,exitCode:spawn2.exitCode,...spawn2.timedOut?{timedOut:!0}:{}}}}}function stringOption(options,key,fallback){let value=options[key];if(typeof value==="string")return value;if(fallback!==void 0)return fallback;throw new WorkflowValidationError(`Action option "${key}" must be a string`)}function optionalStringOption(options,key,fallback){let value=options[key];if(typeof value==="string")return value;if(value===void 0)return fallback;throw new WorkflowValidationError(`Action option "${key}" must be a string`)}function arrayOption(options,key){let value=options[key];if(value===void 0)return[];if(Array.isArray(value)&&value.every((entry)=>typeof entry==="string"))return value;throw new WorkflowValidationError(`Action option "${key}" must be a string array`)}function optionalTimeoutOption(options){let value=options.timeout;if(value===void 0)return;if(typeof value==="number"&&Number.isFinite(value)&&value>0)return value;throw new WorkflowValidationError('shell option "timeout" must be a positive number of milliseconds')}var WORKFLOW_ENGINE_SCHEMA_SQL=`
555
575
  CREATE TABLE IF NOT EXISTS runs (
556
576
  id TEXT PRIMARY KEY,
557
577
  workflow_name TEXT,
@@ -566,7 +586,8 @@ CREATE TABLE IF NOT EXISTS runs (
566
586
  updated_at INTEGER NOT NULL DEFAULT 0,
567
587
  owner_attempt TEXT,
568
588
  owner_pid INTEGER,
569
- interrupt_reason TEXT
589
+ interrupt_reason TEXT,
590
+ terminal_reason TEXT
570
591
  );
571
592
 
572
593
  CREATE UNIQUE INDEX IF NOT EXISTS idx_runs_external_key
@@ -625,15 +646,16 @@ CREATE TABLE IF NOT EXISTS action_runs (
625
646
  ALTER TABLE runs ADD COLUMN owner_attempt TEXT;
626
647
  ALTER TABLE runs ADD COLUMN owner_pid INTEGER;
627
648
  ALTER TABLE runs ADD COLUMN interrupt_reason TEXT;
649
+ ALTER TABLE runs ADD COLUMN terminal_reason TEXT;
628
650
  `.trim();async function applyWorkflowEngineSchema(db2){for(let statement of WORKFLOW_ENGINE_SCHEMA_SQL.split(";")){let sql4=statement.trim();if(sql4.length>0)await db2.exec(sql4)}for(let statement of WORKFLOW_ENGINE_MIGRATIONS_SQL.split(";")){let sql4=statement.trim();if(sql4.length===0)continue;try{await db2.exec(sql4)}catch(error51){if(!/duplicate column/i.test(String(error51)))throw error51}}}function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function defaultActionRedactor(kind,payload){if(kind!=="shell")return payload;let data=isRecord(payload.data)?{...payload.data}:payload.data;if(isRecord(data)){if("stdout"in data)data.stdout="[redacted]";if("stderr"in data)data.stderr="[redacted]"}return{...payload,data}}function applyRedactor(redactor,kind,result){let payload=isRecord(result)?result:{value:result};return redactor!==void 0?redactor(kind,payload):defaultActionRedactor(kind,payload)}class DbWorkflowPersistenceAdapter{db;schemaReady;constructor(db2){this.db=db2}ensureSchema(){return this.schemaReady??=applyWorkflowEngineSchema(this.db),this.schemaReady}async createRun(record2){if(await this.loadRun(record2.id)!==void 0)throw new RunCollisionError(record2.id);await this.ensureSchema(),await this.db.run(`INSERT INTO runs (id, workflow_name, mode, status, external_key, started_at, completed_at, metadata_json, owner_attempt, owner_pid, created_at, updated_at)
629
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,record2.id,record2.workflow_name,record2.mode,record2.status,record2.external_key??null,record2.started_at,record2.completed_at,record2.metadata_json,record2.owner_attempt??null,record2.owner_pid??null,Date.now(),Date.now())}async finalizeRun(runId,status,completedAt,fence){if(fence===void 0)return await this.db.run("UPDATE runs SET status = ?, completed_at = ?, updated_at = ? WHERE id = ?",status,completedAt,Date.now(),runId),!0;await this.db.run("UPDATE runs SET status = ?, completed_at = ?, updated_at = ? WHERE id = ? AND owner_attempt = ? AND status = 'running'",status,completedAt,Date.now(),runId,fence.ownerAttempt);let run=await this.loadRun(runId);return run!==void 0&&run.status===status&&run.owner_attempt===fence.ownerAttempt}async claimRunOwnership(runId,owner,expectedStatuses){await this.ensureSchema();let placeholders=expectedStatuses.map(()=>"?").join(", ");await this.db.run(`UPDATE runs SET status = 'running', completed_at = NULL, owner_attempt = ?, owner_pid = ?, updated_at = ?
630
- WHERE id = ? AND status IN (${placeholders})`,owner.attemptId,owner.pid??null,Date.now(),runId,...expectedStatuses);let run=await this.loadRun(runId);return run!==void 0&&run.status==="running"&&run.owner_attempt===owner.attemptId?run:void 0}async interruptRun(runId,reason){await this.ensureSchema(),await this.db.run("UPDATE runs SET status = 'interrupted', interrupt_reason = ?, completed_at = NULL, updated_at = ? WHERE id = ? AND status = 'running'",reason,Date.now(),runId);let run=await this.loadRun(runId);return run!==void 0&&run.status==="interrupted"?run:void 0}async savePhase(runId,phase,status){let op=this.phaseRow(runId,phase,status,Date.now());await this.db.run(op.sql,...op.params)}async saveTransition(runId,from,to,trigger){let op=this.transitionRow(runId,from,to,trigger,Date.now());await this.db.run(op.sql,...op.params)}async saveWorkflowState(runId,state,data){let op=this.stateRow(runId,state,data,Date.now());await this.db.run(op.sql,...op.params)}async commitTransition(runId,from,to,trigger,state,data,phase){await this.ensureSchema();let now=Date.now(),ops=[this.transitionRow(runId,from,to,trigger,now),this.stateRow(runId,state,data,now)];if(phase)ops.push(this.phaseRow(runId,phase.phase,phase.status,now));await this.db.batch(ops)}transitionRow(runId,from,to,trigger,now){return{sql:`INSERT INTO transition_runs (id, run_id, from_state, to_state, trigger, status, created_at, updated_at)
651
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,record2.id,record2.workflow_name,record2.mode,record2.status,record2.external_key??null,record2.started_at,record2.completed_at,record2.metadata_json,record2.owner_attempt??null,record2.owner_pid??null,Date.now(),Date.now())}async finalizeRun(runId,status,completedAt,fence,reason){if(fence===void 0)return await this.db.run("UPDATE runs SET status = ?, completed_at = ?, terminal_reason = ?, updated_at = ? WHERE id = ?",status,completedAt,reason??null,Date.now(),runId),!0;await this.db.run("UPDATE runs SET status = ?, completed_at = ?, terminal_reason = ?, updated_at = ? WHERE id = ? AND owner_attempt = ? AND status = 'running'",status,completedAt,reason??null,Date.now(),runId,fence.ownerAttempt);let run=await this.loadRun(runId);return run!==void 0&&run.status===status&&run.owner_attempt===fence.ownerAttempt}async claimRunOwnership(runId,owner,expectedStatuses){await this.ensureSchema();let placeholders=expectedStatuses.map(()=>"?").join(", ");await this.db.run(`UPDATE runs SET status = 'running', completed_at = NULL, terminal_reason = NULL, owner_attempt = ?, owner_pid = ?, updated_at = ?
652
+ WHERE id = ? AND status IN (${placeholders})`,owner.attemptId,owner.pid??null,Date.now(),runId,...expectedStatuses);let run=await this.loadRun(runId);return run!==void 0&&run.status==="running"&&run.owner_attempt===owner.attemptId?run:void 0}async interruptRun(runId,reason){await this.ensureSchema(),await this.db.run("UPDATE runs SET status = 'interrupted', interrupt_reason = ?, terminal_reason = ?, completed_at = NULL, updated_at = ? WHERE id = ? AND status = 'running'",reason,reason,Date.now(),runId);let run=await this.loadRun(runId);return run!==void 0&&run.status==="interrupted"?run:void 0}async savePhase(runId,phase,status){let op=this.phaseRow(runId,phase,status,Date.now());await this.db.run(op.sql,...op.params)}async saveTransition(runId,from,to,trigger){let op=this.transitionRow(runId,from,to,trigger,Date.now());await this.db.run(op.sql,...op.params)}async saveWorkflowState(runId,state,data){let op=this.stateRow(runId,state,data,Date.now());await this.db.run(op.sql,...op.params)}async commitTransition(runId,from,to,trigger,state,data,phase){await this.ensureSchema();let now=Date.now(),ops=[this.transitionRow(runId,from,to,trigger,now),this.stateRow(runId,state,data,now)];if(phase)ops.push(this.phaseRow(runId,phase.phase,phase.status,now));await this.db.batch(ops)}transitionRow(runId,from,to,trigger,now){return{sql:`INSERT INTO transition_runs (id, run_id, from_state, to_state, trigger, status, created_at, updated_at)
631
653
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,params:[`${runId}:transition:${from}:${to}:${crypto.randomUUID()}`,runId,from,to,trigger,"done",now,now]}}stateRow(runId,state,data,now){return{sql:`INSERT INTO workflow_states (id, run_id, state, data_json, created_at, updated_at)
632
654
  VALUES (?, ?, ?, ?, ?, ?)`,params:[`${runId}:state:${state}:${crypto.randomUUID()}`,runId,state,JSON.stringify(data),now,now]}}phaseRow(runId,phase,status,now){return{sql:`INSERT INTO phase_runs (id, run_id, phase, status, started_at, completed_at, created_at, updated_at)
633
655
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,params:[`${runId}:phase:${phase}:${crypto.randomUUID()}`,runId,phase,status,new Date(now).toISOString(),status==="running"?null:new Date(now).toISOString(),now,now]}}async saveActionStart(runId,node,kind,_options){let id=crypto.randomUUID(),now=Date.now();return await this.db.run(`INSERT INTO action_runs (id, run_id, node, kind, status, started_at, created_at, updated_at)
634
656
  VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,id,runId,node,kind,"running",new Date(now).toISOString(),now,now),id}async saveActionFinalize(actionId,status,durationMs,ok,kind,result,redactor){let now=Date.now();await this.db.run(`UPDATE action_runs
635
657
  SET status = ?, duration_ms = ?, ok = ?, result_json = ?, completed_at = ?, updated_at = ?
636
- WHERE id = ?`,status,durationMs,ok?1:0,result!==void 0?JSON.stringify(applyRedactor(redactor,kind,result)):null,new Date(now).toISOString(),now,actionId)}async loadRun(runId){return await this.ensureSchema(),await this.db.queryFirst("SELECT * FROM runs WHERE id = ?",runId)??void 0}async listRuns(){return await this.ensureSchema(),await this.db.queryAll("SELECT * FROM runs ORDER BY started_at DESC")}async findRunByKey(workflowName,externalKey){return await this.ensureSchema(),await this.db.queryFirst("SELECT * FROM runs WHERE workflow_name = ? AND external_key = ?",workflowName,externalKey)??void 0}async createOrAttachRun(record2){if(await this.ensureSchema(),record2.external_key!==void 0&&record2.external_key!==null){let existing=await this.findRunByKey(record2.workflow_name,record2.external_key);if(existing)return existing}try{await this.createRun(record2)}catch(error51){if(record2.external_key!==void 0&&record2.external_key!==null){let existing=await this.findRunByKey(record2.workflow_name,record2.external_key);if(existing)return existing}throw error51}return{...record2}}async reseedRun(runId,newState){await this.ensureSchema();let previous=await this.loadLatestStateSnapshot(runId),now=Date.now(),data={...previous?.data??{},reseeded:!0,reseededAt:new Date(now).toISOString()};return await this.commitTransition(runId,previous?.state??"",newState,"__reseed__",newState,data),{fromState:previous?.state??null,toState:newState}}async loadCurrentState(runId){return await this.ensureSchema(),(await this.db.queryFirst("SELECT state FROM workflow_states WHERE run_id = ? ORDER BY created_at DESC, rowid DESC LIMIT 1",runId))?.state}async loadLatestStateSnapshot(runId){await this.ensureSchema();let row=await this.db.queryFirst("SELECT state, data_json FROM workflow_states WHERE run_id = ? ORDER BY created_at DESC, rowid DESC LIMIT 1",runId);if(row==null)return;let data={};if(row.data_json!==null&&row.data_json.length>0)try{data=JSON.parse(row.data_json)}catch{data={}}return{state:row.state,data}}async listPausedRuns(options){await this.ensureSchema();let where=["status = 'paused'"],params=[];if(options?.workflowName!==void 0)where.push("workflow_name = ?"),params.push(options.workflowName);let limit=options?.limit??100,sql4=`SELECT * FROM runs WHERE ${where.join(" AND ")} ORDER BY updated_at DESC, rowid DESC LIMIT ?`;return params.push(limit),await this.db.queryAll(sql4,...params)}}init_dist7();async function runActionStep(action,vars,deps){let{host,persistence,lifecycle,stateOrNodeId,runId}=deps,templateContext={vars,env:deps.env,builtins:runtimeBuiltins(deps.workflowName,stateOrNodeId,runId,deps.transitionsTaken,deps.mode)},resolvedWithEnv=action.kind==="shell"?resolveShellCommandTemplates(action.options??{},templateContext):resolveTemplates(action.options??{},templateContext),{[SHELL_ENV_OPTION]:_shellEnv,...resolved}=resolvedWithEnv,actionId=await persistence.saveActionStart(runId,stateOrNodeId,action.kind,resolved),actionStartMs=Date.now();lifecycle.actionStart(stateOrNodeId,action.kind);let result;try{result=await host.runAction(action.kind,resolvedWithEnv,{runId,actionId,workdir:deps.options.workdir,stateOrNodeId,vars,env:deps.env,metadata:deps.options.metadata,events:deps.options.events})}catch(error51){result={ok:!1,error:error51 instanceof Error?error51.message:String(error51)}}finally{let durationMs=Date.now()-actionStartMs;lifecycle.actionDone(stateOrNodeId,action.kind,durationMs,result?.ok??!1),await persistence.saveActionFinalize(actionId,result?.ok===!0?"done":"failed",durationMs,result?.ok??!1,action.kind,result,deps.options.redactor??defaultActionRedactor)}if(result.terminal===!0)return{outcome:"terminal",result};if(!result.ok){if(resolveOnErrorPolicy(action.onError,deps.defaultOnError,deps.options.onError)==="fail")return{outcome:"fail",result};lifecycle.warnActionFailed(stateOrNodeId,deps.transitionsTaken,result.error)}return{outcome:"completed",result}}async function runActionSequence(actions,vars,deps){let last,acc;for(let action of actions){let step=await runActionStep(action,vars,deps);if(step.result!==void 0)last=step.result;if(step.result?.setVars)acc=mergeSetVars(acc??{},step.result.setVars),vars=mergeSetVars(vars,step.result.setVars);if(step.outcome==="terminal")return{outcome:"terminal",result:last,setVars:acc};if(step.outcome==="fail")return{outcome:"fail",result:last,setVars:acc}}return{outcome:"completed",result:last,setVars:acc}}class StateMachineDriver{options;constructor(options){this.options=options}async run(workflow,options={}){return await RunLifecycle.run(workflow.name,"state-machine",{persistence:this.options.persistence,events:options.events},options,(lifecycle)=>this.loop(workflow,options,lifecycle))}async resume(workflow,runId,resumeFromState,externalKey,options={}){return await RunLifecycle.resume(workflow.name,"state-machine",{persistence:this.options.persistence,events:options.events},runId,externalKey,(lifecycle)=>this.loop(workflow,options,lifecycle,resumeFromState),options.resumeOwner?.attemptId)}async loop(workflow,options,lifecycle,resumeFromState){let runId=lifecycle.runId,states=new Map(workflow.states.map((state)=>[state.id,state])),terminal=new Set(workflow.terminalStates??[]),failure=new Set(workflow.failureStates??[]),vars=mergeVars(workflow.vars,options.vars),env2=allowedEnv(workflow.env?.allow??[],options.env),current=resumeFromState!==void 0?states.get(resumeFromState):states.get(workflow.initialState),snapshot=resumeFromState===void 0?void 0:await this.options.persistence.loadLatestStateSnapshot(runId),transitionsTaken=snapshotTransitions(snapshot?.data),lastActionResult=snapshotActionResult(snapshot?.data),iterationBound=workflow.iterationBound??50,defaultOnError=workflow.defaultOnError,resumeMode=resumeFromState!==void 0?options.resumeMode??"skip-enter":void 0,persistedViaHop=!1;if(current===void 0){let label=resumeFromState??workflow.initialState;throw new FSMError(`State "${label}" is not declared`)}while(!0){if(resumeMode==="skip-enter")resumeMode=void 0,persistedViaHop=!0;else{if(resumeMode==="rerun-enter"){if(current.resumeRerun!==!0)throw new FSMError(`Cannot rerun-resume into state "${current.id}": not marked resumeRerun: true (mark its on-enter actions as safe to re-run, or resume with resumeMode: "skip-enter")`);resumeMode=void 0,persistedViaHop=!0}await lifecycle.enter(current.id,transitionsTaken,!persistedViaHop,vars);let enter=options.dryRun?EMPTY_OUTCOME:await runActionSequence(current.onEnter??[],vars,{host:this.options.host,persistence:this.options.persistence,lifecycle,workflowName:workflow.name,stateOrNodeId:current.id,runId,mode:"state-machine",transitionsTaken,env:env2,options,defaultOnError});if(enter.result!==void 0)lastActionResult=enter.result;if(enter.setVars)vars=mergeSetVars(vars,enter.setVars);if(enter.outcome==="terminal")return failure.has(current.id)?await lifecycle.fail(current.id,transitionsTaken,`terminal:${current.id}`):await lifecycle.done(current.id,transitionsTaken);if(enter.outcome==="fail")return await lifecycle.fail(current.id,transitionsTaken,lastActionResult?.error);if(current.pause===!0)return await lifecycle.pause(current.id,transitionsTaken,vars,lastActionResult)}let outbound=workflow.transitions.filter((transition)=>transition.from===current?.id);if(terminal.has(current.id)||outbound.length===0)return failure.has(current.id)?await lifecycle.fail(current.id,transitionsTaken,`terminal:${current.id}`):await lifecycle.done(current.id,transitionsTaken);let nextTransition=await firstPassingTransition(outbound,this.options.host,{runId,current:current.id,vars,env:env2,lastActionResult,workdir:options.workdir},lifecycle);if(nextTransition===void 0)return await lifecycle.fail(current.id,transitionsTaken,"no-passing-transition");let exit=options.dryRun?EMPTY_OUTCOME:await runActionSequence(current.onExit??[],vars,{host:this.options.host,persistence:this.options.persistence,lifecycle,workflowName:workflow.name,stateOrNodeId:current.id,runId,mode:"state-machine",transitionsTaken,env:env2,options,defaultOnError});if(exit.result!==void 0)lastActionResult=exit.result;if(exit.setVars)vars=mergeSetVars(vars,exit.setVars);if(exit.outcome==="terminal")return failure.has(current.id)?await lifecycle.fail(current.id,transitionsTaken,`terminal:${current.id}`):await lifecycle.done(current.id,transitionsTaken);if(exit.outcome==="fail")return await lifecycle.fail(current.id,transitionsTaken,exit.result?.error);if(transitionsTaken+=1,await lifecycle.commitHop(current.id,nextTransition.to,nextTransition.trigger??null,transitionsTaken,{phase:nextTransition.to,status:"running"},vars),transitionsTaken>iterationBound)return await lifecycle.fail(current.id,transitionsTaken,"iteration-bound-exceeded");let nextState=states.get(nextTransition.to);if(nextState===void 0)throw new FSMError(`Transition target "${nextTransition.to}" is not declared`);current=nextState,persistedViaHop=!0}}}var EMPTY_OUTCOME={outcome:"completed",result:void 0,setVars:void 0};async function firstPassingTransition(transitions,host,context4,lifecycle){for(let transition of transitions){if(transition.guard===void 0)return transition;let resolvedOptions=transition.guard.kind==="shell"?resolveShellCommandTemplates(transition.guard.options??{},{vars:context4.vars,env:context4.env??{}}):resolveTemplates(transition.guard.options??{},{vars:context4.vars,env:context4.env??{}}),passed=await host.evaluateGuard(transition.guard.kind,resolvedOptions,context4);if(lifecycle.guardEvaluated(context4.current,transition.to,transition.guard.kind,passed),passed)return transition}return}class TransitionFlowDriver{options;constructor(options){this.options=options}async run(workflow,options={}){return await RunLifecycle.run(workflow.name,"transition-flow",{persistence:this.options.persistence,events:options.events},options,(lifecycle)=>this.loop(workflow,options,lifecycle))}async resume(workflow,runId,resumeFromNode,externalKey,options={}){return await RunLifecycle.resume(workflow.name,"transition-flow",{persistence:this.options.persistence,events:options.events},runId,externalKey,(lifecycle)=>this.loop(workflow,options,lifecycle,resumeFromNode),options.resumeOwner?.attemptId)}async loop(workflow,options,lifecycle,resumeFromNode){let runId=lifecycle.runId,nodes=new Map(workflow.nodes.map((node)=>[node.id,node])),terminal=new Set(workflow.terminalNodes??[]),vars=mergeVars(workflow.vars,options.vars),env2=allowedEnv(workflow.env?.allow??[],options.env),current=resumeFromNode!==void 0?nodes.get(resumeFromNode):nodes.get(workflow.initialNode),snapshot=resumeFromNode===void 0?void 0:await this.options.persistence.loadLatestStateSnapshot(runId),transitionsTaken=snapshotTransitions(snapshot?.data),lastActionResult=snapshotActionResult(snapshot?.data),iterationBound=workflow.iterationBound??50,defaultOnError=workflow.defaultOnError,resumeMode=resumeFromNode!==void 0?options.resumeMode??"skip-enter":void 0,persistedViaHop=!1;if(current===void 0){let label=resumeFromNode??workflow.initialNode;throw new FSMError(`Node "${label}" is not declared`)}while(!0){if(resumeMode==="skip-enter")resumeMode=void 0,persistedViaHop=!0;else{if(resumeMode==="rerun-enter"){if(current.resumeRerun!==!0)throw new FSMError(`Cannot rerun-resume into node "${current.id}": not marked resumeRerun: true (mark its action as safe to re-run, or resume with resumeMode: "skip-enter")`);resumeMode=void 0,persistedViaHop=!0}if(await lifecycle.enter(current.id,transitionsTaken,!persistedViaHop,vars),options.dryRun){if(current.action!==void 0)lastActionResult=void 0}else if(current.action!==void 0){let step=await runActionStep(current.action,vars,{host:this.options.host,persistence:this.options.persistence,lifecycle,workflowName:workflow.name,stateOrNodeId:current.id,runId,mode:"transition-flow",transitionsTaken,env:env2,options,defaultOnError});if(lastActionResult=step.result,step.result?.setVars)vars=mergeSetVars(vars,step.result.setVars);if(step.outcome==="terminal")return await lifecycle.done(current.id,transitionsTaken);if(step.outcome==="fail")return await lifecycle.fail(current.id,transitionsTaken,step.result?.error)}if(current.pause===!0)return await lifecycle.pause(current.id,transitionsTaken,vars,lastActionResult)}let outbound=workflow.edges.filter((edge2)=>edge2.from===current?.id);if(terminal.has(current.id)||outbound.length===0)return await lifecycle.done(current.id,transitionsTaken);let edge=await firstPassingEdge(outbound,this.options.host,{runId,current:current.id,vars,env:env2,lastActionResult,workdir:options.workdir},lifecycle);if(edge===void 0)return await lifecycle.fail(current.id,transitionsTaken,"no-passing-edge");if(transitionsTaken+=1,await lifecycle.commitHop(current.id,edge.to,edge.condition?.kind??null,transitionsTaken,{phase:edge.to,status:"running"},vars),transitionsTaken>iterationBound)return await lifecycle.fail(current.id,transitionsTaken,"iteration-bound-exceeded");let nextNode=nodes.get(edge.to);if(nextNode===void 0)throw new FSMError(`Edge target "${edge.to}" is not declared`);current=nextNode,persistedViaHop=!0}}}async function firstPassingEdge(edges,host,context4,lifecycle){for(let edge of edges){if(edge.condition===void 0)return edge;let resolvedOptions=edge.condition.kind==="shell"?resolveShellCommandTemplates(edge.condition.options??{},{vars:context4.vars,env:context4.env??{}}):resolveTemplates(edge.condition.options??{},{vars:context4.vars,env:context4.env??{}}),passed=await host.evaluateGuard(edge.condition.kind,resolvedOptions,context4);if(lifecycle.guardEvaluated(context4.current,edge.to,edge.condition.kind,passed),passed)return edge}return}class WorkflowService{host;persistence;runLocks=new Map;lifecycleBus;constructor(host,persistence,lifecycleBus){this.host=host,this.persistence=persistence,this.lifecycleBus=lifecycleBus??host.lifecycleBus}resolveEvents(events){return events??(this.lifecycleBus?new EventBus({lifecycleBus:this.lifecycleBus}):void 0)}async load(path8){return await loadWorkflowDef(path8)}async run(workflow,options={}){let events=this.resolveEvents(options.events);if(workflow.kind==="transition-flow")return await new TransitionFlowDriver({host:this.host,persistence:this.persistence}).run(workflow,{...options,events});return await new StateMachineDriver({host:this.host,persistence:this.persistence}).run(workflow,{...options,events})}async runFile(path8,options={}){return await this.run(await this.load(path8),options)}async listRuns(){return await this.persistence.listRuns()}async findRunByKey(workflowName,externalKey){return await this.persistence.findRunByKey(workflowName,externalKey)}async createOrAttachRun(record2){return await this.persistence.createOrAttachRun(record2)}async reseedRun(workflowOrRunId,runIdOrNewState,newStateOrOptions,maybeOptions){let args=typeof workflowOrRunId==="string"?{workflow:void 0,runId:workflowOrRunId,newState:runIdOrNewState,options:newStateOrOptions}:{workflow:workflowOrRunId,runId:runIdOrNewState,newState:newStateOrOptions,options:maybeOptions};if(args.workflow!==void 0)this.assertReseedTargetDeclared(args.workflow,args.runId,args.newState);await this.commitReseed(args.runId,args.newState,args.options)}assertReseedTargetDeclared(workflow,runId,newState){if(workflow.kind==="transition-flow")throw new FSMError("reseedRun only supports state-machine workflows");if(!workflow.states.some((state)=>state.id===newState))throw new FSMError(`Cannot reseed run "${runId}" to undeclared state "${newState}"`)}async commitReseed(runId,newState,options){let extKey=(await this.persistence.loadRun(runId))?.external_key??void 0,result=await this.persistence.reseedRun(runId,newState);this.resolveEvents(options?.events)?.emit("workflow.run.reseeded",{runId,fromState:result.fromState??"",toState:result.toState,externalKey:extKey,severity:"warning"})}async resumeRun(workflow,runId,options){let run=await this.persistence.loadRun(runId);if(run===void 0)throw new WorkflowResumeError(`Run "${runId}" not found`);if(run.status!=="paused"&&run.status!=="interrupted")throw new WorkflowResumeError(`Run "${runId}" is not resumable (status: ${run.status})`);let currentState=await this.persistence.loadCurrentState(runId);if(currentState===void 0)throw new WorkflowResumeError(`Run "${runId}" has no persisted state to resume from`);let resumeMode=options?.resumeMode??(run.status==="interrupted"?"rerun-enter":"skip-enter");this.assertResumeRerunAllowed(workflow,currentState,resumeMode);let snapshot=await this.persistence.loadLatestStateSnapshot(runId),persistedVars=extractEffectiveVars(snapshot?.data),restoredVars=mergeVars(persistedVars,options?.vars),owner=options?.resumeOwner??{attemptId:crypto.randomUUID()},mergedOptions={...options,vars:restoredVars,resumeMode,resumeOwner:owner},claimed=await this.persistence.claimRunOwnership(runId,owner,["paused","interrupted"]);if(claimed===void 0){let current=await this.persistence.loadRun(runId);throw new WorkflowResumeError(`Run "${runId}" could not be claimed for resume (status: ${current?.status??"unknown"}, owner: ${current?.owner_attempt??"none"})`)}let extKey=claimed.external_key??void 0;if(this.resolveEvents(mergedOptions.events)?.emit("workflow.run.resumed",{runId,node:currentState,resumeMode,ownerAttemptId:owner.attemptId,externalKey:extKey,severity:"info"}),workflow.kind==="transition-flow")return await new TransitionFlowDriver({host:this.host,persistence:this.persistence}).resume(workflow,runId,currentState,extKey,mergedOptions);return await new StateMachineDriver({host:this.host,persistence:this.persistence}).resume(workflow,runId,currentState,extKey,mergedOptions)}async interruptRun(runId,reason){let interrupted=await this.persistence.interruptRun(runId,reason);if(interrupted!==void 0)this.resolveEvents(void 0)?.emit("workflow.run.interrupted",{runId,reason,externalKey:interrupted.external_key??void 0,severity:"warning"});return interrupted}assertResumeRerunAllowed(workflow,currentState,resumeMode){if(resumeMode!=="rerun-enter")return;let node=workflow.kind==="transition-flow"?workflow.nodes.find((candidate)=>candidate.id===currentState):workflow.states.find((candidate)=>candidate.id===currentState);if(node!==void 0&&node.resumeRerun!==!0)throw new FSMError(`Cannot rerun-resume into "${currentState}": not marked resumeRerun: true `+'(mark its actions as safe to re-run — idempotent or deduped by runId+state — or resume with resumeMode: "skip-enter")')}async listPausedRuns(options){return await this.persistence.listPausedRuns(options)}async requestTransition(workflow,runId,toState,options){let release,previous=this.runLocks.get(runId)??Promise.resolve(),next=previous.then(()=>new Promise((resolve)=>{release=resolve}));this.runLocks.set(runId,next),await previous;try{return await this.evaluateAndCommit(workflow,runId,toState,options)}finally{if(release(),this.runLocks.get(runId)===next)this.runLocks.delete(runId)}}async evaluateAndCommit(workflow,runId,toState,options){let currentState=await this.persistence.loadCurrentState(runId),extKey=(await this.persistence.loadRun(runId))?.external_key??void 0;if(currentState===void 0)return{allowed:!1,reason:"no-such-transition",detail:`No state recorded for run "${runId}"`};let events=this.resolveEvents(options?.events),lifecycle=RunLifecycle.forExternalTransition(workflow.name,runId,{persistence:this.persistence,events},extKey),transition=workflow.transitions.find((t)=>t.from===currentState&&t.to===toState);if(transition===void 0)return this.denyTransition(events,runId,currentState,toState,extKey,{reason:"no-such-transition",detail:`No transition from "${currentState}" to "${toState}"`});let snapshot=await this.persistence.loadLatestStateSnapshot(runId),vars=mergeVars(mergeVars(workflow.vars,extractEffectiveVars(snapshot?.data)),options?.vars),env2=allowedEnv(workflow.env?.allow??[],options?.env);if(transition.guard!==void 0){let resolvedGuardOptions=transition.guard.kind==="shell"?resolveShellCommandTemplates(transition.guard.options??{},{vars,env:env2}):resolveTemplates(transition.guard.options??{},{vars,env:env2}),guardResult=await this.host.evaluateGuardResult(transition.guard.kind,resolvedGuardOptions,{runId,current:currentState,lastActionResult:snapshotActionResult(snapshot?.data),vars,env:env2,workdir:options?.workdir});if(lifecycle.guardEvaluated(currentState,toState,transition.guard.kind,guardResult.passed),!guardResult.passed)return this.denyTransition(events,runId,currentState,toState,extKey,{reason:"guard-failed",detail:`Guard "${transition.guard.kind}" denied transition from "${currentState}" to "${toState}"`,guardKind:transition.guard.kind,...guardResult.report===void 0?{}:{guardReport:guardResult.report}})}let trigger=transition.trigger??null;return await lifecycle.commitHop(currentState,toState,trigger,snapshotTransitions(snapshot?.data)+1,void 0,vars),events?.emit("workflow.transition.requested",{runId,from:currentState,to:toState,trigger,externalKey:extKey,severity:"info"}),{allowed:!0,fromState:currentState,toState}}denyTransition(events,runId,from,to,externalKey,denial){return events?.emit("workflow.transition.denied",{runId,from,to,reason:denial.reason,externalKey,severity:"error"}),{allowed:!1,...denial}}}function extractEffectiveVars(data){if(data===void 0)return{};let raw=data.effectiveVars;if(raw===void 0||raw===null)return{};if(typeof raw!=="object")return{};let filtered={};for(let[key,value]of Object.entries(raw))if(typeof value==="string")filtered[key]=value;return filtered}var RULE_ENGINE_SCHEMA_SQL=`
658
+ WHERE id = ?`,status,durationMs,ok?1:0,result!==void 0?JSON.stringify(applyRedactor(redactor,kind,result)):null,new Date(now).toISOString(),now,actionId)}async loadRun(runId){return await this.ensureSchema(),await this.db.queryFirst("SELECT * FROM runs WHERE id = ?",runId)??void 0}async listRuns(){return await this.ensureSchema(),await this.db.queryAll("SELECT * FROM runs ORDER BY started_at DESC")}async findRunByKey(workflowName,externalKey){return await this.ensureSchema(),await this.db.queryFirst("SELECT * FROM runs WHERE workflow_name = ? AND external_key = ?",workflowName,externalKey)??void 0}async createOrAttachRun(record2){if(await this.ensureSchema(),record2.external_key!==void 0&&record2.external_key!==null){let existing=await this.findRunByKey(record2.workflow_name,record2.external_key);if(existing)return existing}try{await this.createRun(record2)}catch(error51){if(record2.external_key!==void 0&&record2.external_key!==null){let existing=await this.findRunByKey(record2.workflow_name,record2.external_key);if(existing)return existing}throw error51}return{...record2}}async reseedRun(runId,newState){await this.ensureSchema();let previous=await this.loadLatestStateSnapshot(runId),now=Date.now(),data={...previous?.data??{},reseeded:!0,reseededAt:new Date(now).toISOString()};return await this.commitTransition(runId,previous?.state??"",newState,"__reseed__",newState,data),{fromState:previous?.state??null,toState:newState}}async loadCurrentState(runId){return await this.ensureSchema(),(await this.db.queryFirst("SELECT state FROM workflow_states WHERE run_id = ? ORDER BY created_at DESC, rowid DESC LIMIT 1",runId))?.state}async loadLatestStateSnapshot(runId){await this.ensureSchema();let row=await this.db.queryFirst("SELECT state, data_json FROM workflow_states WHERE run_id = ? ORDER BY created_at DESC, rowid DESC LIMIT 1",runId);if(row==null)return;let data={};if(row.data_json!==null&&row.data_json.length>0)try{data=JSON.parse(row.data_json)}catch{data={}}return{state:row.state,data}}async listPausedRuns(options){await this.ensureSchema();let where=["status = 'paused'"],params=[];if(options?.workflowName!==void 0)where.push("workflow_name = ?"),params.push(options.workflowName);let limit=options?.limit??100,sql4=`SELECT * FROM runs WHERE ${where.join(" AND ")} ORDER BY updated_at DESC, rowid DESC LIMIT ?`;return params.push(limit),await this.db.queryAll(sql4,...params)}}init_dist7();async function runActionStep(action,vars,deps){let{host,persistence,lifecycle,stateOrNodeId,runId}=deps,templateContext={vars,env:deps.env,builtins:runtimeBuiltins(deps.workflowName,stateOrNodeId,runId,deps.transitionsTaken,deps.mode)},resolvedWithEnv=action.kind==="shell"?resolveShellCommandTemplates(action.options??{},templateContext):resolveTemplates(action.options??{},templateContext),{[SHELL_ENV_OPTION]:_shellEnv,...resolved}=resolvedWithEnv,actionId=await persistence.saveActionStart(runId,stateOrNodeId,action.kind,resolved),actionStartMs=Date.now();lifecycle.actionStart(stateOrNodeId,action.kind);let result;try{result=await host.runAction(action.kind,resolvedWithEnv,{runId,actionId,workdir:deps.options.workdir,stateOrNodeId,vars,env:deps.env,metadata:deps.options.metadata,events:deps.options.events})}catch(error51){result={ok:!1,error:error51 instanceof Error?error51.message:String(error51)}}finally{let durationMs=Date.now()-actionStartMs;lifecycle.actionDone(stateOrNodeId,action.kind,durationMs,result?.ok??!1),await persistence.saveActionFinalize(actionId,result?.ok===!0?"done":"failed",durationMs,result?.ok??!1,action.kind,result,deps.options.redactor??defaultActionRedactor)}if(result.terminal===!0)return{outcome:"terminal",result};if(!result.ok){if(resolveOnErrorPolicy(action.onError,deps.defaultOnError,deps.options.onError)==="fail")return{outcome:"fail",result};lifecycle.warnActionFailed(stateOrNodeId,deps.transitionsTaken,result.error)}return{outcome:"completed",result}}async function runActionSequence(actions,vars,deps){let last,acc;for(let action of actions){let step=await runActionStep(action,vars,deps);if(step.result!==void 0)last=step.result;if(step.result?.setVars)acc=mergeSetVars(acc??{},step.result.setVars),vars=mergeSetVars(vars,step.result.setVars);if(step.outcome==="terminal")return{outcome:"terminal",result:last,setVars:acc};if(step.outcome==="fail")return{outcome:"fail",result:last,setVars:acc}}return{outcome:"completed",result:last,setVars:acc}}class StateMachineDriver{options;constructor(options){this.options=options}async run(workflow,options={}){return await RunLifecycle.run(workflow.name,"state-machine",{persistence:this.options.persistence,events:options.events},options,(lifecycle)=>this.loop(workflow,options,lifecycle))}async resume(workflow,runId,resumeFromState,externalKey,options={}){return await RunLifecycle.resume(workflow.name,"state-machine",{persistence:this.options.persistence,events:options.events},runId,externalKey,(lifecycle)=>this.loop(workflow,options,lifecycle,resumeFromState),options.resumeOwner?.attemptId)}async loop(workflow,options,lifecycle,resumeFromState){let runId=lifecycle.runId,states=new Map(workflow.states.map((state)=>[state.id,state])),terminal=new Set(workflow.terminalStates??[]),failure=new Set(workflow.failureStates??[]),vars=mergeVars(workflow.vars,options.vars),env2=allowedEnv(workflow.env?.allow??[],options.env),current=resumeFromState!==void 0?states.get(resumeFromState):states.get(workflow.initialState),snapshot=resumeFromState===void 0?void 0:await this.options.persistence.loadLatestStateSnapshot(runId),transitionsTaken=snapshotTransitions(snapshot?.data),lastActionResult=snapshotActionResult(snapshot?.data),iterationBound=workflow.iterationBound??50,defaultOnError=workflow.defaultOnError,resumeMode=resumeFromState!==void 0?options.resumeMode??"skip-enter":void 0,persistedViaHop=!1,declaredTerminalReason;if(current===void 0){let label=resumeFromState??workflow.initialState;throw new FSMError(`State "${label}" is not declared`)}while(!0){if(resumeMode==="skip-enter")resumeMode=void 0,persistedViaHop=!0;else{if(resumeMode==="rerun-enter"){if(current.resumeRerun!==!0)throw new FSMError(`Cannot rerun-resume into state "${current.id}": not marked resumeRerun: true (mark its on-enter actions as safe to re-run, or resume with resumeMode: "skip-enter")`);resumeMode=void 0,persistedViaHop=!0}await lifecycle.enter(current.id,transitionsTaken,!persistedViaHop,vars);let enter=options.dryRun?EMPTY_OUTCOME:await runActionSequence(current.onEnter??[],vars,{host:this.options.host,persistence:this.options.persistence,lifecycle,workflowName:workflow.name,stateOrNodeId:current.id,runId,mode:"state-machine",transitionsTaken,env:env2,options,defaultOnError});if(enter.result!==void 0)lastActionResult=enter.result;if(enter.setVars)vars=mergeSetVars(vars,enter.setVars);if(enter.outcome==="terminal")return failure.has(current.id)?await lifecycle.fail(current.id,transitionsTaken,`terminal:${current.id}`):await lifecycle.done(current.id,transitionsTaken);if(enter.outcome==="fail")return await lifecycle.fail(current.id,transitionsTaken,lastActionResult?.error);if(current.pause===!0)return await lifecycle.pause(current.id,transitionsTaken,vars,lastActionResult)}let outbound=workflow.transitions.filter((transition)=>transition.from===current?.id);if(terminal.has(current.id)||outbound.length===0){let declared=declaredTerminalReason;return declaredTerminalReason=void 0,failure.has(current.id)?await lifecycle.fail(current.id,transitionsTaken,declared??`terminal:${current.id}`):await lifecycle.done(current.id,transitionsTaken,declared)}let nextTransition=await firstPassingTransition(outbound,this.options.host,{runId,current:current.id,vars,env:env2,lastActionResult,workdir:options.workdir},lifecycle);if(nextTransition===void 0)return await lifecycle.fail(current.id,transitionsTaken,"no-passing-transition");let exit=options.dryRun?EMPTY_OUTCOME:await runActionSequence(current.onExit??[],vars,{host:this.options.host,persistence:this.options.persistence,lifecycle,workflowName:workflow.name,stateOrNodeId:current.id,runId,mode:"state-machine",transitionsTaken,env:env2,options,defaultOnError});if(exit.result!==void 0)lastActionResult=exit.result;if(exit.setVars)vars=mergeSetVars(vars,exit.setVars);if(exit.outcome==="terminal")return failure.has(current.id)?await lifecycle.fail(current.id,transitionsTaken,`terminal:${current.id}`):await lifecycle.done(current.id,transitionsTaken);if(exit.outcome==="fail")return await lifecycle.fail(current.id,transitionsTaken,exit.result?.error);if(transitionsTaken+=1,await lifecycle.commitHop(current.id,nextTransition.to,nextTransition.trigger??null,transitionsTaken,{phase:nextTransition.to,status:"running"},vars),transitionsTaken>iterationBound)return await lifecycle.fail(current.id,transitionsTaken,"iteration-bound-exceeded");let nextState=states.get(nextTransition.to);if(nextState===void 0)throw new FSMError(`Transition target "${nextTransition.to}" is not declared`);current=nextState,declaredTerminalReason=nextTransition.terminalReason,persistedViaHop=!0}}}var EMPTY_OUTCOME={outcome:"completed",result:void 0,setVars:void 0};async function firstPassingTransition(transitions,host,context4,lifecycle){for(let transition of transitions){if(transition.guard===void 0)return transition;let resolvedOptions=transition.guard.kind==="shell"?resolveShellCommandTemplates(transition.guard.options??{},{vars:context4.vars,env:context4.env??{}}):resolveTemplates(transition.guard.options??{},{vars:context4.vars,env:context4.env??{}}),passed=await host.evaluateGuard(transition.guard.kind,resolvedOptions,context4);if(lifecycle.guardEvaluated(context4.current,transition.to,transition.guard.kind,passed),passed)return transition}return}class TransitionFlowDriver{options;constructor(options){this.options=options}async run(workflow,options={}){return await RunLifecycle.run(workflow.name,"transition-flow",{persistence:this.options.persistence,events:options.events},options,(lifecycle)=>this.loop(workflow,options,lifecycle))}async resume(workflow,runId,resumeFromNode,externalKey,options={}){return await RunLifecycle.resume(workflow.name,"transition-flow",{persistence:this.options.persistence,events:options.events},runId,externalKey,(lifecycle)=>this.loop(workflow,options,lifecycle,resumeFromNode),options.resumeOwner?.attemptId)}async loop(workflow,options,lifecycle,resumeFromNode){let runId=lifecycle.runId,nodes=new Map(workflow.nodes.map((node)=>[node.id,node])),terminal=new Set(workflow.terminalNodes??[]),vars=mergeVars(workflow.vars,options.vars),env2=allowedEnv(workflow.env?.allow??[],options.env),current=resumeFromNode!==void 0?nodes.get(resumeFromNode):nodes.get(workflow.initialNode),snapshot=resumeFromNode===void 0?void 0:await this.options.persistence.loadLatestStateSnapshot(runId),transitionsTaken=snapshotTransitions(snapshot?.data),lastActionResult=snapshotActionResult(snapshot?.data),iterationBound=workflow.iterationBound??50,defaultOnError=workflow.defaultOnError,resumeMode=resumeFromNode!==void 0?options.resumeMode??"skip-enter":void 0,persistedViaHop=!1;if(current===void 0){let label=resumeFromNode??workflow.initialNode;throw new FSMError(`Node "${label}" is not declared`)}while(!0){if(resumeMode==="skip-enter")resumeMode=void 0,persistedViaHop=!0;else{if(resumeMode==="rerun-enter"){if(current.resumeRerun!==!0)throw new FSMError(`Cannot rerun-resume into node "${current.id}": not marked resumeRerun: true (mark its action as safe to re-run, or resume with resumeMode: "skip-enter")`);resumeMode=void 0,persistedViaHop=!0}if(await lifecycle.enter(current.id,transitionsTaken,!persistedViaHop,vars),options.dryRun){if(current.action!==void 0)lastActionResult=void 0}else if(current.action!==void 0){let step=await runActionStep(current.action,vars,{host:this.options.host,persistence:this.options.persistence,lifecycle,workflowName:workflow.name,stateOrNodeId:current.id,runId,mode:"transition-flow",transitionsTaken,env:env2,options,defaultOnError});if(lastActionResult=step.result,step.result?.setVars)vars=mergeSetVars(vars,step.result.setVars);if(step.outcome==="terminal")return await lifecycle.done(current.id,transitionsTaken);if(step.outcome==="fail")return await lifecycle.fail(current.id,transitionsTaken,step.result?.error)}if(current.pause===!0)return await lifecycle.pause(current.id,transitionsTaken,vars,lastActionResult)}let outbound=workflow.edges.filter((edge2)=>edge2.from===current?.id);if(terminal.has(current.id)||outbound.length===0)return await lifecycle.done(current.id,transitionsTaken);let edge=await firstPassingEdge(outbound,this.options.host,{runId,current:current.id,vars,env:env2,lastActionResult,workdir:options.workdir},lifecycle);if(edge===void 0)return await lifecycle.fail(current.id,transitionsTaken,"no-passing-edge");if(transitionsTaken+=1,await lifecycle.commitHop(current.id,edge.to,edge.condition?.kind??null,transitionsTaken,{phase:edge.to,status:"running"},vars),transitionsTaken>iterationBound)return await lifecycle.fail(current.id,transitionsTaken,"iteration-bound-exceeded");let nextNode=nodes.get(edge.to);if(nextNode===void 0)throw new FSMError(`Edge target "${edge.to}" is not declared`);current=nextNode,persistedViaHop=!0}}}async function firstPassingEdge(edges,host,context4,lifecycle){for(let edge of edges){if(edge.condition===void 0)return edge;let resolvedOptions=edge.condition.kind==="shell"?resolveShellCommandTemplates(edge.condition.options??{},{vars:context4.vars,env:context4.env??{}}):resolveTemplates(edge.condition.options??{},{vars:context4.vars,env:context4.env??{}}),passed=await host.evaluateGuard(edge.condition.kind,resolvedOptions,context4);if(lifecycle.guardEvaluated(context4.current,edge.to,edge.condition.kind,passed),passed)return edge}return}class WorkflowService{host;persistence;runLocks=new Map;lifecycleBus;constructor(host,persistence,lifecycleBus){this.host=host,this.persistence=persistence,this.lifecycleBus=lifecycleBus??host.lifecycleBus}resolveEvents(events){return events??(this.lifecycleBus?new EventBus({lifecycleBus:this.lifecycleBus}):void 0)}async load(path8){return await loadWorkflowDef(path8)}async run(workflow,options={}){let events=this.resolveEvents(options.events);if(workflow.kind==="transition-flow")return await new TransitionFlowDriver({host:this.host,persistence:this.persistence}).run(workflow,{...options,events});return await new StateMachineDriver({host:this.host,persistence:this.persistence}).run(workflow,{...options,events})}async runFile(path8,options={}){return await this.run(await this.load(path8),options)}async listRuns(){return await this.persistence.listRuns()}async findRunByKey(workflowName,externalKey){return await this.persistence.findRunByKey(workflowName,externalKey)}async createOrAttachRun(record2){return await this.persistence.createOrAttachRun(record2)}async reseedRun(workflowOrRunId,runIdOrNewState,newStateOrOptions,maybeOptions){let args=typeof workflowOrRunId==="string"?{workflow:void 0,runId:workflowOrRunId,newState:runIdOrNewState,options:newStateOrOptions}:{workflow:workflowOrRunId,runId:runIdOrNewState,newState:newStateOrOptions,options:maybeOptions};if(args.workflow!==void 0)this.assertReseedTargetDeclared(args.workflow,args.runId,args.newState);await this.commitReseed(args.runId,args.newState,args.options)}assertReseedTargetDeclared(workflow,runId,newState){if(workflow.kind==="transition-flow")throw new FSMError("reseedRun only supports state-machine workflows");if(!workflow.states.some((state)=>state.id===newState))throw new FSMError(`Cannot reseed run "${runId}" to undeclared state "${newState}"`)}async commitReseed(runId,newState,options){let extKey=(await this.persistence.loadRun(runId))?.external_key??void 0,result=await this.persistence.reseedRun(runId,newState);this.resolveEvents(options?.events)?.emit("workflow.run.reseeded",{runId,fromState:result.fromState??"",toState:result.toState,externalKey:extKey,severity:"warning"})}async resumeRun(workflow,runId,options){let run=await this.persistence.loadRun(runId);if(run===void 0)throw new WorkflowResumeError(`Run "${runId}" not found`);if(run.status!=="paused"&&run.status!=="interrupted")throw new WorkflowResumeError(`Run "${runId}" is not resumable (status: ${run.status})`);let currentState=await this.persistence.loadCurrentState(runId);if(currentState===void 0)throw new WorkflowResumeError(`Run "${runId}" has no persisted state to resume from`);let resumeMode=options?.resumeMode??(run.status==="interrupted"?"rerun-enter":"skip-enter");this.assertResumeRerunAllowed(workflow,currentState,resumeMode);let snapshot=await this.persistence.loadLatestStateSnapshot(runId),persistedVars=extractEffectiveVars(snapshot?.data),restoredVars=mergeVars(persistedVars,options?.vars),owner=options?.resumeOwner??{attemptId:crypto.randomUUID()},mergedOptions={...options,vars:restoredVars,resumeMode,resumeOwner:owner},claimed=await this.persistence.claimRunOwnership(runId,owner,["paused","interrupted"]);if(claimed===void 0){let current=await this.persistence.loadRun(runId);throw new WorkflowResumeError(`Run "${runId}" could not be claimed for resume (status: ${current?.status??"unknown"}, owner: ${current?.owner_attempt??"none"})`)}let extKey=claimed.external_key??void 0;if(this.resolveEvents(mergedOptions.events)?.emit("workflow.run.resumed",{runId,node:currentState,resumeMode,ownerAttemptId:owner.attemptId,externalKey:extKey,severity:"info"}),workflow.kind==="transition-flow")return await new TransitionFlowDriver({host:this.host,persistence:this.persistence}).resume(workflow,runId,currentState,extKey,mergedOptions);return await new StateMachineDriver({host:this.host,persistence:this.persistence}).resume(workflow,runId,currentState,extKey,mergedOptions)}async interruptRun(runId,reason){let interrupted=await this.persistence.interruptRun(runId,reason);if(interrupted!==void 0)this.resolveEvents(void 0)?.emit("workflow.run.interrupted",{runId,reason,externalKey:interrupted.external_key??void 0,severity:"warning"});return interrupted}assertResumeRerunAllowed(workflow,currentState,resumeMode){if(resumeMode!=="rerun-enter")return;let node=workflow.kind==="transition-flow"?workflow.nodes.find((candidate)=>candidate.id===currentState):workflow.states.find((candidate)=>candidate.id===currentState);if(node!==void 0&&node.resumeRerun!==!0)throw new FSMError(`Cannot rerun-resume into "${currentState}": not marked resumeRerun: true `+'(mark its actions as safe to re-run — idempotent or deduped by runId+state — or resume with resumeMode: "skip-enter")')}async listPausedRuns(options){return await this.persistence.listPausedRuns(options)}async requestTransition(workflow,runId,toState,options){let release,previous=this.runLocks.get(runId)??Promise.resolve(),next=previous.then(()=>new Promise((resolve)=>{release=resolve}));this.runLocks.set(runId,next),await previous;try{return await this.evaluateAndCommit(workflow,runId,toState,options)}finally{if(release(),this.runLocks.get(runId)===next)this.runLocks.delete(runId)}}async evaluateAndCommit(workflow,runId,toState,options){let currentState=await this.persistence.loadCurrentState(runId),extKey=(await this.persistence.loadRun(runId))?.external_key??void 0;if(currentState===void 0)return{allowed:!1,reason:"no-such-transition",detail:`No state recorded for run "${runId}"`};let events=this.resolveEvents(options?.events),lifecycle=RunLifecycle.forExternalTransition(workflow.name,runId,{persistence:this.persistence,events},extKey),transition=workflow.transitions.find((t)=>t.from===currentState&&t.to===toState);if(transition===void 0)return this.denyTransition(events,runId,currentState,toState,extKey,{reason:"no-such-transition",detail:`No transition from "${currentState}" to "${toState}"`});let snapshot=await this.persistence.loadLatestStateSnapshot(runId),vars=mergeVars(mergeVars(workflow.vars,extractEffectiveVars(snapshot?.data)),options?.vars),env2=allowedEnv(workflow.env?.allow??[],options?.env);if(transition.guard!==void 0){let resolvedGuardOptions=transition.guard.kind==="shell"?resolveShellCommandTemplates(transition.guard.options??{},{vars,env:env2}):resolveTemplates(transition.guard.options??{},{vars,env:env2}),guardResult=await this.host.evaluateGuardResult(transition.guard.kind,resolvedGuardOptions,{runId,current:currentState,lastActionResult:snapshotActionResult(snapshot?.data),vars,env:env2,workdir:options?.workdir});if(lifecycle.guardEvaluated(currentState,toState,transition.guard.kind,guardResult.passed),!guardResult.passed)return this.denyTransition(events,runId,currentState,toState,extKey,{reason:"guard-failed",detail:`Guard "${transition.guard.kind}" denied transition from "${currentState}" to "${toState}"`,guardKind:transition.guard.kind,...guardResult.report===void 0?{}:{guardReport:guardResult.report}})}let trigger=transition.trigger??null;return await lifecycle.commitHop(currentState,toState,trigger,snapshotTransitions(snapshot?.data)+1,void 0,vars),events?.emit("workflow.transition.requested",{runId,from:currentState,to:toState,trigger,externalKey:extKey,severity:"info"}),{allowed:!0,fromState:currentState,toState}}denyTransition(events,runId,from,to,externalKey,denial){return events?.emit("workflow.transition.denied",{runId,from,to,reason:denial.reason,externalKey,severity:"error"}),{allowed:!1,...denial}}}function extractEffectiveVars(data){if(data===void 0)return{};let raw=data.effectiveVars;if(raw===void 0||raw===null)return{};if(typeof raw!=="object")return{};let filtered={};for(let[key,value]of Object.entries(raw))if(typeof value==="string")filtered[key]=value;return filtered}var RULE_ENGINE_SCHEMA_SQL=`
637
659
  CREATE TABLE IF NOT EXISTS rule_runs (
638
660
  id TEXT PRIMARY KEY,
639
661
  preset TEXT,
@@ -837,6 +859,8 @@ ALTER TABLE agent_executor_updates ADD COLUMN owner TEXT;
837
859
  ALTER TABLE agent_executor_updates ADD COLUMN layer TEXT;
838
860
  ALTER TABLE agent_executor_updates ADD COLUMN skipped_reason TEXT;
839
861
  UPDATE agent_executor_updates SET owner = 'quota', layer = 'project' WHERE owner IS NULL;
862
+ `,CLI_RUNS_TERMINAL_REASON_SCHEMA_SQL=`
863
+ ALTER TABLE runs ADD COLUMN terminal_reason TEXT;
840
864
  `,PROJECT_CLAIMS_SCHEMA_SQL=`
841
865
  CREATE TABLE IF NOT EXISTS project_claims (
842
866
  project_path TEXT NOT NULL,
@@ -1421,7 +1445,7 @@ ALTER TABLE queue_jobs ADD COLUMN timeout_ms INTEGER;
1421
1445
  ALTER TABLE queue_jobs ADD COLUMN timeout_unlimited INTEGER NOT NULL DEFAULT 0;
1422
1446
  ALTER TABLE queue_jobs ADD COLUMN attempt_token TEXT;
1423
1447
  ALTER TABLE queue_jobs ADD COLUMN lease_expires_at INTEGER;
1424
- `,CLI_MIGRATIONS=[{id:"0000_spur_cli_foundation",sql:CLI_SCHEMA_SQL},{id:"0001_spur_cli_team_inbox",sql:INBOX_MESSAGES_SCHEMA_SQL},{id:"0002_spur_cli_rule_history",sql:RULE_ENGINE_SCHEMA_SQL},{id:"0003_spur_cli_planning",sql:PLANNING_SCHEMA_SQL},{id:"0004_spur_cli_queue_jobs",sql:QUEUE_JOBS_SCHEMA_SQL},{id:"0005_spur_cli_run_pid",sql:RUN_PID_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"pid"}},{id:"0006_spur_cli_system_events",sql:SYSTEM_EVENTS_SCHEMA_SQL},{id:"0007_spur_cli_runs_external_key",sql:RUNS_EXTERNAL_KEY_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"external_key"}},{id:"0008_spur_cli_system_events_correlation",sql:SYSTEM_EVENTS_CORRELATION_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"system_events",column:"sequence"}},{id:"0009_spur_cli_history_message_run_idx",sql:HISTORY_MESSAGE_RUN_INDEX_SCHEMA_SQL},{id:"0010_spur_cli_coordination_runs",sql:COORDINATION_RUNS_SCHEMA_SQL},{id:"0011_spur_cli_system_events_sequence_idx",sql:SYSTEM_EVENTS_SEQUENCE_INDEX_SCHEMA_SQL},{id:"0012_spur_cli_history_tool_call_args_raw",sql:HISTORY_TOOL_CALL_ARGS_RAW_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"args_raw"}},{id:"0013_spur_cli_history_run_session",sql:HISTORY_RUN_SESSION_SCHEMA_SQL},{id:"0014_spur_cli_system_events_name_occurred_idx",sql:SYSTEM_EVENTS_NAME_OCCURRED_INDEX_SCHEMA_SQL},{id:"0015_spur_cli_history_tool_call_call_id",sql:HISTORY_TOOL_CALL_CALL_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"call_id"}},{id:"0016_spur_cli_history_message_ts_nullable",sql:HISTORY_MESSAGE_TS_NULLABLE_SCHEMA_SQL},{id:"0017_spur_cli_runs_status_completed_to_done",sql:"UPDATE runs SET status = 'done' WHERE status = 'completed'"},{id:"0018_spur_cli_history_message_request_id",sql:HISTORY_MESSAGE_REQUEST_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_message",column:"request_id"}},{id:"0019_spur_cli_history_etl_tables_drop",sql:HISTORY_ETL_TABLES_DROP_SCHEMA_SQL},{id:"0020_spur_cli_history_board_query_indexes",sql:HISTORY_BOARD_QUERY_INDEXES_SCHEMA_SQL},{id:"0021_spur_cli_history_board_rollups",sql:HISTORY_BOARD_ROLLUPS_SCHEMA_SQL},{id:"0022_spur_cli_history_performance_indexes",sql:HISTORY_PERFORMANCE_INDEXES_SCHEMA_SQL},{id:"0023_spur_cli_history_message_request_id_idx",sql:HISTORY_MESSAGE_REQUEST_ID_INDEX_SCHEMA_SQL},{id:"0024_spur_cli_history_checkpoint_identity",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_size INTEGER",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_size"}},{id:"0025_spur_cli_history_checkpoint_identity_mtime",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_mtime_ms REAL",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_mtime_ms"}},{id:"0026_spur_cli_history_message_duration_source",sql:"ALTER TABLE history_message ADD COLUMN duration_source TEXT",addColumnIfMissing:{table:"history_message",column:"duration_source"}},{id:"0027_spur_cli_history_refresh_active_unique",sql:HISTORY_REFRESH_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0028_spur_cli_history_task_session",sql:HISTORY_TASK_SESSION_SCHEMA_SQL},{id:"0029_spur_cli_history_tool_call_indexes",sql:HISTORY_TOOL_CALL_INDEXES_SCHEMA_SQL},{id:"0030_spur_cli_history_board_covering_indexes",sql:HISTORY_BOARD_COVERING_INDEXES_SCHEMA_SQL},{id:"0031_spur_cli_history_board_tool_stats_columns",sql:HISTORY_BOARD_TOOL_STATS_COLUMNS_SCHEMA_SQL},{id:"0032_spur_cli_history_board_skill_5m",sql:HISTORY_BOARD_SKILL_5M_SCHEMA_SQL},{id:"0033_spur_cli_importer_schema_version",sql:`INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES ('${IMPORTER_SCHEMA_LEDGER_PREFIX}${HISTORY_IMPORT_SCHEMA_VERSION}', strftime('%s', 'now') * 1000);`},{id:"0034_spur_cli_history_tool_identity",sql:HISTORY_TOOL_IDENTITY_SCHEMA_SQL},{id:"0035_spur_cli_history_measure_vector",sql:HISTORY_MEASURE_VECTOR_SCHEMA_SQL},{id:"0036_spur_cli_history_rollup_watermark",sql:HISTORY_ROLLUP_WATERMARK_SCHEMA_SQL},{id:"0037_spur_cli_history_dimension_marts",sql:HISTORY_DIMENSION_MARTS_SCHEMA_SQL},{id:"0038_spur_cli_retention_compaction_meta",sql:RETENTION_COMPACTION_META_SCHEMA_SQL},{id:"0039_spur_cli_bounded_rollup_derivations",sql:BOUNDED_ROLLUP_DERIVATIONS_SCHEMA_SQL,addColumnIfMissing:{table:"history_board_source_daily",column:"raw_messages"}},{id:"0040_spur_cli_agent_executor_updates",sql:AGENT_EXECUTOR_UPDATES_SCHEMA_SQL},{id:"0041_spur_cli_queue_jobs_deadline_lease_columns",sql:QUEUE_JOBS_DEADLINE_LEASE_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"queue_jobs",column:"timeout_ms"}},{id:"0042_spur_cli_history_model_fallback_index",sql:HISTORY_MESSAGE_MODEL_FALLBACK_INDEX_SCHEMA_SQL},{id:"0043_spur_cli_inbox_messages_request_key",sql:INBOX_MESSAGES_REQUEST_KEY_SCHEMA_SQL,addColumnIfMissing:{table:"inbox_messages",column:"request_key"}},{id:"0044_spur_cli_coordination_runs_receipt_columns",sql:COORDINATION_RUNS_RECEIPT_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"coordination_runs",column:"message_ids_json"}},{id:"0045_spur_cli_project_claims",sql:PROJECT_CLAIMS_SCHEMA_SQL},{id:"0046_spur_cli_project_strategy",sql:PROJECT_STRATEGY_SCHEMA_SQL},{id:"0047_spur_cli_scheduler_custom_active_unique",sql:SCHEDULER_CUSTOM_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0048_spur_cli_agent_executor_updates_owner_columns",sql:AGENT_EXECUTOR_UPDATES_OWNER_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"agent_executor_updates",column:"owner"}}];async function allMigrationsJournaled(adapter,migrations){if(migrations.length===0)return!0;if(!await tableExists(adapter,"__spur_cli_migrations"))return!1;let placeholders=migrations.map(()=>"?").join(", ");if(((await adapter.queryFirst(`SELECT COUNT(*) AS n FROM "__spur_cli_migrations" WHERE id IN (${placeholders})`,...migrations.map((m)=>m.id)))?.n??0)!==migrations.length)return!1;if(migrations.some((m)=>m.id==="0033_spur_cli_importer_schema_version")){if(!await adapter.queryFirst('SELECT id FROM "__spur_cli_migrations" WHERE id = ?',IMPORTER_SCHEMA_LEDGER_PREFIX+HISTORY_IMPORT_SCHEMA_VERSION))return!1}return!0}async function applyCliMigrations(adapter,migrations=CLI_MIGRATIONS){if(await allMigrationsJournaled(adapter,migrations))return 0;await adapter.exec('CREATE TABLE IF NOT EXISTS "__spur_cli_migrations" (id TEXT PRIMARY KEY, applied_at INTEGER NOT NULL)');let applied=0;for(let migration of migrations){if(await adapter.queryFirst('SELECT id FROM "__spur_cli_migrations" WHERE id = ?',migration.id)!=null)continue;if(migration.id==="0009_spur_cli_history_message_run_idx"&&!await tableExists(adapter,"history_message")){for(let statement of splitSqlStatements(HISTORY_IMPORT_SCHEMA_SQL))await adapter.exec(statement);let versionLedgerId=IMPORTER_SCHEMA_LEDGER_PREFIX+HISTORY_IMPORT_SCHEMA_VERSION;await adapter.run('INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',[versionLedgerId,Date.now()])}if((migration.id==="0024_spur_cli_history_checkpoint_identity"||migration.id==="0025_spur_cli_history_checkpoint_identity_mtime")&&!await tableExists(adapter,"history_import_checkpoint")){await adapter.run('INSERT INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',[migration.id,Date.now()]);continue}if(migration.id==="0034_spur_cli_history_tool_identity"&&await tableExists(adapter,"history_tool_call")){if(!await columnExists(adapter,"history_tool_call","effective_tool_name"))await adapter.exec("ALTER TABLE history_tool_call ADD COLUMN effective_tool_name TEXT NOT NULL DEFAULT 'unknown'");if(!await columnExists(adapter,"history_tool_call","tool_name_alias"))await adapter.exec("ALTER TABLE history_tool_call ADD COLUMN tool_name_alias TEXT NOT NULL DEFAULT 'unknown'")}let addColumnGuard=migration.addColumnIfMissing,shouldApplySql=addColumnGuard===void 0||!await columnExists(adapter,addColumnGuard.table,addColumnGuard.column),tsNullableSkip=migration.id==="0016_spur_cli_history_message_ts_nullable"&&(!await tableExists(adapter,"history_message")||!await columnNotNull(adapter,"history_message","ts")),sequenceIndexSkip=migration.id==="0011_spur_cli_system_events_sequence_idx"&&!await tableExists(adapter,"system_events"),argsRawSkip=migration.id==="0012_spur_cli_history_tool_call_args_raw"&&!await tableExists(adapter,"history_tool_call"),callIdSkip=migration.id==="0015_spur_cli_history_tool_call_call_id"&&!await tableExists(adapter,"history_tool_call"),nameOccurredIndexSkip=migration.id==="0014_spur_cli_system_events_name_occurred_idx"&&!await tableExists(adapter,"system_events"),historyBoardQueryIndexesSkip=migration.id==="0020_spur_cli_history_board_query_indexes"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","seq")||!await columnExists(adapter,"history_message","duration_ms")||!await columnExists(adapter,"history_message","role")||!await columnExists(adapter,"history_message","input_tokens")||!await columnExists(adapter,"history_message","cache_read_tokens")),historyPerformanceIndexesSkip=migration.id==="0022_spur_cli_history_performance_indexes"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","ts")||!await columnExists(adapter,"history_message","model")||!await tableExists(adapter,"history_tool_call")),historyToolCallIndexesSkip=migration.id==="0029_spur_cli_history_tool_call_indexes"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","ts")||!await tableExists(adapter,"history_tool_call")),historyBoardCoveringIndexesSkip=migration.id==="0030_spur_cli_history_board_covering_indexes"&&(!await tableExists(adapter,"history_daily_stats")||!await tableExists(adapter,"history_board_tool_5m")||!await tableExists(adapter,"history_board_message_5m")||!await tableExists(adapter,"history_board_session_stats")||!await tableExists(adapter,"history_board_source_daily")||!await tableExists(adapter,"history_tool_call")||!await tableExists(adapter,"history_task_session")),runsStatusDoneSkip=migration.id==="0017_spur_cli_runs_status_completed_to_done"&&(!await tableExists(adapter,"runs")||!await columnExists(adapter,"runs","status")),historyBoardToolStatsColumnsSkip=migration.id==="0031_spur_cli_history_board_tool_stats_columns"&&(!await tableExists(adapter,"history_board_tool_stats")||await columnExists(adapter,"history_board_tool_stats","fresh_input_tokens")),queueJobsActiveIndexSkip=migration.id==="0027_spur_cli_history_refresh_active_unique"&&!await tableExists(adapter,"queue_jobs"),schedulerCustomActiveIndexSkip=migration.id==="0047_spur_cli_scheduler_custom_active_unique"&&!await tableExists(adapter,"queue_jobs"),queueJobsDeadlineLeaseSkip=migration.id==="0041_spur_cli_queue_jobs_deadline_lease_columns"&&!await tableExists(adapter,"queue_jobs"),inboxRequestKeySkip=migration.id==="0043_spur_cli_inbox_messages_request_key"&&!await tableExists(adapter,"inbox_messages"),coordinationReceiptColumnsSkip=migration.id==="0044_spur_cli_coordination_runs_receipt_columns"&&!await tableExists(adapter,"coordination_runs"),historyToolIdentitySkip=migration.id==="0034_spur_cli_history_tool_identity"&&!await tableExists(adapter,"history_tool_call"),historyMeasureVectorSkip=migration.id==="0035_spur_cli_history_measure_vector"&&(!await tableExists(adapter,"history_board_message_5m")||await columnExists(adapter,"history_board_message_5m","cache_write_tokens")),historyRollupWatermarkSkip=migration.id==="0036_spur_cli_history_rollup_watermark"&&(await tableExists(adapter,"history_board_rollup_watermark")||!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","imported_at")),boundedRollupDerivationsSkip=migration.id==="0039_spur_cli_bounded_rollup_derivations"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","source_file")||!await tableExists(adapter,"history_board_source_daily")),historyModelFallbackIndexSkip=migration.id==="0042_spur_cli_history_model_fallback_index"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","model"));if(shouldApplySql&&!sequenceIndexSkip&&!argsRawSkip&&!runsStatusDoneSkip&&!nameOccurredIndexSkip&&!historyBoardQueryIndexesSkip&&!historyPerformanceIndexesSkip&&!historyToolCallIndexesSkip&&!historyBoardCoveringIndexesSkip&&!historyBoardToolStatsColumnsSkip&&!callIdSkip&&!tsNullableSkip&&!queueJobsActiveIndexSkip&&!schedulerCustomActiveIndexSkip&&!queueJobsDeadlineLeaseSkip&&!inboxRequestKeySkip&&!coordinationReceiptColumnsSkip&&!historyToolIdentitySkip&&!historyMeasureVectorSkip&&!historyRollupWatermarkSkip&&!boundedRollupDerivationsSkip&&!historyModelFallbackIndexSkip)for(let statement of splitSqlStatements(migration.sql))await adapter.exec(statement);if(historyToolIdentitySkip&&!await tableExists(adapter,"history_tool_alias_map"))await adapter.exec("CREATE TABLE IF NOT EXISTS history_tool_alias_map (source TEXT NOT NULL, effective_tool_name TEXT NOT NULL, alias TEXT NOT NULL, PRIMARY KEY (source, effective_tool_name));");await adapter.run('INSERT INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',migration.id,Date.now()),applied+=1}if(migrations.some((m)=>m.id==="0033_spur_cli_importer_schema_version")){let currentVersionLedgerId=IMPORTER_SCHEMA_LEDGER_PREFIX+HISTORY_IMPORT_SCHEMA_VERSION;if(!await adapter.queryFirst('SELECT id FROM "__spur_cli_migrations" WHERE id = ?',currentVersionLedgerId)){for(let statement of splitSqlStatements(HISTORY_IMPORT_SCHEMA_SQL))if(statement.startsWith("CREATE TABLE"))await adapter.exec(statement);await adapter.run('INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',[currentVersionLedgerId,Date.now()]),applied+=1}}return applied}async function columnExists(adapter,table3,column2){return(await adapter.queryAll(`PRAGMA table_info("${table3}")`)).some((row)=>row.name===column2)}async function columnNotNull(adapter,table3,column2){return(await adapter.queryAll(`PRAGMA table_info("${table3}")`)).some((row)=>row.name===column2&&row.notnull===1)}async function tableExists(adapter,table3){return await adapter.queryFirst("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?",table3)!=null}function splitSqlStatements(sql4){return sql4.split(";").map((statement)=>statement.trim()).filter(Boolean)}var SQLITE_BUSY_TIMEOUT_MS=30000;async function createMigratedDb(options){let{createDbAdapter:createDbAdapter3}=await Promise.resolve().then(() => (init_dist4(),exports_dist)),adapter=await createDbAdapter3({driver:"bun-sqlite",url:options.url});return await adapter.exec(`PRAGMA busy_timeout = ${SQLITE_BUSY_TIMEOUT_MS}`),await applyCliMigrations(adapter),adapter}init_zod();init_zod();var STAGE_REGISTRY_SCHEMA_VERSION={major:1,minor:3},stageSchemaVersionSchema=exports_external.object({major:exports_external.number().int().nonnegative(),minor:exports_external.number().int().nonnegative()}).strict();var MUTATION_CLASSES=["none","corpus","code","tests","verdict","learnings","driver","irreversible"];var inlineExecutionSchema=exports_external.object({kind:exports_external.literal("inline"),current_agent_allowed:exports_external.literal(!0),may_reuse_captured_layers:exports_external.boolean().optional()}).strict(),subprocessExecutionSchema=exports_external.object({kind:exports_external.literal("subprocess"),current_agent_allowed:exports_external.literal(!1),via:exports_external.literal("spur-agent-run")}).strict(),deterministicExecutionSchema=exports_external.object({kind:exports_external.literal("deterministic"),current_agent_allowed:exports_external.literal(!1),executor:exports_external.enum(["cli","script"])}).strict(),hitlExecutionSchema=exports_external.object({kind:exports_external.literal("hitl"),current_agent_allowed:exports_external.literal(!0),gate_timing:exports_external.enum(["pre","post","both"])}).strict(),irreversibleExecutionSchema=exports_external.object({kind:exports_external.literal("irreversible"),requires_operator_intent:exports_external.literal(!0),current_agent_allowed:exports_external.boolean(),rollback_disclaimer:exports_external.string().min(1)}).strict(),executionKindSchema=exports_external.discriminatedUnion("kind",[inlineExecutionSchema,subprocessExecutionSchema,deterministicExecutionSchema,hitlExecutionSchema,irreversibleExecutionSchema]),ARTIFACT_DIRECTIONS=["input","output"],stageArtifactSchema=exports_external.object({kind:exports_external.string().min(1),direction:exports_external.enum(ARTIFACT_DIRECTIONS),identity:exports_external.string().optional(),description:exports_external.string().optional(),required:exports_external.boolean().optional().default(!0)}).strict(),stageGateSchema=exports_external.object({name:exports_external.string().min(1),timing:exports_external.enum(["pre","post","transition"]),min_verdict:exports_external.enum(["pass","partial","fail"]).optional(),description:exports_external.string().optional()}).strict(),stageRetryPolicySchema=exports_external.object({max_attempts:exports_external.number().int().min(1),terminal_stop:exports_external.enum(["block","escalate","fail"]),timeout_seconds:exports_external.number().int().positive().optional()}).strict(),CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"],LEGACY_CAPABLE_ALIAS="capable";function normalizeCapabilityTier(value){return value===LEGACY_CAPABLE_ALIAS?"capable-1":value}var capabilityTierSchema=exports_external.preprocess(normalizeCapabilityTier,exports_external.enum(CAPABILITY_TIERS)),objectiveEscalationTriggerSchema=exports_external.enum(["gate-fail","timeout","insufficient-evidence","retry-exhausted","resource-exhaustion","auth"]),stageModelPolicySchema=exports_external.object({min_tier:capabilityTierSchema,fallback:exports_external.array(exports_external.object({tier:capabilityTierSchema,trigger:objectiveEscalationTriggerSchema}).strict()),override_key:exports_external.string().optional()}).strict();var CONTEXT_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence","run-state","tool-observations"],stageContextLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),required:exports_external.literal(!0)}).strict(),stageEventSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().optional()}).strict(),STAGE_ID_PATTERN=/^[a-z][a-z0-9-]*$/,stageRecordSchema=exports_external.object({schema_version:stageSchemaVersionSchema,id:exports_external.string().regex(STAGE_ID_PATTERN,{message:"stage id must be lowercase kebab-case"}),aliases:exports_external.array(exports_external.string().min(1)).optional().default([]),description:exports_external.string().min(1),artifacts:exports_external.array(stageArtifactSchema).min(1),reasoning_skill:exports_external.string().min(1),required_references:exports_external.array(exports_external.string().min(1)).optional().default([]),gates:exports_external.array(stageGateSchema).optional().default([]),mutation_class:exports_external.enum(MUTATION_CLASSES),retry:stageRetryPolicySchema,model_policy:stageModelPolicySchema,context_layers:exports_external.array(stageContextLayerSchema).optional().default([]),observability:exports_external.array(stageEventSchema).optional().default([]),execution:executionKindSchema}).strict();var REGISTERED_CANONICAL_STAGES=[{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"refine",aliases:["dev-refine"],description:"dev-refine: Q&A refinement, section filling, AC tightening",artifacts:[{kind:"task-section",direction:"input",required:!0,description:"Background/Requirements sections"},{kind:"task-section",direction:"output",required:!0,description:"Q&A/Design/Plan/AC sections"}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-2",trigger:"gate-fail"},{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"plan",aliases:["dev-plan"],description:"dev-plan: feature intake -> AC generation -> decomposition",artifacts:[{kind:"feature-frontmatter",direction:"input",required:!0},{kind:"task-batch",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"feature-check",timing:"post",min_verdict:"pass"},{name:"batch-create",timing:"post",min_verdict:"pass"}],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-2",fallback:[{tier:"capable-3",trigger:"gate-fail"},{tier:"capable-3",trigger:"auth"},{tier:"capable-3",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"implement",aliases:["dev-run"],description:"dev-run --mode implement: code edits in worktree",artifacts:[{kind:"worktree-diff",direction:"output",required:!0},{kind:"task-section",direction:"output",required:!0,identity:"Solution"}],reasoning_skill:"sp:code-implementation",required_references:[],gates:[],mutation_class:"code",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"timeout"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"test",aliases:["dev-unit","dev-fixall"],description:"dev-unit: generate/extend tests to coverage target",artifacts:[{kind:"test-file",direction:"output",required:!0},{kind:"coverage-report",direction:"output",required:!1}],reasoning_skill:"sp:code-testing",required_references:[],gates:[],mutation_class:"tests",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}],min_tier:"standard"},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"verify",aliases:["dev-verify"],description:"dev-verify: SECUA review + requirements traceability",artifacts:[{kind:"worktree-diff",direction:"input",required:!0},{kind:"verdict-artifact",direction:"output",required:!0,identity:"<wbs>-verdict.json"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[{name:"verdict-artifact",timing:"post",min_verdict:"pass"},{name:"strict-core",timing:"post",min_verdict:"pass"}],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"escalate"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"wrap",aliases:["dev-wrap"],description:"dev-wrap: learnings/doc-sync/feature transition",artifacts:[{kind:"learning-entry",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"task-check",timing:"pre",min_verdict:"pass"}],mutation_class:"learnings",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"hitl",current_agent_allowed:!0,gate_timing:"both"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"review",aliases:["dev-review"],description:"dev-review: multi-dimensional code review (coordinator writes the combined Review)",artifacts:[{kind:"review-findings",direction:"output",required:!0,identity:"Review"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"record",aliases:["dev-record"],description:"record: deterministic Testing write-back from the verdict artifact; bare-Review fallback only",artifacts:[{kind:"verdict-artifact",direction:"input",required:!0,identity:"<wbs>-verdict.json"},{kind:"task-section",direction:"output",required:!0,identity:"Testing"},{kind:"task-section",direction:"output",required:!1,identity:"Review",description:"fallback-only: backfills Review only when the section is bare; never overwrites authored Review"}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"dogfood",aliases:["dev-dogfood"],description:"dev-dogfood: end-to-end driver test",artifacts:[{kind:"dogfood-report",direction:"output",required:!0},{kind:"monitor-ledger",direction:"output",required:!1}],reasoning_skill:"sp:dogfood-testing",required_references:[],gates:[],mutation_class:"driver",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"brainstorm",aliases:["dev-brainstorm"],description:"dev-brainstorm: structured ideation",artifacts:[{kind:"brainstorm-outline",direction:"output",required:!0}],reasoning_skill:"sp:brainstorm",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"changelog",aliases:["dev-changelog"],description:"dev-changelog: generate changelog from git commits",artifacts:[{kind:"changelog-entry",direction:"output",required:!0}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"none",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}}],CANONICAL_STAGE_BY_KEY=new Map;for(let s2 of REGISTERED_CANONICAL_STAGES){CANONICAL_STAGE_BY_KEY.set(s2.id,s2);for(let a2 of s2.aliases??[])CANONICAL_STAGE_BY_KEY.set(a2,s2)}var CACHEABILITY_CLASSES=["stable-prefix-eligible","volatile"],SENSITIVITY_CLASSES=["public","internal","confidential"],envelopeProvenanceSchema=exports_external.object({owner:exports_external.string().min(1),schema_version:exports_external.string().min(1),source_revision:exports_external.string().nullable().optional(),generated_at:exports_external.string().datetime()}).strict(),envelopeSizeBudgetSchema=exports_external.object({max_bytes:exports_external.number().int().positive()}).strict(),envelopeLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),content:exports_external.string(),size_bytes:exports_external.number().int().nonnegative(),content_hash:exports_external.string().length(64),provenance:envelopeProvenanceSchema,cacheability:exports_external.enum(CACHEABILITY_CLASSES),sensitivity:exports_external.enum(SENSITIVITY_CLASSES).default("internal"),size_budget:envelopeSizeBudgetSchema.optional(),disclosure_handle:exports_external.string().optional()}).strict(),STABLE_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence"],VOLATILE_LAYER_NAMES=["run-state","tool-observations"];var envelopeSchema=exports_external.object({schema_version:exports_external.string().default("1.0"),layers:exports_external.array(envelopeLayerSchema).min(1),stage_id:exports_external.string().optional(),run_id:exports_external.string().optional(),assembled_at:exports_external.string().datetime(),total_size_bytes:exports_external.number().int().nonnegative()}).strict(),projectSnapshotSchema=exports_external.object({name:exports_external.string(),version:exports_external.string(),task_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),todo:exports_external.number().int().nonnegative(),wip:exports_external.number().int().nonnegative(),testing:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),feature_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),active:exports_external.number().int().nonnegative(),verifying:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),active_features:exports_external.array(exports_external.string()),content_hash:exports_external.string().length(64).optional()}).strict(),taskSnapshotSchema=exports_external.object({wbs:exports_external.string().regex(/^\d{4}$/),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),feature_id:exports_external.string().optional(),acceptance_criteria:exports_external.string().optional(),locked_qa:exports_external.array(exports_external.string()).optional(),solution:exports_external.string().optional(),content_hash:exports_external.string().length(64).optional()}).strict(),featureSnapshotSchema=exports_external.object({id:exports_external.string(),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),scenarios:exports_external.array(exports_external.string()).optional(),content_hash:exports_external.string().length(64).optional()}).strict();var ALL_LAYER_NAMES=[...STABLE_LAYER_NAMES,...VOLATILE_LAYER_NAMES],LAYER_ORDER={};ALL_LAYER_NAMES.forEach((name,idx)=>{LAYER_ORDER[name]=idx});init_dist2();var TASK_CANONICAL_SECTIONS=["Background","Requirements","Acceptance Criteria","Q&A","Design","Plan","Root Cause","Solution","Testing","Review","References","History"],FEATURE_CANONICAL_SECTIONS=["Goal","Scope","Acceptance Criteria","Tasks","Notes","History"],UNIVERSAL_SECTIONS=["History","References","Notes"],HEADING_LEVELS={task:3,feature:2},START_MARKER="<!-- AUTO-GENERATED by spur feature refresh -->",END_MARKER="<!-- END AUTO-GENERATED -->",MARKER_START_RE=/<!--[ \t]*AUTO-GENERATED.*?-->/,MARKER_END_RE=/<!--[ \t]*END[ \t]*AUTO-GENERATED.*?-->/;function findHeadings(body,hashes){let hits=[],prefix=`${hashes} `,inCodeBlock=!1,lineStart=0;for(let i2=0;i2<=body.length;i2++){if(i2!==body.length&&body[i2]!==`
1448
+ `,CLI_MIGRATIONS=[{id:"0000_spur_cli_foundation",sql:CLI_SCHEMA_SQL},{id:"0001_spur_cli_team_inbox",sql:INBOX_MESSAGES_SCHEMA_SQL},{id:"0002_spur_cli_rule_history",sql:RULE_ENGINE_SCHEMA_SQL},{id:"0003_spur_cli_planning",sql:PLANNING_SCHEMA_SQL},{id:"0004_spur_cli_queue_jobs",sql:QUEUE_JOBS_SCHEMA_SQL},{id:"0005_spur_cli_run_pid",sql:RUN_PID_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"pid"}},{id:"0006_spur_cli_system_events",sql:SYSTEM_EVENTS_SCHEMA_SQL},{id:"0007_spur_cli_runs_external_key",sql:RUNS_EXTERNAL_KEY_COLUMN_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"external_key"}},{id:"0008_spur_cli_system_events_correlation",sql:SYSTEM_EVENTS_CORRELATION_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"system_events",column:"sequence"}},{id:"0009_spur_cli_history_message_run_idx",sql:HISTORY_MESSAGE_RUN_INDEX_SCHEMA_SQL},{id:"0010_spur_cli_coordination_runs",sql:COORDINATION_RUNS_SCHEMA_SQL},{id:"0011_spur_cli_system_events_sequence_idx",sql:SYSTEM_EVENTS_SEQUENCE_INDEX_SCHEMA_SQL},{id:"0012_spur_cli_history_tool_call_args_raw",sql:HISTORY_TOOL_CALL_ARGS_RAW_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"args_raw"}},{id:"0013_spur_cli_history_run_session",sql:HISTORY_RUN_SESSION_SCHEMA_SQL},{id:"0014_spur_cli_system_events_name_occurred_idx",sql:SYSTEM_EVENTS_NAME_OCCURRED_INDEX_SCHEMA_SQL},{id:"0015_spur_cli_history_tool_call_call_id",sql:HISTORY_TOOL_CALL_CALL_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_tool_call",column:"call_id"}},{id:"0016_spur_cli_history_message_ts_nullable",sql:HISTORY_MESSAGE_TS_NULLABLE_SCHEMA_SQL},{id:"0017_spur_cli_runs_status_completed_to_done",sql:"UPDATE runs SET status = 'done' WHERE status = 'completed'"},{id:"0018_spur_cli_history_message_request_id",sql:HISTORY_MESSAGE_REQUEST_ID_SCHEMA_SQL,addColumnIfMissing:{table:"history_message",column:"request_id"}},{id:"0019_spur_cli_history_etl_tables_drop",sql:HISTORY_ETL_TABLES_DROP_SCHEMA_SQL},{id:"0020_spur_cli_history_board_query_indexes",sql:HISTORY_BOARD_QUERY_INDEXES_SCHEMA_SQL},{id:"0021_spur_cli_history_board_rollups",sql:HISTORY_BOARD_ROLLUPS_SCHEMA_SQL},{id:"0022_spur_cli_history_performance_indexes",sql:HISTORY_PERFORMANCE_INDEXES_SCHEMA_SQL},{id:"0023_spur_cli_history_message_request_id_idx",sql:HISTORY_MESSAGE_REQUEST_ID_INDEX_SCHEMA_SQL},{id:"0024_spur_cli_history_checkpoint_identity",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_size INTEGER",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_size"}},{id:"0025_spur_cli_history_checkpoint_identity_mtime",sql:"ALTER TABLE history_import_checkpoint ADD COLUMN source_mtime_ms REAL",addColumnIfMissing:{table:"history_import_checkpoint",column:"source_mtime_ms"}},{id:"0026_spur_cli_history_message_duration_source",sql:"ALTER TABLE history_message ADD COLUMN duration_source TEXT",addColumnIfMissing:{table:"history_message",column:"duration_source"}},{id:"0027_spur_cli_history_refresh_active_unique",sql:HISTORY_REFRESH_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0028_spur_cli_history_task_session",sql:HISTORY_TASK_SESSION_SCHEMA_SQL},{id:"0029_spur_cli_history_tool_call_indexes",sql:HISTORY_TOOL_CALL_INDEXES_SCHEMA_SQL},{id:"0030_spur_cli_history_board_covering_indexes",sql:HISTORY_BOARD_COVERING_INDEXES_SCHEMA_SQL},{id:"0031_spur_cli_history_board_tool_stats_columns",sql:HISTORY_BOARD_TOOL_STATS_COLUMNS_SCHEMA_SQL},{id:"0032_spur_cli_history_board_skill_5m",sql:HISTORY_BOARD_SKILL_5M_SCHEMA_SQL},{id:"0033_spur_cli_importer_schema_version",sql:`INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES ('${IMPORTER_SCHEMA_LEDGER_PREFIX}${HISTORY_IMPORT_SCHEMA_VERSION}', strftime('%s', 'now') * 1000);`},{id:"0034_spur_cli_history_tool_identity",sql:HISTORY_TOOL_IDENTITY_SCHEMA_SQL},{id:"0035_spur_cli_history_measure_vector",sql:HISTORY_MEASURE_VECTOR_SCHEMA_SQL},{id:"0036_spur_cli_history_rollup_watermark",sql:HISTORY_ROLLUP_WATERMARK_SCHEMA_SQL},{id:"0037_spur_cli_history_dimension_marts",sql:HISTORY_DIMENSION_MARTS_SCHEMA_SQL},{id:"0038_spur_cli_retention_compaction_meta",sql:RETENTION_COMPACTION_META_SCHEMA_SQL},{id:"0039_spur_cli_bounded_rollup_derivations",sql:BOUNDED_ROLLUP_DERIVATIONS_SCHEMA_SQL,addColumnIfMissing:{table:"history_board_source_daily",column:"raw_messages"}},{id:"0040_spur_cli_agent_executor_updates",sql:AGENT_EXECUTOR_UPDATES_SCHEMA_SQL},{id:"0041_spur_cli_queue_jobs_deadline_lease_columns",sql:QUEUE_JOBS_DEADLINE_LEASE_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"queue_jobs",column:"timeout_ms"}},{id:"0042_spur_cli_history_model_fallback_index",sql:HISTORY_MESSAGE_MODEL_FALLBACK_INDEX_SCHEMA_SQL},{id:"0043_spur_cli_inbox_messages_request_key",sql:INBOX_MESSAGES_REQUEST_KEY_SCHEMA_SQL,addColumnIfMissing:{table:"inbox_messages",column:"request_key"}},{id:"0044_spur_cli_coordination_runs_receipt_columns",sql:COORDINATION_RUNS_RECEIPT_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"coordination_runs",column:"message_ids_json"}},{id:"0045_spur_cli_project_claims",sql:PROJECT_CLAIMS_SCHEMA_SQL},{id:"0046_spur_cli_project_strategy",sql:PROJECT_STRATEGY_SCHEMA_SQL},{id:"0047_spur_cli_scheduler_custom_active_unique",sql:SCHEDULER_CUSTOM_ACTIVE_UNIQUE_SCHEMA_SQL},{id:"0048_spur_cli_agent_executor_updates_owner_columns",sql:AGENT_EXECUTOR_UPDATES_OWNER_COLUMNS_SCHEMA_SQL,addColumnIfMissing:{table:"agent_executor_updates",column:"owner"}},{id:"0049_spur_cli_runs_terminal_reason",sql:CLI_RUNS_TERMINAL_REASON_SCHEMA_SQL,addColumnIfMissing:{table:"runs",column:"terminal_reason"}}];async function allMigrationsJournaled(adapter,migrations){if(migrations.length===0)return!0;if(!await tableExists(adapter,"__spur_cli_migrations"))return!1;let placeholders=migrations.map(()=>"?").join(", ");if(((await adapter.queryFirst(`SELECT COUNT(*) AS n FROM "__spur_cli_migrations" WHERE id IN (${placeholders})`,...migrations.map((m)=>m.id)))?.n??0)!==migrations.length)return!1;if(migrations.some((m)=>m.id==="0033_spur_cli_importer_schema_version")){if(!await adapter.queryFirst('SELECT id FROM "__spur_cli_migrations" WHERE id = ?',IMPORTER_SCHEMA_LEDGER_PREFIX+HISTORY_IMPORT_SCHEMA_VERSION))return!1}return!0}async function applyCliMigrations(adapter,migrations=CLI_MIGRATIONS){if(await allMigrationsJournaled(adapter,migrations))return 0;await adapter.exec('CREATE TABLE IF NOT EXISTS "__spur_cli_migrations" (id TEXT PRIMARY KEY, applied_at INTEGER NOT NULL)');let applied=0;for(let migration of migrations){if(await adapter.queryFirst('SELECT id FROM "__spur_cli_migrations" WHERE id = ?',migration.id)!=null)continue;if(migration.id==="0009_spur_cli_history_message_run_idx"&&!await tableExists(adapter,"history_message")){for(let statement of splitSqlStatements(HISTORY_IMPORT_SCHEMA_SQL))await adapter.exec(statement);let versionLedgerId=IMPORTER_SCHEMA_LEDGER_PREFIX+HISTORY_IMPORT_SCHEMA_VERSION;await adapter.run('INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',[versionLedgerId,Date.now()])}if((migration.id==="0024_spur_cli_history_checkpoint_identity"||migration.id==="0025_spur_cli_history_checkpoint_identity_mtime")&&!await tableExists(adapter,"history_import_checkpoint")){await adapter.run('INSERT INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',[migration.id,Date.now()]);continue}if(migration.id==="0034_spur_cli_history_tool_identity"&&await tableExists(adapter,"history_tool_call")){if(!await columnExists(adapter,"history_tool_call","effective_tool_name"))await adapter.exec("ALTER TABLE history_tool_call ADD COLUMN effective_tool_name TEXT NOT NULL DEFAULT 'unknown'");if(!await columnExists(adapter,"history_tool_call","tool_name_alias"))await adapter.exec("ALTER TABLE history_tool_call ADD COLUMN tool_name_alias TEXT NOT NULL DEFAULT 'unknown'")}let addColumnGuard=migration.addColumnIfMissing,shouldApplySql=addColumnGuard===void 0||!await columnExists(adapter,addColumnGuard.table,addColumnGuard.column),tsNullableSkip=migration.id==="0016_spur_cli_history_message_ts_nullable"&&(!await tableExists(adapter,"history_message")||!await columnNotNull(adapter,"history_message","ts")),sequenceIndexSkip=migration.id==="0011_spur_cli_system_events_sequence_idx"&&!await tableExists(adapter,"system_events"),argsRawSkip=migration.id==="0012_spur_cli_history_tool_call_args_raw"&&!await tableExists(adapter,"history_tool_call"),callIdSkip=migration.id==="0015_spur_cli_history_tool_call_call_id"&&!await tableExists(adapter,"history_tool_call"),nameOccurredIndexSkip=migration.id==="0014_spur_cli_system_events_name_occurred_idx"&&!await tableExists(adapter,"system_events"),historyBoardQueryIndexesSkip=migration.id==="0020_spur_cli_history_board_query_indexes"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","seq")||!await columnExists(adapter,"history_message","duration_ms")||!await columnExists(adapter,"history_message","role")||!await columnExists(adapter,"history_message","input_tokens")||!await columnExists(adapter,"history_message","cache_read_tokens")),historyPerformanceIndexesSkip=migration.id==="0022_spur_cli_history_performance_indexes"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","ts")||!await columnExists(adapter,"history_message","model")||!await tableExists(adapter,"history_tool_call")),historyToolCallIndexesSkip=migration.id==="0029_spur_cli_history_tool_call_indexes"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","ts")||!await tableExists(adapter,"history_tool_call")),historyBoardCoveringIndexesSkip=migration.id==="0030_spur_cli_history_board_covering_indexes"&&(!await tableExists(adapter,"history_daily_stats")||!await tableExists(adapter,"history_board_tool_5m")||!await tableExists(adapter,"history_board_message_5m")||!await tableExists(adapter,"history_board_session_stats")||!await tableExists(adapter,"history_board_source_daily")||!await tableExists(adapter,"history_tool_call")||!await tableExists(adapter,"history_task_session")),runsStatusDoneSkip=migration.id==="0017_spur_cli_runs_status_completed_to_done"&&(!await tableExists(adapter,"runs")||!await columnExists(adapter,"runs","status")),historyBoardToolStatsColumnsSkip=migration.id==="0031_spur_cli_history_board_tool_stats_columns"&&(!await tableExists(adapter,"history_board_tool_stats")||await columnExists(adapter,"history_board_tool_stats","fresh_input_tokens")),queueJobsActiveIndexSkip=migration.id==="0027_spur_cli_history_refresh_active_unique"&&!await tableExists(adapter,"queue_jobs"),schedulerCustomActiveIndexSkip=migration.id==="0047_spur_cli_scheduler_custom_active_unique"&&!await tableExists(adapter,"queue_jobs"),queueJobsDeadlineLeaseSkip=migration.id==="0041_spur_cli_queue_jobs_deadline_lease_columns"&&!await tableExists(adapter,"queue_jobs"),runsTerminalReasonSkip=migration.id==="0049_spur_cli_runs_terminal_reason"&&!await tableExists(adapter,"runs"),inboxRequestKeySkip=migration.id==="0043_spur_cli_inbox_messages_request_key"&&!await tableExists(adapter,"inbox_messages"),coordinationReceiptColumnsSkip=migration.id==="0044_spur_cli_coordination_runs_receipt_columns"&&!await tableExists(adapter,"coordination_runs"),historyToolIdentitySkip=migration.id==="0034_spur_cli_history_tool_identity"&&!await tableExists(adapter,"history_tool_call"),historyMeasureVectorSkip=migration.id==="0035_spur_cli_history_measure_vector"&&(!await tableExists(adapter,"history_board_message_5m")||await columnExists(adapter,"history_board_message_5m","cache_write_tokens")),historyRollupWatermarkSkip=migration.id==="0036_spur_cli_history_rollup_watermark"&&(await tableExists(adapter,"history_board_rollup_watermark")||!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","imported_at")),boundedRollupDerivationsSkip=migration.id==="0039_spur_cli_bounded_rollup_derivations"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","source_file")||!await tableExists(adapter,"history_board_source_daily")),historyModelFallbackIndexSkip=migration.id==="0042_spur_cli_history_model_fallback_index"&&(!await tableExists(adapter,"history_message")||!await columnExists(adapter,"history_message","model"));if(shouldApplySql&&!sequenceIndexSkip&&!argsRawSkip&&!runsStatusDoneSkip&&!nameOccurredIndexSkip&&!historyBoardQueryIndexesSkip&&!historyPerformanceIndexesSkip&&!historyToolCallIndexesSkip&&!historyBoardCoveringIndexesSkip&&!historyBoardToolStatsColumnsSkip&&!callIdSkip&&!tsNullableSkip&&!queueJobsActiveIndexSkip&&!schedulerCustomActiveIndexSkip&&!queueJobsDeadlineLeaseSkip&&!runsTerminalReasonSkip&&!inboxRequestKeySkip&&!coordinationReceiptColumnsSkip&&!historyToolIdentitySkip&&!historyMeasureVectorSkip&&!historyRollupWatermarkSkip&&!boundedRollupDerivationsSkip&&!historyModelFallbackIndexSkip)for(let statement of splitSqlStatements(migration.sql))await adapter.exec(statement);if(historyToolIdentitySkip&&!await tableExists(adapter,"history_tool_alias_map"))await adapter.exec("CREATE TABLE IF NOT EXISTS history_tool_alias_map (source TEXT NOT NULL, effective_tool_name TEXT NOT NULL, alias TEXT NOT NULL, PRIMARY KEY (source, effective_tool_name));");await adapter.run('INSERT INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',migration.id,Date.now()),applied+=1}if(migrations.some((m)=>m.id==="0033_spur_cli_importer_schema_version")){let currentVersionLedgerId=IMPORTER_SCHEMA_LEDGER_PREFIX+HISTORY_IMPORT_SCHEMA_VERSION;if(!await adapter.queryFirst('SELECT id FROM "__spur_cli_migrations" WHERE id = ?',currentVersionLedgerId)){for(let statement of splitSqlStatements(HISTORY_IMPORT_SCHEMA_SQL))if(statement.startsWith("CREATE TABLE"))await adapter.exec(statement);await adapter.run('INSERT OR REPLACE INTO "__spur_cli_migrations" (id, applied_at) VALUES (?, ?)',[currentVersionLedgerId,Date.now()]),applied+=1}}return applied}async function columnExists(adapter,table3,column2){return(await adapter.queryAll(`PRAGMA table_info("${table3}")`)).some((row)=>row.name===column2)}async function columnNotNull(adapter,table3,column2){return(await adapter.queryAll(`PRAGMA table_info("${table3}")`)).some((row)=>row.name===column2&&row.notnull===1)}async function tableExists(adapter,table3){return await adapter.queryFirst("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?",table3)!=null}function splitSqlStatements(sql4){return sql4.split(";").map((statement)=>statement.trim()).filter(Boolean)}var SQLITE_BUSY_TIMEOUT_MS=30000;async function createMigratedDb(options){let{createDbAdapter:createDbAdapter3}=await Promise.resolve().then(() => (init_dist4(),exports_dist)),adapter=await createDbAdapter3({driver:"bun-sqlite",url:options.url});return await adapter.exec(`PRAGMA busy_timeout = ${SQLITE_BUSY_TIMEOUT_MS}`),await applyCliMigrations(adapter),adapter}init_zod();init_zod();var STAGE_REGISTRY_SCHEMA_VERSION={major:1,minor:3},stageSchemaVersionSchema=exports_external.object({major:exports_external.number().int().nonnegative(),minor:exports_external.number().int().nonnegative()}).strict();var MUTATION_CLASSES=["none","corpus","code","tests","verdict","learnings","driver","irreversible"];var inlineExecutionSchema=exports_external.object({kind:exports_external.literal("inline"),current_agent_allowed:exports_external.literal(!0),may_reuse_captured_layers:exports_external.boolean().optional()}).strict(),subprocessExecutionSchema=exports_external.object({kind:exports_external.literal("subprocess"),current_agent_allowed:exports_external.literal(!1),via:exports_external.literal("spur-agent-run")}).strict(),deterministicExecutionSchema=exports_external.object({kind:exports_external.literal("deterministic"),current_agent_allowed:exports_external.literal(!1),executor:exports_external.enum(["cli","script"])}).strict(),hitlExecutionSchema=exports_external.object({kind:exports_external.literal("hitl"),current_agent_allowed:exports_external.literal(!0),gate_timing:exports_external.enum(["pre","post","both"])}).strict(),irreversibleExecutionSchema=exports_external.object({kind:exports_external.literal("irreversible"),requires_operator_intent:exports_external.literal(!0),current_agent_allowed:exports_external.boolean(),rollback_disclaimer:exports_external.string().min(1)}).strict(),executionKindSchema=exports_external.discriminatedUnion("kind",[inlineExecutionSchema,subprocessExecutionSchema,deterministicExecutionSchema,hitlExecutionSchema,irreversibleExecutionSchema]),ARTIFACT_DIRECTIONS=["input","output"],stageArtifactSchema=exports_external.object({kind:exports_external.string().min(1),direction:exports_external.enum(ARTIFACT_DIRECTIONS),identity:exports_external.string().optional(),description:exports_external.string().optional(),required:exports_external.boolean().optional().default(!0)}).strict(),stageGateSchema=exports_external.object({name:exports_external.string().min(1),timing:exports_external.enum(["pre","post","transition"]),min_verdict:exports_external.enum(["pass","partial","fail"]).optional(),description:exports_external.string().optional()}).strict(),stageRetryPolicySchema=exports_external.object({max_attempts:exports_external.number().int().min(1),terminal_stop:exports_external.enum(["block","escalate","fail"]),timeout_seconds:exports_external.number().int().positive().optional()}).strict(),CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"],LEGACY_CAPABLE_ALIAS="capable";function normalizeCapabilityTier(value){return value===LEGACY_CAPABLE_ALIAS?"capable-1":value}var capabilityTierSchema=exports_external.preprocess(normalizeCapabilityTier,exports_external.enum(CAPABILITY_TIERS)),objectiveEscalationTriggerSchema=exports_external.enum(["gate-fail","timeout","insufficient-evidence","retry-exhausted","resource-exhaustion","auth"]),stageModelPolicySchema=exports_external.object({min_tier:capabilityTierSchema,fallback:exports_external.array(exports_external.object({tier:capabilityTierSchema,trigger:objectiveEscalationTriggerSchema}).strict()),override_key:exports_external.string().optional()}).strict();var CONTEXT_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence","run-state","tool-observations"],stageContextLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),required:exports_external.literal(!0)}).strict(),stageEventSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().optional()}).strict(),STAGE_ID_PATTERN=/^[a-z][a-z0-9-]*$/,stageRecordSchema=exports_external.object({schema_version:stageSchemaVersionSchema,id:exports_external.string().regex(STAGE_ID_PATTERN,{message:"stage id must be lowercase kebab-case"}),aliases:exports_external.array(exports_external.string().min(1)).optional().default([]),description:exports_external.string().min(1),artifacts:exports_external.array(stageArtifactSchema).min(1),reasoning_skill:exports_external.string().min(1),required_references:exports_external.array(exports_external.string().min(1)).optional().default([]),gates:exports_external.array(stageGateSchema).optional().default([]),mutation_class:exports_external.enum(MUTATION_CLASSES),retry:stageRetryPolicySchema,model_policy:stageModelPolicySchema,context_layers:exports_external.array(stageContextLayerSchema).optional().default([]),observability:exports_external.array(stageEventSchema).optional().default([]),execution:executionKindSchema}).strict();var REGISTERED_CANONICAL_STAGES=[{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"refine",aliases:["dev-refine"],description:"dev-refine: Q&A refinement, section filling, AC tightening",artifacts:[{kind:"task-section",direction:"input",required:!0,description:"Background/Requirements sections"},{kind:"task-section",direction:"output",required:!0,description:"Q&A/Design/Plan/AC sections"}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-2",trigger:"gate-fail"},{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"plan",aliases:["dev-plan"],description:"dev-plan: feature intake -> AC generation -> decomposition",artifacts:[{kind:"feature-frontmatter",direction:"input",required:!0},{kind:"task-batch",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"feature-check",timing:"post",min_verdict:"pass"},{name:"batch-create",timing:"post",min_verdict:"pass"}],mutation_class:"corpus",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-2",fallback:[{tier:"capable-3",trigger:"gate-fail"},{tier:"capable-3",trigger:"auth"},{tier:"capable-3",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"implement",aliases:["dev-run"],description:"dev-run --mode implement: code edits in worktree",artifacts:[{kind:"worktree-diff",direction:"output",required:!0},{kind:"task-section",direction:"output",required:!0,identity:"Solution"}],reasoning_skill:"sp:code-implementation",required_references:[],gates:[],mutation_class:"code",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"timeout"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"test",aliases:["dev-unit","dev-fixall"],description:"dev-unit: generate/extend tests to coverage target",artifacts:[{kind:"test-file",direction:"output",required:!0},{kind:"coverage-report",direction:"output",required:!1}],reasoning_skill:"sp:code-testing",required_references:[],gates:[],mutation_class:"tests",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}],min_tier:"standard"},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"verify",aliases:["dev-verify"],description:"dev-verify: SECUA review + requirements traceability",artifacts:[{kind:"worktree-diff",direction:"input",required:!0},{kind:"verdict-artifact",direction:"output",required:!0,identity:"<wbs>-verdict.json"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[{name:"verdict-artifact",timing:"post",min_verdict:"pass"},{name:"strict-core",timing:"post",min_verdict:"pass"}],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"escalate"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"wrap",aliases:["dev-wrap"],description:"dev-wrap: learnings/doc-sync/feature transition",artifacts:[{kind:"learning-entry",direction:"output",required:!0}],reasoning_skill:"sp:spur-dev",required_references:[],gates:[{name:"task-check",timing:"pre",min_verdict:"pass"}],mutation_class:"learnings",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"hitl",current_agent_allowed:!0,gate_timing:"both"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"review",aliases:["dev-review"],description:"dev-review: multi-dimensional code review (coordinator writes the combined Review)",artifacts:[{kind:"review-findings",direction:"output",required:!0,identity:"Review"}],reasoning_skill:"sp:code-verification",required_references:[],gates:[],mutation_class:"verdict",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[{tier:"capable-1",trigger:"gate-fail"},{tier:"capable-1",trigger:"auth"},{tier:"capable-1",trigger:"resource-exhaustion"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"record",aliases:["dev-record"],description:"record: deterministic Testing write-back from the verdict artifact; bare-Review fallback only",artifacts:[{kind:"verdict-artifact",direction:"input",required:!0,identity:"<wbs>-verdict.json"},{kind:"task-section",direction:"output",required:!0,identity:"Testing"},{kind:"task-section",direction:"output",required:!1,identity:"Review",description:"fallback-only: backfills Review only when the section is bare; never overwrites authored Review"}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"dogfood",aliases:["dev-dogfood"],description:"dev-dogfood: end-to-end driver test",artifacts:[{kind:"dogfood-report",direction:"output",required:!0},{kind:"monitor-ledger",direction:"output",required:!1}],reasoning_skill:"sp:dogfood-testing",required_references:[],gates:[],mutation_class:"driver",retry:{max_attempts:3,terminal_stop:"block"},model_policy:{min_tier:"capable-1",fallback:[{tier:"capable-2",trigger:"auth"},{tier:"capable-2",trigger:"resource-exhaustion"},{tier:"capable-2",trigger:"gate-fail"}]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"brainstorm",aliases:["dev-brainstorm"],description:"dev-brainstorm: structured ideation",artifacts:[{kind:"brainstorm-outline",direction:"output",required:!0}],reasoning_skill:"sp:brainstorm",required_references:[],gates:[],mutation_class:"corpus",retry:{max_attempts:2,terminal_stop:"block"},model_policy:{min_tier:"standard",fallback:[]},context_layers:[],observability:[],execution:{kind:"inline",current_agent_allowed:!0}},{schema_version:STAGE_REGISTRY_SCHEMA_VERSION,id:"changelog",aliases:["dev-changelog"],description:"dev-changelog: generate changelog from git commits",artifacts:[{kind:"changelog-entry",direction:"output",required:!0}],reasoning_skill:"inline",required_references:[],gates:[],mutation_class:"none",retry:{max_attempts:1,terminal_stop:"block"},model_policy:{min_tier:"cheap",fallback:[]},context_layers:[],observability:[],execution:{kind:"deterministic",current_agent_allowed:!1,executor:"cli"}}],CANONICAL_STAGE_BY_KEY=new Map;for(let s2 of REGISTERED_CANONICAL_STAGES){CANONICAL_STAGE_BY_KEY.set(s2.id,s2);for(let a2 of s2.aliases??[])CANONICAL_STAGE_BY_KEY.set(a2,s2)}var CACHEABILITY_CLASSES=["stable-prefix-eligible","volatile"],SENSITIVITY_CLASSES=["public","internal","confidential"],envelopeProvenanceSchema=exports_external.object({owner:exports_external.string().min(1),schema_version:exports_external.string().min(1),source_revision:exports_external.string().nullable().optional(),generated_at:exports_external.string().datetime()}).strict(),envelopeSizeBudgetSchema=exports_external.object({max_bytes:exports_external.number().int().positive()}).strict(),envelopeLayerSchema=exports_external.object({layer:exports_external.enum(CONTEXT_LAYER_NAMES),content:exports_external.string(),size_bytes:exports_external.number().int().nonnegative(),content_hash:exports_external.string().length(64),provenance:envelopeProvenanceSchema,cacheability:exports_external.enum(CACHEABILITY_CLASSES),sensitivity:exports_external.enum(SENSITIVITY_CLASSES).default("internal"),size_budget:envelopeSizeBudgetSchema.optional(),disclosure_handle:exports_external.string().optional()}).strict(),STABLE_LAYER_NAMES=["harness-policy","project-authority","stage-contract","task-state","indexed-evidence"],VOLATILE_LAYER_NAMES=["run-state","tool-observations"];var envelopeSchema=exports_external.object({schema_version:exports_external.string().default("1.0"),layers:exports_external.array(envelopeLayerSchema).min(1),stage_id:exports_external.string().optional(),run_id:exports_external.string().optional(),assembled_at:exports_external.string().datetime(),total_size_bytes:exports_external.number().int().nonnegative()}).strict(),projectSnapshotSchema=exports_external.object({name:exports_external.string(),version:exports_external.string(),task_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),todo:exports_external.number().int().nonnegative(),wip:exports_external.number().int().nonnegative(),testing:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),feature_counts:exports_external.object({backlog:exports_external.number().int().nonnegative(),active:exports_external.number().int().nonnegative(),verifying:exports_external.number().int().nonnegative(),done:exports_external.number().int().nonnegative(),blocked:exports_external.number().int().nonnegative(),cancelled:exports_external.number().int().nonnegative()}).strict(),active_features:exports_external.array(exports_external.string()),content_hash:exports_external.string().length(64).optional()}).strict(),taskSnapshotSchema=exports_external.object({wbs:exports_external.string().regex(/^\d{4}$/),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),feature_id:exports_external.string().optional(),acceptance_criteria:exports_external.string().optional(),locked_qa:exports_external.array(exports_external.string()).optional(),solution:exports_external.string().optional(),content_hash:exports_external.string().length(64).optional()}).strict(),featureSnapshotSchema=exports_external.object({id:exports_external.string(),name:exports_external.string(),status:exports_external.string(),priority:exports_external.string().optional(),scenarios:exports_external.array(exports_external.string()).optional(),content_hash:exports_external.string().length(64).optional()}).strict();var ALL_LAYER_NAMES=[...STABLE_LAYER_NAMES,...VOLATILE_LAYER_NAMES],LAYER_ORDER={};ALL_LAYER_NAMES.forEach((name,idx)=>{LAYER_ORDER[name]=idx});init_dist2();var TASK_CANONICAL_SECTIONS=["Background","Requirements","Acceptance Criteria","Q&A","Design","Plan","Root Cause","Solution","Testing","Review","References","History"],FEATURE_CANONICAL_SECTIONS=["Goal","Scope","Acceptance Criteria","Tasks","Notes","History"],UNIVERSAL_SECTIONS=["History","References","Notes"],HEADING_LEVELS={task:3,feature:2},START_MARKER="<!-- AUTO-GENERATED by spur feature refresh -->",END_MARKER="<!-- END AUTO-GENERATED -->",MARKER_START_RE=/<!--[ \t]*AUTO-GENERATED.*?-->/,MARKER_END_RE=/<!--[ \t]*END[ \t]*AUTO-GENERATED.*?-->/;function findHeadings(body,hashes){let hits=[],prefix=`${hashes} `,inCodeBlock=!1,lineStart=0;for(let i2=0;i2<=body.length;i2++){if(i2!==body.length&&body[i2]!==`
1425
1449
  `)continue;let line=body.slice(lineStart,i2);if(line.startsWith("```"))inCodeBlock=!inCodeBlock;else if(!inCodeBlock&&line.startsWith(prefix)){let name=line.slice(prefix.length).trim();hits.push({index:lineStart,headingLine:line,name})}lineStart=i2+1}return hits}function normalizeYamlScalars(data){let out={};for(let[key,value]of Object.entries(data))if(value instanceof Date)out[key]=value.toISOString();else if(value!==null&&typeof value==="object"&&!Array.isArray(value))out[key]=normalizeYamlScalars(value);else out[key]=value;return out}class MarkdownDocument{_domain;_frontmatterBlock;_frontmatter;_preamble;_sections;_demotedHeadings=[];_duplicateSectionNames=[];constructor(domain2,frontmatterBlock,frontmatter,preamble,sections){this._domain=domain2,this._frontmatterBlock=frontmatterBlock,this._frontmatter=frontmatter,this._preamble=preamble,this._sections=sections}static parse(content,domain2){let level=HEADING_LEVELS[domain2],hashes="#".repeat(level),frontmatterBlock="",frontmatter=null,body=content,fmMatch=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(content);if(fmMatch&&fmMatch.index===0){let raw=fmMatch[1]??"",data={};try{let parsed=$parse(raw);if(parsed!==null&&typeof parsed==="object"&&!Array.isArray(parsed))data=normalizeYamlScalars(parsed)}catch{}frontmatter={raw,data},frontmatterBlock=fmMatch[0],body=content.slice(fmMatch[0].length)}let hits=findHeadings(body,hashes),first=hits[0],preamble=first!==void 0?body.slice(0,first.index):body,allSections=hits.map((hit,idx)=>{let next=hits[idx+1],end=next!==void 0?next.index:body.length;return{name:hit.name,headingLine:hit.headingLine,originalText:body.slice(hit.index,end),modifiedText:null}}),seen=new Set,sections=[],duplicateNames=[];for(let s2 of allSections)if(seen.has(s2.name))duplicateNames.push(s2.name);else seen.add(s2.name),sections.push(s2);let doc2=new MarkdownDocument(domain2,frontmatterBlock,frontmatter,preamble,sections);return doc2._duplicateSectionNames.push(...duplicateNames),doc2}get domain(){return this._domain}replacePreamble(newBody){this._preamble=newBody}get frontmatter(){return this._frontmatter}get frontmatterRaw(){return this._frontmatter?.raw??null}get frontmatterData(){return this._frontmatter?.data??null}get bodyWithoutFrontmatter(){let result=this._preamble;for(let section of this._sections)result+=section.modifiedText??section.originalText;return result}get sectionNames(){return this._sections.map((s2)=>s2.name)}get demotedHeadings(){return this._demotedHeadings}get duplicateSectionNames(){return this._duplicateSectionNames}get canonicalSections(){let base2=this._domain==="task"?TASK_CANONICAL_SECTIONS:FEATURE_CANONICAL_SECTIONS,extra=UNIVERSAL_SECTIONS.filter((s2)=>!base2.includes(s2));return[...base2,...extra]}validateSectionName(name){if(!this.canonicalSections.includes(name))throw Error(`Unknown section "${name}" for domain "${this._domain}". Canonical sections: ${this.canonicalSections.join(", ")}.`)}findSection(name){return this._sections.find((s2)=>s2.name===name)}hasSection(name){return this.findSection(name)!==void 0}getSection(name){this.validateSectionName(name);let section=this.findSection(name);if(section===void 0)return null;let text3=section.modifiedText??section.originalText,newlineIdx=text3.indexOf(`
1426
1450
  `);return newlineIdx===-1?"":text3.slice(newlineIdx+1)}replaceSection(name,body){this.validateSectionName(name);let cleaned=this.stripSameLevelHeadings(body),section=this.findSection(name);if(section!==void 0){let trimmed=cleaned.trim();section.modifiedText=trimmed.length>0?`${section.headingLine}
1427
1451
 
@@ -1455,6 +1479,11 @@ ${fieldLine}
1455
1479
  `);this._frontmatter={raw,data:{...this._frontmatter.data,[key]:values}};let rawStart=this._frontmatterBlock.indexOf(oldRaw);this._frontmatterBlock=rawStart===-1?`---
1456
1480
  ${raw}
1457
1481
  ---
1458
- `:this._frontmatterBlock.slice(0,rawStart)+raw+this._frontmatterBlock.slice(rawStart+oldRaw.length)}serialize(){let result=this._frontmatterBlock;result+=this._preamble;for(let section of this._sections)result+=section.modifiedText??section.originalText;return result}}function escapeYamlArrayElement(value){return`"${value.replace(/\\/g,"\\\\").replace(/"/g,"\\\"")}"`}function escapeYamlValue(value){if(value.startsWith('"')&&value.endsWith('"'))return value;if(/[:{}[\],&*?|>!%@`#"'\\\n\r]/.test(value))return`"${value.replace(/\\/g,"\\\\").replace(/"/g,"\\\"")}"`;if(/^(null|true|false|yes|no|on|off)$/i.test(value))return`"${value}"`;if(/^\d/.test(value)&&!/^\d{4}-\d{2}-\d{2}/.test(value))return`"${value}"`;return value}init_zod();var TASK_STATUSES=["backlog","todo","wip","testing","blocked","done","cancelled"],FEATURE_STATUSES=["backlog","active","verifying","blocked","done","cancelled"];var PRIORITIES=["P0","P1","P2","P3"],PROFILES=["simple","standard","complex","research","refine","plan","unit","review","docs"],TASK_TYPES=["task","issue","review","meta","brainstorm"],TASK_VARIANTS=["standard","feature-impl","issue","review","meta","brainstorm"];var FEATURE_ID_PATTERN=/^[A-Z][1-9]*$/;var TASK_STATUS_ALIASES={completed:"done",complete:"done","in-progress":"wip","in progress":"wip",in_progress:"wip",dropped:"cancelled",cancel:"cancelled",canceled:"cancelled",new:"backlog",pending:"backlog",blocked:"blocked",wip:"wip",testing:"testing",done:"done",cancelled:"cancelled",backlog:"backlog",todo:"todo"};function normalizeTaskStatus(raw){let key=raw.trim().toLowerCase(),resolved=TASK_STATUS_ALIASES[key];if(resolved===void 0)throw Error(`Unknown task status: ${JSON.stringify(raw)} (allowed: ${TASK_STATUSES.join(", ")})`);return resolved}var isoDateString=exports_external.string().min(1).refine((value)=>!Number.isNaN(Date.parse(value)),{message:"must be an ISO 8601 timestamp"}),featureId=exports_external.string().regex(FEATURE_ID_PATTERN,{message:"feature id must match ^[A-Z][1-9]*$ (DD-14)"}).nullable().optional(),wbsString=exports_external.string().regex(/^\d{4}$/,{message:"parent_wbs must be a 4-digit WBS string"}).nullable().optional(),taskFrontmatterSchema=exports_external.object({schema_version:exports_external.literal(1),name:exports_external.string().min(1),description:exports_external.string().optional(),status:exports_external.preprocess((val)=>{if(typeof val==="string")try{return normalizeTaskStatus(val)}catch{}return val},exports_external.enum(TASK_STATUSES)),type:exports_external.enum(TASK_TYPES).optional().default("task"),template:exports_external.enum(TASK_VARIANTS).optional(),profile:exports_external.enum(PROFILES).optional(),feature_id:featureId,parent_wbs:wbsString,priority:exports_external.enum(PRIORITIES).optional(),tags:exports_external.array(exports_external.string()).optional(),dependencies:exports_external.array(exports_external.string()).optional(),ac_numbering:exports_external.literal("task-local").optional(),ac_altitude:exports_external.enum(["graduating","task-local"]).optional(),done_forced:exports_external.preprocess((v)=>typeof v==="string"?v==="true":v,exports_external.boolean().optional()),done_reason:exports_external.string().optional(),feature_link_declined:exports_external.preprocess((v)=>typeof v==="string"?v==="true":v,exports_external.boolean().optional()),estimate_hours:exports_external.preprocess((v)=>typeof v==="string"&&v.trim()!==""?Number(v):v,exports_external.number().positive().optional()),created_at:isoDateString,updated_at:isoDateString}),featureFrontmatterSchema=exports_external.object({schema_version:exports_external.literal(1),id:exports_external.string().regex(FEATURE_ID_PATTERN,{message:"feature id must match ^[A-Z][1-9]*$ (DD-14)"}),name:exports_external.string().min(1),status:exports_external.enum(FEATURE_STATUSES),priority:exports_external.enum(PRIORITIES).optional(),tags:exports_external.array(exports_external.string()).optional(),created_at:isoDateString,updated_at:isoDateString});var taskBatchItemSchema=exports_external.object({name:exports_external.string().min(1,"name is required"),background:exports_external.string().optional(),requirements:exports_external.string().optional(),design:exports_external.string().optional(),plan:exports_external.string().optional(),acceptance_criteria:exports_external.string().optional(),feature_id:featureId,parent_wbs:wbsString,priority:exports_external.enum(PRIORITIES).optional(),tags:exports_external.array(exports_external.string()).optional(),template:exports_external.enum(TASK_VARIANTS).optional(),estimate_hours:exports_external.number().positive().optional()}).strict(),taskBatchSchema=exports_external.array(taskBatchItemSchema).min(1,"batch must contain at least one task");init_dist2();init_zod();var sectionNameSchema=exports_external.enum(TASK_CANONICAL_SECTIONS),matrixEntrySchema=exports_external.object({required:exports_external.array(sectionNameSchema).optional(),optional:exports_external.array(sectionNameSchema).optional(),forbidden:exports_external.array(sectionNameSchema).optional(),gate:exports_external.boolean().optional()}).strict(),matrixStatusSchema=exports_external.enum(["backlog","todo","wip","testing","blocked","done","cancelled"]),sectionMatrixSchema=exports_external.object({variants:exports_external.record(exports_external.string(),exports_external.partialRecord(matrixStatusSchema,matrixEntrySchema))}).strict();var CANONICAL_INDEX=new Map(TASK_CANONICAL_SECTIONS.map((s2,i2)=>[s2,i2]));function parseWorkflowInventory(json2){if(typeof json2!=="object"||json2===null)return{ok:!1,error:"workflow inventory: projection is not an object"};let obj=json2,name=typeof obj.name==="string"?obj.name:"",kind=typeof obj.kind==="string"?obj.kind:"",format2=typeof obj.format==="string"?obj.format:"",version3=typeof obj.version==="string"||typeof obj.version==="number"?String(obj.version):"",definitionDigest=typeof obj.definitionDigest==="string"?obj.definitionDigest:"",source;if(obj.source!==void 0){if(typeof obj.source!=="object"||obj.source===null)return{ok:!1,error:"workflow inventory: invalid definition source"};let value=obj.source;if(typeof value.path!=="string"||value.path===""||typeof value.layer!=="string"||!["project","registered","shared"].includes(value.layer))return{ok:!1,error:"workflow inventory: invalid definition source path/layer"};source={path:value.path,layer:value.layer}}if(name==="")return{ok:!1,error:"workflow inventory: missing name"};if(kind==="")return{ok:!1,error:"workflow inventory: missing kind"};if(definitionDigest==="")return{ok:!1,error:"workflow inventory: missing definitionDigest"};if(!Array.isArray(obj.steps)||obj.steps.length===0)return{ok:!1,error:"workflow inventory: no declared steps"};let steps=[];for(let raw of obj.steps){if(typeof raw!=="object"||raw===null)return{ok:!1,error:"workflow inventory: a step is not an object"};let s2=raw;if(typeof s2.id!=="string"||s2.id==="")return{ok:!1,error:"workflow inventory: a step is missing its id"};steps.push({id:s2.id,initial:s2.initial===!0,terminal:s2.terminal===!0,failure:s2.failure===!0,pause:s2.pause===!0,loopBack:s2.loopBack===!0,conditional:s2.conditional===!0,...typeof s2.nodeType==="string"?{nodeType:s2.nodeType}:{},...typeof s2.description==="string"?{description:s2.description}:{}})}return{ok:!0,inventory:{name,kind,format:format2,version:version3,definitionDigest,steps,...source?{source}:{}}}}function assertInventoryIdentity(inventory,expectedDigest){if(expectedDigest==="")return{ok:!1,error:"workflow inventory: no expected definition digest to bind against"};if(inventory.definitionDigest!==expectedDigest)return{ok:!1,error:`workflow inventory: identity drift — projected ${inventory.definitionDigest} ≠ execution ${expectedDigest}`};return{ok:!0}}import{basename,isAbsolute,join as join3,resolve as resolve2}from"node:path";import{homedir}from"node:os";import{dirname as dirname3,join as join2,resolve}from"node:path";import{fileURLToPath as fileURLToPath3}from"node:url";init_dist2();init_zod();var RFC3339_PATTERN=/^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(\.\d+)?([Zz]|[+-]\d{2}:\d{2})$/;function isRfc3339Timestamp(value){return RFC3339_PATTERN.test(value)&&Number.isFinite(Date.parse(value))}var ALL_FINDING_CODES=["L1.markdown-parse","L1.schema-validation","L2.missing-required-section","L2.forbidden-section","L2.disallowed-section","L2.heading-level","L2.section-order","L3.requirements-format","L3.requirements-checkbox","L3.requirements-empty","L3.ac-empty","L3.ac-requirement-coverage","L3.solution-file-line","L3.review-priority-table","L3.required-section-placeholder","L3.plan-format","L3.unchecked-checklist","L3.ac-checklist-text","L3.ac-bdd-error","L3.ac-bdd-warning","L3.ac-bdd-invalid","L3.scope-delineation","L3.one-active-goal","L3.children-limit","L3.review-testing-contradiction","L4.design-placeholder","L4.feature-not-found","L4.feature-terminal","L4.missing-feature-id","L4.parent-not-found","L4.dependency-not-found","L4.rollup-subtasks-open","L4.rollup-parent-open","L4.rollup-missing-roster","L4.rollup-roster-not-declared-dependency","L4.readiness-blocked","L4.prose-prerequisite-unlisted","L4.prerequisite-cycle","L4.prerequisite-not-done","L4.gate-language","L4.linked-task-parse-failed","L4.orphan-scenarios","L4.uncovered-task-scenario","L4.uncovered-feature-scenario","L4.verdict-rows-match-no-scenario","L4.verifying-incomplete-tasks","L4.dogfood-missing","L4.stale-line-anchor","L4.anchor-subject-mismatch","L4.malformed-verdict-artifact","L4.scenario-unverified","L4.testing-verdict-stub","L4.evidence-not-recoverable","L4.feature-receipt-missing","L4.feature-receipt-malformed","L4.feature-receipt-cross-feature","L4.feature-receipt-divergent","L4.feature-receipt-failed","L4.feature-receipt-run","L4.feature-receipt-stale","L4.feature-receipt-contract"];function isFindingCode(code){return ALL_FINDING_CODES.includes(code)}init_dist();init_zod();var projectEntrySchema=exports_external.object({name:exports_external.string().min(1),path:exports_external.string().min(1),port:exports_external.number().int().nonnegative().default(0)}),projectsFileSchema=exports_external.object({schema_version:exports_external.literal(1).default(1),projects:exports_external.array(projectEntrySchema).default([])});init_zod();var slashCommandCategorySchema=exports_external.enum(["git","dev","sys","harness"]),slashCommandItemSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().min(1),category:slashCommandCategorySchema.default("dev"),argumentHint:exports_external.string().optional(),tags:exports_external.array(exports_external.string()).default([]),role:exports_external.string().optional(),source:exports_external.string().optional()}),slashCommandsFileSchema=exports_external.object({version:exports_external.number().int().default(1),updatedAt:exports_external.string().optional(),commands:exports_external.array(slashCommandItemSchema).default([])});var SPUR_LOG_LEVELS=["debug","info","warn","error"],DEFAULT_TASKS_DIR="docs/tasks",DEFAULT_FEATURES_DIR="docs/features",DEFAULT_DATABASE_URL=".spur/spur.db";var folderConfigSchema=exports_external.object({baseCounter:exports_external.number().int().nonnegative().default(0),label:exports_external.string().optional()});function folderPathWithDefault(defaultPath){return exports_external.preprocess((v)=>v==null?void 0:v,exports_external.string().default(defaultPath))}var tasksConfigSchema=exports_external.object({folders:exports_external.record(exports_external.string(),folderConfigSchema).default({}),active:folderPathWithDefault(DEFAULT_TASKS_DIR),severity:exports_external.record(exports_external.string(),exports_external.enum(["error","warning","off"])).optional()}).superRefine((data,ctx)=>{if(data.severity){for(let code of Object.keys(data.severity))if(!isFindingCode(code))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["severity",code],message:`Unknown finding code "${code}" in severity overrides map`})}}),featuresConfigSchema=exports_external.object({dir:folderPathWithDefault(DEFAULT_FEATURES_DIR)}),EXECUTOR_CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"];function normalizeExecutorTier(value){return value==="capable"?"capable-1":value}var executorCapabilityTierSchema=exports_external.preprocess((value)=>{if(value===void 0||value===null)return;return typeof value==="string"?normalizeExecutorTier(value):value},exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional()),AGENT_ROLE_NAMES=["scribe","coder","reviewer","planner"];var EXECUTION_CAPABILITY_AXES=["fsRead","fsWrite","networkEgress","processSpawn","externalMutationApproval"],SESSION_CAPABILITY_AXES=["resumeById","sessionDir","persistentStdin","structuredOutput"],AGENT_RUN_CAPABILITY_AXES=[...EXECUTION_CAPABILITY_AXES,...SESSION_CAPABILITY_AXES],EXECUTION_CAPABILITY_STATES=["enforced","available","unavailable","unknown"],EXECUTION_CAPABILITY_PROVENANCES=["native-known","operator-configured","unattested"],ExecutionCapabilityAttestationSchema=exports_external.object({state:exports_external.enum(EXECUTION_CAPABILITY_STATES),provenance:exports_external.enum(EXECUTION_CAPABILITY_PROVENANCES)}),ExecutionCapabilitiesSchema=exports_external.object({version:exports_external.literal(1),axes:exports_external.partialRecord(exports_external.enum(EXECUTION_CAPABILITY_AXES),ExecutionCapabilityAttestationSchema)}),EXECUTION_CAPABILITY_REQUIREMENTS=["available","enforced"],RequiresCapabilitiesSchema=exports_external.partialRecord(exports_external.enum(AGENT_RUN_CAPABILITY_AXES),exports_external.enum(EXECUTION_CAPABILITY_REQUIREMENTS)),executorAvailabilityOwnerSchema=exports_external.enum(["operator","quota","probe"]),executorDisabledObjectSchema=exports_external.object({owner:executorAvailabilityOwnerSchema,since:exports_external.string().refine(isRfc3339Timestamp,{message:"since must be an RFC 3339 timestamp"}),reason:exports_external.string().min(1)}),AgentExecutorConfigSchema=exports_external.object({name:exports_external.string().min(1),agent:exports_external.string().min(1),model:exports_external.string().min(1).optional(),tier:executorCapabilityTierSchema.optional(),executionCapabilities:ExecutionCapabilitiesSchema.optional(),disabled:exports_external.union([exports_external.boolean(),executorDisabledObjectSchema]).default(!1)});var AgentRoleConfigSchema=exports_external.object({tier:exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional(),stages:exports_external.array(exports_external.string().min(1)).min(1).optional()});var FleetMemberSchema=exports_external.object({id:exports_external.string().min(1).optional(),role:exports_external.enum(AGENT_ROLE_NAMES,{error:(issue2)=>Error(`Unknown role "${issue2.input}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`)}).optional(),executor:exports_external.string().min(1).optional(),purpose:exports_external.string().optional(),enabled:exports_external.boolean().optional()}),FLEET_STRATEGIES=["rest","gtd"],FleetMemberEntrySchema=FleetMemberSchema.superRefine((member,ctx)=>{if(member.role===void 0&&member.executor===void 0)ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:"must declare a role or an executor — at least one is required"})}),AgentFleetSchema=exports_external.object({enabled:exports_external.boolean().default(!1),strategy:exports_external.enum(FLEET_STRATEGIES).default("rest"),orchestrator:exports_external.string().min(1).optional(),members:exports_external.array(FleetMemberEntrySchema).default([])});var AgentOutputConfigSchema=exports_external.object({"max-bytes":exports_external.number().int().positive().optional(),"max-lines":exports_external.number().int().positive().optional()}),AgentConfigSchema=exports_external.object({default:exports_external.string().optional(),executors:exports_external.array(AgentExecutorConfigSchema).optional(),roles:exports_external.record(exports_external.string(),AgentRoleConfigSchema).optional(),output:AgentOutputConfigSchema.optional(),sessionAffinity:exports_external.boolean().optional(),fleet:AgentFleetSchema.optional()}).superRefine((value,ctx)=>{for(let key of Object.keys(value.roles??{}))if(!AGENT_ROLE_NAMES.includes(key))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["roles",key],message:`Unknown role "${key}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`});let executors=value.executors,executorNames=new Set;if(executors!==void 0){let seen=new Set;for(let[index2,executor]of executors.entries()){if(seen.has(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Duplicate executor name: ${executor.name}`,path:["executors",index2,"name"]});if(executor.name==="inline"||executor.name==="auto")ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" is reserved (the --agent selector value '${executor.name}' has fixed semantics); rename executor at index ${index2}.`,path:["executors",index2,"name"]});if(AGENT_ROLE_NAMES.includes(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" collides with the role selector namespace ("${executor.name}"); rename executor at index ${index2}.`,path:["executors",index2,"name"]});seen.add(executor.name),executorNames.add(executor.name)}}}),RulesConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowsConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowConfigSchema=exports_external.object({hitlDecisionMaker:exports_external.boolean().optional(),logRetentionDays:exports_external.number().int().positive().default(30)}),RedactionConfigSchema=exports_external.object({enabled:exports_external.boolean().optional()}),HistoryRefreshConfigSchema=exports_external.object({on_completion:exports_external.boolean().default(!1),debounce_ms:exports_external.number().int().min(1000).default(600000)}),HistoryConfigSchema=exports_external.object({refresh:HistoryRefreshConfigSchema.optional()}),VersionCarrierEntrySchema=exports_external.looseObject({type:exports_external.string().min(1)}),BuilderBumpVerConfigSchema=exports_external.object({tagVersionSeparator:exports_external.string().min(1).default("-v"),aggregatePackage:exports_external.string().min(1).optional(),publishWorkflow:exports_external.string().min(1).default("publish.yml"),releaseCommitType:exports_external.string().min(1).default("chore"),releaseCommitScope:exports_external.string().min(1).default("release"),ghRunListLimit:exports_external.number().int().positive().default(5),versionCarriers:exports_external.array(VersionCarrierEntrySchema).default([])}),BuilderConfigSchema=exports_external.object({"bump-ver":BuilderBumpVerConfigSchema.optional()});var bootstrapOptionsSchema=exports_external.object({options:exports_external.record(exports_external.string(),exports_external.unknown()).optional()}),spurConfigSchema=exports_external.object({version:exports_external.string().optional(),name:exports_external.string().optional(),bootstrap:bootstrapOptionsSchema.optional(),agent:AgentConfigSchema.optional(),rules:RulesConfigSchema.optional(),workflows:WorkflowsConfigSchema.optional(),workflow:WorkflowConfigSchema.optional(),redaction:RedactionConfigSchema.optional(),history:HistoryConfigSchema.optional(),builder:BuilderConfigSchema.optional(),tasks:tasksConfigSchema.optional(),features:featuresConfigSchema.optional()});var configSchema3=exports_external.object({database:exports_external.object({url:exports_external.string().default(DEFAULT_DATABASE_URL)}).default({url:DEFAULT_DATABASE_URL}),server:exports_external.object({port:exports_external.coerce.number().int().positive().default(3000),host:exports_external.string().default("localhost"),openBrowser:exports_external.boolean().default(!0),webDistPath:exports_external.string().nullable().default(null)}).default({port:3000,host:"localhost",openBrowser:!0,webDistPath:null}),telemetry:exports_external.object({enabled:exports_external.boolean().default(!1),endpoint:exports_external.string().optional()}).default({enabled:!1}),logging:exports_external.object({level:exports_external.enum(SPUR_LOG_LEVELS).default("info")}).default({level:"info"})});import{existsSync as existsSync2,readdirSync as readdirSync2,statSync as statSync3}from"node:fs";import{dirname as dirname2,join}from"node:path";var BUNDLED_CONFIG_DIRS=["config","spur-cli/config"],cachedRoot;function bundledConfigRoot(){if(cachedRoot!==void 0)return cachedRoot;let dir=import.meta.dirname;while(!0){for(let name of BUNDLED_CONFIG_DIRS){let candidate=join(dir,name);if(isBundledConfigDir(candidate))return cachedRoot=candidate,cachedRoot}let parent=dirname2(dir);if(parent===dir)break;dir=parent}return cachedRoot=null,cachedRoot}function isBundledConfigDir(candidate){return existsSync2(candidate)&&statSync3(candidate).isDirectory()&&existsSync2(join(candidate,"rules"))&&existsSync2(join(candidate,"workflows"))}init_dist2();var GLOBAL_CONFIG_FILE=join2(homedir(),".config","spur","config.yaml"),LOADER_DIR=dirname3(fileURLToPath3(import.meta.url));init_dist6();init_dist2();import crypto3 from"node:crypto";function canonicalJsonStringify(obj){if(obj===null||typeof obj!=="object")return JSON.stringify(obj);if(Array.isArray(obj))return`[${obj.map(canonicalJsonStringify).join(",")}]`;return`{${Object.keys(obj).sort().map((key)=>`${JSON.stringify(key)}:${canonicalJsonStringify(obj[key])}`).join(",")}}`}function computeDefinitionDigest(workflow){let canonical=canonicalJsonStringify(workflow);return`sha256:${crypto3.createHash("sha256").update(canonical,"utf8").digest("hex")}`}var EMBEDDED_SCHEMA_PREFIX="\x00embedded-spur",SPUR_SCHEMA_MANIFEST="@gobing-ai/spur/package.json";function normalizeLayerPath(cwd,path8){return resolve2(cwd,path8)}function workflowLayers(opts){let sharedRoot=opts.sharedRoot!==void 0?opts.sharedRoot:bundledConfigRoot(),sharedPath=sharedRoot!==null?normalizeLayerPath(opts.cwd,join3(sharedRoot,"workflows")):null,layers=[],seen=new Set,add=(id,path8)=>{if(seen.has(path8))return;seen.add(path8),layers.push({id,path:path8})};add("project",normalizeLayerPath(opts.cwd,join3(opts.cwd,".spur","workflows")));for(let entry of opts.registered){if(sharedPath!==null&&normalizeLayerPath(opts.cwd,entry)===sharedPath)continue;add("registered",normalizeLayerPath(opts.cwd,entry))}if(sharedPath!==null)add("shared",sharedPath);return layers}function createEmbeddedSchemaOptions(embedded){if(embedded===void 0||embedded.size===0)return;let nodeFs=createNodeFileSystem2();return{resolve:(specifier)=>specifier===SPUR_SCHEMA_MANIFEST?`${EMBEDDED_SCHEMA_PREFIX}/package.json`:specifier,fileSystem:{readFile:async(path8)=>{if(!path8.startsWith(EMBEDDED_SCHEMA_PREFIX))return nodeFs.readFile(path8);let subpath=path8.slice(EMBEDDED_SCHEMA_PREFIX.length+1),text3=embedded.get(subpath);if(text3===void 0)throw Error(`No embedded schema registered for "${subpath}".`);return text3}}}}async function readWorkflowNameFast(fs2,filePath){try{let text3=await fs2.readFile(filePath),parsed=$parse(text3);return typeof parsed?.name==="string"?parsed.name:null}catch{return null}}async function scanWorkflowByName(cwd,name,registered){let fs2=createNodeFileSystem2();for(let layer of workflowLayers({cwd,registered}))try{let files=(await fs2.readDir(layer.path)).filter((f)=>f.endsWith(".yaml")||f.endsWith(".yml"));for(let f of files){let abs=join3(layer.path,f);if(await readWorkflowNameFast(fs2,abs)===name)return{path:abs,source:layer.id}}}catch{}return null}function resolveWorkflowFile(cwd,file2){let fs2=createNodeFileSystem2(),projectPath=resolve2(cwd,file2);if(fs2.exists(projectPath))return{path:projectPath,source:"project"};let isYaml=file2.endsWith(".yaml")||file2.endsWith(".yml"),base2=basename(file2);if(!isAbsolute(file2)){let withYaml=isYaml?file2:`${file2}.yaml`,projectSpur=resolve2(cwd,".spur","workflows",withYaml);if(fs2.exists(projectSpur))return{path:projectSpur,source:"project"};if(!isYaml){let projectDirect=resolve2(cwd,`${file2}.yaml`);if(fs2.exists(projectDirect))return{path:projectDirect,source:"project"};let projectSpurPipeline=resolve2(cwd,".spur","workflows",`${file2}-pipeline.yaml`);if(fs2.exists(projectSpurPipeline))return{path:projectSpurPipeline,source:"project"};let projectDirectPipeline=resolve2(cwd,`${file2}-pipeline.yaml`);if(fs2.exists(projectDirectPipeline))return{path:projectDirectPipeline,source:"project"}}}let bundledRoot=bundledConfigRoot();if(bundledRoot!==null){let sharedName=isYaml?base2:`${base2}.yaml`,sharedPath=join3(bundledRoot,"workflows",sharedName);if(fs2.exists(sharedPath))return{path:sharedPath,source:"shared"};if(!isYaml){let sharedPipeline=join3(bundledRoot,"workflows",`${base2}-pipeline.yaml`);if(fs2.exists(sharedPipeline))return{path:sharedPipeline,source:"shared"};let sharedLiteral=join3(bundledRoot,"workflows",base2);if(fs2.exists(sharedLiteral))return{path:sharedLiteral,source:"shared"}}return{path:null,probed:[projectPath,sharedPath]}}return{path:null,probed:[projectPath,null]}}async function resolveWorkflowDefinition(cwd,fileOrName,options={}){let registered=options.registered??[],resolved=(basename(fileOrName)===fileOrName&&!/\.ya?ml$/.test(fileOrName)&&!createNodeFileSystem2().exists(resolve2(cwd,fileOrName))?await scanWorkflowByName(cwd,fileOrName,registered):null)??resolveWorkflowFile(cwd,fileOrName);if(resolved.path===null){let scanned=await scanWorkflowByName(cwd,fileOrName,registered);if(scanned!==null)resolved=scanned;else{let[probedProject,probedShared]=resolved.probed;throw Error(`Workflow not found: ${probedProject}${probedShared!==null?` (shared: ${probedShared})`:""}`)}}let embedded=createEmbeddedSchemaOptions(options.embeddedSchemas),workflow=await loadWorkflowDef(resolved.path,{validateSchema:options.validateSchema!==!1,...embedded!==void 0?embedded:{}});if(workflow.version==="")throw Error(`Invalid workflow definition ${resolved.path}: root "version" is an empty string. Omit the field for an unversioned definition, or give it a non-empty literal.`);let digest=computeDefinitionDigest(workflow);return{path:resolved.path,workflow,digest,layer:resolved.source}}var UNPERSISTED_PREFIX="trace-unpersisted:";class RunRowNotFoundError extends Error{runId;constructor(runId){super(`run row not found: ${runId}`);this.name="RunRowNotFoundError",this.runId=runId}}class WorkflowActionTraceWriter{inner;recordFailure;db;boundaries=new Map;constructor(inner,recordFailure,db2){this.inner=inner;this.recordFailure=recordFailure;this.db=db2}async saveActionStart(runId,node,kind,options){let outcome=await this.guard("action.start",{runId,node,kind},()=>this.inner.saveActionStart(runId,node,kind,options));if(!outcome.ok){let syntheticId=`${UNPERSISTED_PREFIX}${crypto.randomUUID()}`;return this.boundaries.set(syntheticId,{runId,node,kind}),this.lastStart={runId,node,kind},syntheticId}return this.boundaries.set(outcome.value,{runId,node,kind}),this.lastStart={runId,node,kind},outcome.value}lastStart;async saveActionFinalize(actionId,status,durationMs,ok,kind,result,redactor){let origin2=this.boundaries.get(actionId)??this.lastStart;await this.guard("action.finish",{runId:origin2?.runId??"",node:origin2?.node,kind},()=>this.inner.saveActionFinalize(actionId,status,durationMs,ok,kind,result,redactor)),this.boundaries.delete(actionId)}async finalizeRun(runId,status,completedAt){await this.inner.finalizeRun(runId,status,completedAt)}async claimRunOwnership(runId,owner,expectedStatuses){return this.inner.claimRunOwnership(runId,owner,expectedStatuses)}async interruptRun(runId,reason){return this.inner.interruptRun(runId,reason)}async recordAction(boundary2){let start=await this.guard("action.start",{runId:boundary2.runId,node:boundary2.node,kind:boundary2.kind},()=>this.inner.saveActionStart(boundary2.runId,boundary2.node,boundary2.kind));if(!start.ok)return start;let finish=await this.guard("action.finish",{runId:boundary2.runId,node:boundary2.node,kind:boundary2.kind},()=>this.inner.saveActionFinalize(start.value,boundary2.status,boundary2.durationMs,boundary2.ok,boundary2.kind,boundary2.result,boundary2.redactor));if(!finish.ok)return finish;return await this.backdateStart(start.value,boundary2),{ok:!0,actionId:start.value}}async backdateStart(actionId,boundary2){let db2=this.db;if(db2===void 0||boundary2.durationMs<=0)return;await this.guard("action.backdate",{runId:boundary2.runId,node:boundary2.node,kind:boundary2.kind},async()=>{let dao2=new ActionRunDao(db2),completedAt=await dao2.completedAtById(actionId);if(completedAt===null)return;let startedAt=new Date(new Date(completedAt).getTime()-boundary2.durationMs).toISOString();await dao2.setStartedAt(actionId,startedAt)})}async closeRun(runId,status,completedAt){if(await this.inner.loadRun(runId)===void 0)throw new RunRowNotFoundError(runId);return await this.inner.finalizeRun(runId,status,completedAt??new Date().toISOString()),{ok:!0}}async guard(operation,context4,emit){try{return{ok:!0,value:await emit()}}catch(error51){let failure={operation,runId:context4.runId,...context4.node!==void 0?{node:context4.node}:{},...context4.kind!==void 0?{kind:context4.kind}:{},error:error51 instanceof Error?error51.message:String(error51),at:new Date().toISOString()};try{this.recordFailure?.(failure)}catch{}return{ok:!1,failure}}}createRun(record2){return this.inner.createRun(record2)}savePhase(runId,phase,status){return this.inner.savePhase(runId,phase,status)}saveTransition(runId,from,to,trigger){return this.inner.saveTransition(runId,from,to,trigger)}saveWorkflowState(runId,state,data){return this.inner.saveWorkflowState(runId,state,data)}commitTransition(runId,from,to,trigger,state,data,phase){return this.inner.commitTransition(runId,from,to,trigger,state,data,phase)}loadRun(runId){return this.inner.loadRun(runId)}listRuns(){return this.inner.listRuns()}findRunByKey(workflowName,externalKey){return this.inner.findRunByKey(workflowName,externalKey)}createOrAttachRun(record2){return this.inner.createOrAttachRun(record2)}reseedRun(runId,newState){return this.inner.reseedRun(runId,newState)}loadCurrentState(runId){return this.inner.loadCurrentState(runId)}loadLatestStateSnapshot(runId){return this.inner.loadLatestStateSnapshot(runId)}listPausedRuns(options){return this.inner.listPausedRuns(options)}}function createWorkflowActionTraceWriter(db2,recordFailure){return new WorkflowActionTraceWriter(new DbWorkflowPersistenceAdapter(db2),recordFailure,db2)}var TRIPWIRE_CATALOG=Object.freeze({"retry-exhausted":{id:"retry-exhausted",version:1,response:"fail",nextDecision:"Retries are exhausted; an operator must decide to escalate, extend the retry policy, or fail the stage. No further automatic retry is permitted."},"hard-budget":{id:"hard-budget",version:1,response:"fail",nextDecision:"An operator must raise the declared budget or trim the stage scope, then re-run the action; the run stays failed until then."},"capability-denied":{id:"capability-denied",version:1,response:"fail",nextDecision:"An operator must attest the executor capabilities in agent config or lower the stage requiresCapabilities, then re-run the action."},"proof-invalidated":{id:"proof-invalidated",version:1,response:"fail",nextDecision:"An operator must restore the proof inputs or re-establish the verdict (re-verify) before record; recording against a changed tree is blocked."},"output-drop":{id:"output-drop",version:1,response:"continue",nextDecision:"The dispatch completed but its captured evidence is incomplete (bounded relay dropped chunks). Inspect the session/trace for full output if the result is contested."}});var SHELL_METACHARACTERS=/[;&|<>$`(){}[\]!*?~#\n\r"']/;function splitLaunchCommand(value,label){if(SHELL_METACHARACTERS.test(value))return{error:`${label} must not contain shell metacharacters (got ${value})`};let tokens=value.trim().split(/\s+/).filter((t)=>t.length>0),command=tokens[0];if(command===void 0)return{error:`Action option ${label.slice(label.indexOf('"'))} must be a non-empty string`};return{command,leadingArgs:tokens.slice(1)}}import crypto4 from"node:crypto";import{tmpdir}from"node:os";import{dirname as dirname4,join as join4,resolve as resolve3,sep}from"node:path";init_dist6();class ProofCaptureError extends Error{stderr;constructor(message,stderr){super(message);this.stderr=stderr;this.name="ProofCaptureError"}}var TASK_SPEC_SECTIONS=["Background","Requirements","Acceptance Criteria","Design","Plan"],CANONICAL_TASK_HEADING_RE=/^##[ \t]+(\d+)\.[ \t]+(\S.*)$/m;function taskDocumentShapeError(content){let doc2=MarkdownDocument.parse(content,"task"),heading=CANONICAL_TASK_HEADING_RE.exec(doc2.bodyWithoutFrontmatter);if(heading===null)return"no canonical task heading (`## <WBS>. <title>`) was found";if((heading[2]??"").trim()==="")return`the canonical task heading for WBS ${heading[1]} has an empty title`;if(TASK_SPEC_SECTIONS.filter((section)=>doc2.hasSection(section)).length===0)return`no task specification section (${TASK_SPEC_SECTIONS.join(", ")}) was found`;return null}async function readProofInputContents(fileSystem=createNodeFileSystem2(),workdir,options){for(let name of["taskFile","featureFile"]){let value=options[name];if(value!==void 0&&typeof value!=="string")return{ok:!1,error:`${name} must be a string when supplied (got ${typeof value})`}}let readOne=async(name)=>{let raw=name==="taskFile"?options.taskFile:options.featureFile;if(raw===void 0||raw==="")return{};let workdirAbs=resolve3(workdir),resolved=resolve3(workdirAbs,raw);if(!(resolved===workdirAbs||resolved.startsWith(`${workdirAbs}${sep}`)))return{error:`${name} must resolve under the workflow workdir (${workdirAbs}): ${raw}`};let stat;try{stat=await fileSystem.stat(resolved)}catch(error51){return{error:`${name} could not be inspected: ${error51.message}`}}if(stat===null)return{error:`${name} does not exist: ${raw} (resolved ${resolved}) — an explicitly supplied spec must be readable, not silently omitted`};if(!stat.isFile())return{error:`${name} is not a regular file: ${resolved}`};let content;try{content=await fileSystem.readFile(resolved)}catch(error51){return{error:`${name} is not readable: ${error51.message}`}}if(name==="taskFile"){let shapeError=taskDocumentShapeError(content);if(shapeError!==null)return{error:`taskFile is not a task document: ${raw} (resolved ${resolved}) — ${shapeError}. Supply the task specification markdown itself: a \`## <WBS>. <title>\` heading plus at least one of ${TASK_SPEC_SECTIONS.join(", ")}. A file containing only a path is not dereferenced.`}}return{content}},task=await readOne("taskFile");if(task.error!==void 0)return{ok:!1,error:task.error};let feature=await readOne("featureFile");if(feature.error!==void 0)return{ok:!1,error:feature.error};return{ok:!0,...task.content!==void 0?{taskContent:task.content}:{},...feature.content!==void 0?{featureContent:feature.content}:{}}}var DEFAULT_EXCLUDE_GLOBS=["docs/tasks*","docs/features*"];async function createGitAlternateTree(cwd,excludeGlobs=DEFAULT_EXCLUDE_GLOBS,executor=new NodeProcessExecutor2,fs2=createNodeFileSystem2()){let indexFile=join4(tmpdir(),`spur-proof-fingerprint-${crypto4.randomUUID()}.index`);try{await fs2.ensureDir(dirname4(indexFile));let env2=Object.fromEntries(Object.entries(getEnvVars()).filter((entry)=>entry[1]!==void 0));env2.GIT_INDEX_FILE=indexFile;let common4={cwd,env:env2,forceBuffered:!0,rejectOnError:!1},read=await executor.run({command:"git",args:["read-tree","HEAD"],...common4});if(read.exitCode!==0)throw new ProofCaptureError(`git read-tree HEAD failed with exit code ${read.exitCode}`,read.stderr);let excludes=excludeGlobs.map((glob)=>`:(exclude)${glob}`),add=await executor.run({command:"git",args:["add","-A","--",".",...excludes],...common4});if(add.exitCode!==0)throw new ProofCaptureError(`git add -A failed with exit code ${add.exitCode}`,add.stderr);let tree=await executor.run({command:"git",args:["write-tree"],...common4});if(tree.exitCode!==0)throw new ProofCaptureError(`git write-tree failed with exit code ${tree.exitCode}`,tree.stderr);return tree.stdout.trim()}catch(error51){if(error51 instanceof ProofCaptureError)throw error51;throw new ProofCaptureError(`git alternate-tree capture threw: ${error51.message}`)}finally{if(await fs2.exists(indexFile))try{await fs2.deleteFile(indexFile)}catch{}}}function extractTaskProofData(content){let doc2=MarkdownDocument.parse(content,"task"),fm=doc2.frontmatterData??{},wbs=typeof fm.wbs==="string"?fm.wbs:void 0,name=typeof fm.name==="string"?fm.name:void 0,feature_id=typeof fm.feature_id==="string"?fm.feature_id:void 0,depends_on;if(Array.isArray(fm.depends_on))depends_on=fm.depends_on.filter((d)=>typeof d==="string");else if(Array.isArray(fm.dependencies))depends_on=fm.dependencies.filter((d)=>typeof d==="string");let sections={},taskSections=["Background","Requirements","Acceptance Criteria","Design","Plan"];for(let sec of taskSections)if(doc2.hasSection(sec)){let body=doc2.getSection(sec);if(body!==null)sections[sec]=body.trim()}return{...wbs!==void 0?{wbs}:{},...name!==void 0?{name}:{},...feature_id!==void 0?{feature_id}:{},...depends_on!==void 0?{depends_on}:{},sections}}function extractFeatureProofData(content){let doc2=MarkdownDocument.parse(content,"feature"),fm=doc2.frontmatterData??{},id=typeof fm.id==="string"?fm.id:void 0,name=typeof fm.name==="string"?fm.name:void 0,sections={},featureSections=["Goal","Scope","Acceptance Criteria"];for(let sec of featureSections)if(doc2.hasSection(sec)){let body=doc2.getSection(sec);if(body!==null)sections[sec]=body.trim()}return{...id!==void 0?{id}:{},...name!==void 0?{name}:{},sections}}async function computeProofInputFingerprint(options={}){let cwd=options.cwd??process.cwd(),gitTree=await createGitAlternateTree(cwd,options.excludeGlobs??DEFAULT_EXCLUDE_GLOBS,options.processExecutor,options.fileSystem),task;if(options.taskContent!==void 0)task=extractTaskProofData(options.taskContent);let feature;if(options.featureContent!==void 0)feature=extractFeatureProofData(options.featureContent);let canonical=canonicalJsonStringify({gitTree,...task!==void 0?{task}:{},...feature!==void 0?{feature}:{},...options.learningsContent!==void 0?{learnings:options.learningsContent}:{}});return`sha256:${crypto4.createHash("sha256").update(canonical,"utf8").digest("hex")}`}var ProofInputFingerprint={compute:computeProofInputFingerprint};init_zod();var VERDICT_AGGREGATES=["PASS","PARTIAL","FAIL","UNKNOWN"],ROW_STATUSES=["MET","PARTIAL","UNMET","N/A"],CHECK_SEVERITIES=["blocker","major","minor","advisory"],verdictSchema=exports_external.string().transform((v,ctx)=>{let up=v.toUpperCase();if(!VERDICT_AGGREGATES.includes(up))return ctx.addIssue({code:"custom",message:`invalid verdict "${v}" (expected PASS|PARTIAL|FAIL|UNKNOWN)`}),"UNKNOWN";return up}),coverageRowSchema=exports_external.object({id:exports_external.string().optional(),scenario:exports_external.string().optional(),status:exports_external.string(),evidenceType:exports_external.string().optional(),evidence:exports_external.string().optional()}).superRefine((r,ctx)=>{if(r.id!==void 0&&r.scenario!==void 0&&r.id!==r.scenario)ctx.addIssue({code:"custom",message:`id/scenario conflict ("${r.id}" vs "${r.scenario}")`,path:["scenario"]});if(!ROW_STATUSES.includes(r.status.toUpperCase()))ctx.addIssue({code:"custom",message:`invalid row status "${r.status}"`,path:["status"]})}).transform((r)=>({id:r.id??r.scenario??"",status:r.status.toUpperCase(),evidenceType:r.evidenceType??"",evidence:r.evidence??""})),checkSchema=exports_external.object({name:exports_external.string().optional(),check:exports_external.string().optional(),id:exports_external.string().optional(),status:exports_external.string(),evidence:exports_external.string().optional().default(""),severity:exports_external.enum(CHECK_SEVERITIES).optional()}).superRefine((c3,ctx)=>{if(c3.name===void 0&&c3.check===void 0&&c3.id===void 0)ctx.addIssue({code:"custom",message:"check row needs one of name/check/id",path:["name"]})}).transform((c3)=>({name:c3.name??c3.check??c3.id??"",status:c3.status,evidence:c3.evidence,severity:c3.severity})),verifyVerdictSchema=exports_external.object({wbs:exports_external.string().optional().default(""),verdict:verdictSchema,requirements:exports_external.array(coverageRowSchema).optional().default([]),acceptanceCriteria:exports_external.array(coverageRowSchema).optional().default([]),checks:exports_external.array(checkSchema).optional().default([]),source:exports_external.string().optional(),pipelineRunId:exports_external.string().optional(),recordedAt:exports_external.string().optional()});var field=(path8,label)=>({path:path8,label}),SOURCE_PROFILES={planning:{producerPackage:"spur",subsystem:"planning",remediationKind:"prefix-filter"},queue:{producerPackage:"@gobing-ai/ts-infra",subsystem:"job-queue",remediationKind:"prefix-filter"},scheduler:{producerPackage:"@gobing-ai/ts-infra",subsystem:"scheduler",remediationKind:"prefix-filter"},message:{producerPackage:"spur",subsystem:"coordination-messaging",remediationKind:"prefix-filter"},process:{producerPackage:"@gobing-ai/ts-runtime",subsystem:"process-executor",remediationKind:"prefix-filter"},workflow:{producerPackage:"@gobing-ai/ts-dual-workflow-engine",subsystem:"workflow",remediationKind:"workflow-trace"},rule:{producerPackage:"@gobing-ai/ts-rule-engine",subsystem:"rule-engine",remediationKind:"rule-trace"},agent:{producerPackage:"@gobing-ai/ts-ai-runner",subsystem:"agent-runner",remediationKind:"prefix-filter"},history:{producerPackage:"spur",subsystem:"history",remediationKind:"prefix-filter"},bus:{producerPackage:"@gobing-ai/ts-infra",subsystem:"event-bus",remediationKind:"prefix-filter"},api:{producerPackage:"spur",subsystem:"http-api",remediationKind:"prefix-filter"}};function at(data,path8){if(data===null)return;let current=data;for(let segment of path8.split(".")){if(current===null||typeof current!=="object"||Array.isArray(current))return;current=current[segment]}return current}function s2(data,...paths){for(let path8 of paths){let value=at(data,path8);if(typeof value==="string"&&value.length>0)return value}return}function n2(data,...paths){for(let path8 of paths){let value=at(data,path8);if(typeof value==="number"&&Number.isFinite(value))return String(value);if(typeof value==="boolean")return String(value)}return}function entityId(input){return s2(input.data,"entity.id")??input.correlation.entityId??""}function looksLikeOpaqueId(value){if(typeof value!=="string")return!1;let v=value.trim();if(v==="")return!1;if(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v))return!0;if(/^live[-_][a-z0-9._-]+$/i.test(v))return!0;if(/^(?:eventId|rowId|runId|executionId|actionId)$/i.test(v))return!0;return!1}function humanWorkflowTitle(input){let raw=s2(input.data,"workflowName")??s2(input.data,"workflow");if(raw!==void 0&&!looksLikeOpaqueId(raw))return(raw.split("/").pop()?.replace(/\.(?:ya?ml|json)$/i,"")??raw).replace(/[._-]+$/,"");return""}function humanStepLabel(data){let label=s2(data,"nodeLabel")??s2(data,"stepName")??s2(data,"step");if(label!==void 0&&!looksLikeOpaqueId(label))return label;let node=s2(data,"node");if(node!==void 0&&!looksLikeOpaqueId(node))return node;return}function derivedFrom(...paths){return{support:"derived",derive:({data})=>s2(data,...paths)}}function derivedFromValue(...paths){return{support:"derived",derive:({data})=>n2(data,...paths)??s2(data,...paths)}}var unsupported={support:"unsupported"};function baseEvent(name,source,renderer,payloadPolicy="metadata-only",tier="default",producer){return{name,source,tier,payloadPolicy,renderer,...producer!==void 0?{producer}:{}}}var BASE_CATALOG=[baseEvent("task.created","planning","planning"),baseEvent("task.updated","planning","planning"),baseEvent("task.transitioned","planning","planning"),baseEvent("feature.created","planning","planning"),baseEvent("feature.updated","planning","planning"),baseEvent("feature.transitioned","planning","planning"),baseEvent("queue.consumer.started","queue","queue"),baseEvent("queue.consumer.stopped","queue","queue"),baseEvent("queue.job.enqueued","queue","queue"),baseEvent("queue.job.started","queue","queue"),baseEvent("queue.job.completed","queue","queue"),baseEvent("queue.job.failed","queue","queue"),baseEvent("queue.job.retrying","queue","queue"),baseEvent("queue.stats","queue","queue"),baseEvent("scheduler.job.executed","scheduler","scheduler"),baseEvent("message.sent","message","message"),baseEvent("message.replied","message","message"),baseEvent("process.spawned","process","process"),baseEvent("process.exited","process","process"),baseEvent("process.stopped","process","process"),baseEvent("process.started","process","process"),baseEvent("agent.invoke.start","agent","agent"),baseEvent("agent.invoke.exit","agent","agent"),baseEvent("agent.invoke.escalated","agent","agent","metadata-only","default",{package:"spur",subsystem:"agent-runner"}),baseEvent("agent.invoke.exhausted","agent","agent","metadata-only","default",{package:"spur",subsystem:"agent-runner"}),baseEvent("agent.started","agent","agent"),baseEvent("agent.stopped","agent","agent"),baseEvent("agent.message.sent","agent","agent"),baseEvent("strategy.changed","agent","agent","metadata-only","default",{package:"spur",subsystem:"fleet-strategy"}),baseEvent("fleet.capacity.changed","agent","agent","metadata-only","default",{package:"spur",subsystem:"write-slot"}),baseEvent("task.assigned","planning","planning"),baseEvent("history.import.completed","history","history-import"),baseEvent("history.analyze.completed","history","history-analyze"),baseEvent("history.daily.failed","history","history-daily"),baseEvent("history.refresh.enqueued","history","history-refresh"),baseEvent("rule.run.start","rule","rule"),baseEvent("rule.eval.start","rule","rule"),baseEvent("rule.eval.done","rule","rule"),baseEvent("rule.eval.error","rule","rule"),baseEvent("rule.run.done","rule","rule"),baseEvent("workflow.run.started","workflow","workflow-run"),baseEvent("workflow.run.done","workflow","workflow-run"),baseEvent("workflow.run.failed","workflow","workflow-run"),baseEvent("workflow.run.finalized","workflow","workflow-run"),baseEvent("workflow.escalation.created","workflow","workflow-run","redacted"),baseEvent("workflow.escalation.projection_failed","workflow","workflow-run","metadata-only"),baseEvent("workflow.run.paused","workflow","workflow-run"),baseEvent("workflow.run.resumed","workflow","workflow-run"),baseEvent("workflow.run.reseeded","workflow","workflow-run"),baseEvent("workflow.node.enter","workflow","workflow-phase"),baseEvent("workflow.phase","workflow","workflow-phase"),baseEvent("workflow.node.transition","workflow","workflow-transition"),baseEvent("workflow.transition","workflow","workflow-transition"),baseEvent("workflow.transition.requested","workflow","workflow-transition","metadata-only","diagnostic"),baseEvent("workflow.transition.denied","workflow","workflow-transition","metadata-only","diagnostic"),baseEvent("workflow.action.started","workflow","workflow-action"),baseEvent("workflow.action.finished","workflow","workflow-action"),baseEvent("workflow.action.failed_continue","workflow","workflow-action"),baseEvent("workflow.guard.evaluated","workflow","workflow-guard","metadata-only","diagnostic"),baseEvent("workflow.hitl.ask","workflow","workflow-hitl","redacted"),baseEvent("workflow.hitl.response","workflow","workflow-hitl","redacted"),baseEvent("workflow.hitl.note","workflow","workflow-hitl","redacted"),baseEvent("workflow.custom","workflow","workflow-custom"),baseEvent("workflow.agent","workflow","workflow-agent","redacted","diagnostic"),baseEvent("workflow.steering","workflow","workflow-steering","redacted"),baseEvent("api.request.error","api","api"),baseEvent("bus.emit.done","bus","bus","metadata-only","diagnostic"),baseEvent("bus.emit.noop","bus","bus","metadata-only","diagnostic"),baseEvent("bus.handler.error","bus","bus","metadata-only","diagnostic"),baseEvent("bus.handler.async.enqueued","bus","bus","metadata-only","diagnostic")],SYSTEM_EVENT_PRESENTERS={"task.created":{description:"A task file was created with a new WBS id.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity")],summary:({data,correlation})=>`[task] ${entityId({data,correlation})} created`,outcome:unsupported},"task.updated":{description:"An existing task file was updated in place, naming the section that changed.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("field","Field"),field("data.mutation.name","Section"),field("data.after","After"),field("data.diff","Diff")],summary:({data,correlation})=>{let section=s2(data,"data.mutation.name"),id=entityId({data,correlation});return section!==void 0?`[task] ${section}`:`[task] ${id||"updated"}`},outcome:unsupported},"task.transitioned":{description:"A task moved between lifecycle states, naming both the previous and new status.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("from","From"),field("to","To")],summary:({data,correlation})=>{let id=entityId({data,correlation}),from=s2(data,"from"),to=s2(data,"to");return from!==void 0&&to!==void 0?`[task] ${id} : ${from} -> ${to}`:`[task] ${id} transitioned`},outcome:{support:"derived",derive:({data})=>s2(data,"to")}},"feature.created":{description:"A feature file was created with a new feature id.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity")],summary:({data,correlation})=>`[feature] ${entityId({data,correlation})} created`,outcome:unsupported},"feature.updated":{description:"An existing feature file was updated in place, naming the section that changed.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("field","Field"),field("data.mutation.name","Section"),field("data.after","After"),field("data.diff","Diff")],summary:({data,correlation})=>{let section=s2(data,"data.mutation.name"),id=entityId({data,correlation});return section!==void 0?`[feature] ${section}`:`[feature] ${id||"updated"}`},outcome:unsupported},"feature.transitioned":{description:"A feature moved between lifecycle states, naming both the previous and new status.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("from","From"),field("to","To")],summary:({data,correlation})=>{let id=entityId({data,correlation}),from=s2(data,"from"),to=s2(data,"to");return from!==void 0&&to!==void 0?`[feature] ${id} : ${from} -> ${to}`:`[feature] ${id} transitioned`},outcome:{support:"derived",derive:({data})=>s2(data,"to")}},"queue.consumer.started":{description:"The configured queue consumer began polling its named queue.",fields:[field("queueName","Queue"),field("startedAt","Started"),field("pollInterval","Poll interval"),field("batchSize","Batch size"),field("maxConcurrency","Max concurrency"),field("visibilityTimeout","Visibility timeout")],summary:({data})=>{let name=s2(data,"queueName");return name!==void 0?`[queue] ${name} : consumer started`:"[queue] consumer started"},outcome:{support:"derived",derive:({data})=>at(data,"startedAt")!==void 0?"running":void 0}},"queue.consumer.stopped":{description:"The queue consumer stopped, reporting whether it drained in-flight work.",fields:[field("queueName","Queue"),field("stoppedAt","Stopped"),field("drainTimeoutMs","Drain timeout"),field("inFlightAtStop","In flight"),field("drained","Drained")],summary:({data})=>{let name=s2(data,"queueName");return name!==void 0?`[queue] ${name} : consumer stopped`:"[queue] consumer stopped"},outcome:{support:"derived",derive:({data})=>{let drained=at(data,"drained");if(drained===!0)return"drained";if(drained===!1)return"timeout";return}}},"queue.job.enqueued":{description:"A job was enqueued onto the job queue for later processing.",fields:[field("jobId","Job"),field("type","Type"),field("nextRetryAt","Next retry")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} enqueued`:"[queue] job enqueued"},outcome:unsupported},"queue.job.started":{description:"A queued job handler began executing (job identity and phase anchor).",fields:[field("jobId","Job"),field("type","Type"),field("name","Name")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} started`:"[queue] job started"},outcome:unsupported},"queue.job.completed":{description:"A queued job finished successfully with its attempt and duration.",fields:[field("jobId","Job"),field("type","Type"),field("attempt","Attempt"),field("durationMs","Duration (ms)")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} completed`:"[queue] job completed"},outcome:unsupported},"queue.job.failed":{description:"A queued job exhausted its attempts and failed with an error.",fields:[field("jobId","Job"),field("type","Type"),field("attempt","Attempt"),field("maxRetries","Max retries"),field("durationMs","Duration (ms)"),field("error","Error")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} failed`:"[queue] job failed"},outcome:derivedFrom("error")},"queue.job.retrying":{description:"A queued job failed once and is scheduled for another attempt.",fields:[field("jobId","Job"),field("type","Type"),field("attempt","Attempt"),field("maxRetries","Max retries"),field("nextRetryAt","Next retry"),field("error","Error")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} retrying`:"[queue] job retrying"},outcome:{support:"derived",derive:({data})=>{let attempt=at(data,"attempt"),max=at(data,"maxRetries");if(typeof attempt==="number"&&typeof max==="number"&&Number.isFinite(attempt)&&Number.isFinite(max))return`retrying ${attempt}/${max}`;return s2(data,"error")}}},"queue.stats":{description:"Periodic job-queue statistics across ready, running, completed, and failed counts.",fields:[field("ready","Ready"),field("running","Running"),field("completed","Completed"),field("failed","Failed")],summary:()=>"[queue] stats",outcome:unsupported},"scheduler.job.executed":{description:"A scheduler job ran to completion or failed, with its duration.",fields:[field("name","Job"),field("action","Action"),field("durationMs","Duration (ms)"),field("error","Error")],summary:({data})=>{let name=s2(data,"name");return name!==void 0?`[scheduler] ${name}`:"[scheduler] job executed"},outcome:{support:"derived",derive:({data})=>s2(data,"error")??(at(data,"error")===null?"completed":void 0)}},"message.sent":{description:"A team message was sent from one member to another.",fields:[field("msgId","Message"),field("fromId","From"),field("toId","To"),field("threadId","Thread")],summary:({data})=>{let from=s2(data,"fromId"),to=s2(data,"toId");return from!==void 0&&to!==void 0?`[message] ${from} -> ${to}`:"[message] sent"},outcome:unsupported},"message.replied":{description:"A member replied to an existing message thread.",fields:[field("msgId","Message"),field("fromId","From"),field("toId","To"),field("threadId","Thread")],summary:({data})=>{let from=s2(data,"fromId"),thread=s2(data,"threadId");return from!==void 0&&thread!==void 0?`[message] ${from} replied in ${thread}`:"[message] replied"},outcome:unsupported},"process.spawned":{description:"A supervised process was spawned with a new pid.",fields:[field("label","Label"),field("pid","PID"),field("agentId","Agent")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} spawned`:"[process] spawned"},outcome:unsupported},"process.exited":{description:"A supervised process exited, carrying its exit code, signal, or failure reason.",fields:[field("label","Label"),field("pid","PID"),field("exitCode","Exit code"),field("signal","Signal"),field("durationMs","Duration (ms)"),field("reason","Reason")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} exited`:"[process] exited"},outcome:{support:"derived",derive:({data})=>{let reason=s2(data,"reason");if(reason!==void 0)return reason;let signal=s2(data,"signal");if(signal!==void 0)return`signal ${signal}`;let code=at(data,"exitCode");if(typeof code==="number"&&Number.isFinite(code))return code===0?"ok":`exit ${code}`;return}}},"process.stopped":{description:"A supervised process was stopped, naming the stopping reason.",fields:[field("label","Label"),field("pid","PID"),field("signal","Signal"),field("reason","Reason")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} stopped`:"[process] stopped"},outcome:derivedFrom("reason")},"process.started":{description:"A process executor started a process with a new pid.",fields:[field("label","Label"),field("pid","PID")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} started`:"[process] started"},outcome:unsupported},"agent.invoke.start":{description:"An agent invocation began, naming the agent and its operation.",fields:[field("agent","Agent"),field("operation","Operation"),field("routing.role","Role"),field("routing.tier","Tier"),field("routing.executor","Executor"),field("routing.source","Selection source")],summary:({data})=>{let agent=s2(data,"agent"),operation=s2(data,"operation");return agent!==void 0&&operation!==void 0?`[agent] ${agent} · ${operation}`:"[agent] invocation started"},outcome:unsupported},"agent.invoke.exit":{description:"An agent invocation exited, reporting its exit code or signal.",fields:[field("agent","Agent"),field("operation","Operation"),field("exitCode","Exit code"),field("signal","Signal"),field("routing.role","Role"),field("routing.tier","Tier"),field("routing.executor","Executor"),field("routing.source","Selection source")],summary:({data})=>{let agent=s2(data,"agent"),operation=s2(data,"operation");return agent!==void 0&&operation!==void 0?`[agent] ${agent} · ${operation} exited`:"[agent] invocation exited"},outcome:{support:"derived",derive:({data})=>{let signal=s2(data,"signal");if(signal!==void 0)return`signal ${signal}`;let code=at(data,"exitCode");if(typeof code==="number"&&Number.isFinite(code))return code===0?"ok":`exit ${code}`;return}}},"agent.invoke.escalated":{description:"An agent invocation escalated from one executor tier to another.",fields:[field("fromExecutor","From executor"),field("fromTier","From tier"),field("toExecutor","To executor"),field("toTier","To tier"),field("trigger","Trigger")],summary:({data})=>{let from=s2(data,"fromExecutor"),to=s2(data,"toExecutor");return from!==void 0&&to!==void 0?`[agent] ${from} -> ${to}`:"[agent] escalation"},outcome:{support:"derived",derive:({data})=>s2(data,"toTier")??s2(data,"trigger")}},"agent.invoke.exhausted":{description:"An agent invocation exhausted every eligible executor tier without success.",fields:[field("stage","Stage"),field("attempts","Attempts"),field("fromTier","From tier"),field("toTier","To tier"),field("fromExecutor","From executor"),field("toExecutor","To executor")],summary:({data})=>{let stage=s2(data,"stage");return stage!==void 0?`[agent] ${stage} escalation exhausted`:"[agent] escalation exhausted"},outcome:derivedFromValue("attempts")},"agent.started":{description:"An agent started, carrying its id and type.",fields:[field("agentId","Agent"),field("agentType","Agent type"),field("pid","PID")],summary:({data})=>{let id=s2(data,"agentId");return id!==void 0?`[agent] ${id} started`:"[agent] started"},outcome:unsupported},"agent.stopped":{description:"An agent stopped, reporting its exit code.",fields:[field("agentId","Agent"),field("exitCode","Exit code")],summary:({data})=>{let id=s2(data,"agentId");return id!==void 0?`[agent] ${id} stopped`:"[agent] stopped"},outcome:derivedFromValue("exitCode")},"strategy.changed":{description:"A project strategy changed (0838), minting a new strategy version for dispatch fencing.",fields:[field("data.projectPath","Project"),field("data.strategy","Strategy"),field("data.version","Version")],summary:({data})=>{let strategy=s2(data,"data.strategy"),version3=s2(data,"data.version");return strategy!==void 0?`[strategy] ${strategy}${version3!==void 0?` (v${version3})`:""}`:"[strategy] changed"},outcome:unsupported},"fleet.capacity.changed":{description:"The project write slot was claimed or released (0837), changing dispatch capacity.",fields:[field("data.projectPath","Project"),field("data.change","Change"),field("data.holderId","Holder")],summary:({data})=>{let change=s2(data,"data.change"),holder=s2(data,"data.holderId");return`[fleet] write slot ${change??"changed"}${holder!==void 0?` — ${holder}`:""}`},outcome:unsupported},"agent.message.sent":{description:"A message was sent to an agent, reporting delivery success.",fields:[field("agentId","Agent"),field("ok","Delivered")],summary:({data})=>{let id=s2(data,"agentId");return id!==void 0?`[agent] message -> ${id}`:"[agent] message sent"},outcome:derivedFromValue("ok")},"task.assigned":{description:"A task was assigned to an agent, naming the agent when resolved.",fields:[field("memberId","Member"),field("agentType","Agent type"),field("taskId","Task"),field("outcome","Outcome")],summary:({data})=>{let member=s2(data,"memberId"),task=s2(data,"taskId");return task!==void 0&&member!==void 0?`[task] ${task} assigned to ${member}`:"[task] assignment recorded"},outcome:derivedFrom("outcome")},"history.import.completed":{description:"A history import finished, reporting files, messages, and exit code.",fields:[field("source","Source"),field("sources","Sources"),field("files","Files"),field("messages","Messages"),field("durationMs","Duration (ms)"),field("exitCode","Exit code"),field("artifactPath","Artifact"),field("cwd","Project root")],retain:[field("trigger","Refresh trigger"),field("windowStart","Refresh window start"),field("windowEnd","Refresh window end"),field("importMode","Import mode"),field("coverage","Refresh coverage")],summary:({data})=>{let source=s2(data,"source")??s2(data,"sources");return source!==void 0?`[history] import · ${source}`:"[history] import completed"},outcome:derivedFromValue("exitCode")},"history.analyze.completed":{description:"A history analyze pass finished, reporting sources, duration, and exit code.",fields:[field("source","Source"),field("sources","Sources"),field("durationMs","Duration (ms)"),field("exitCode","Exit code"),field("artifactPath","Artifact")],retain:[field("trigger","Refresh trigger"),field("windowStart","Refresh window start"),field("windowEnd","Refresh window end"),field("importMode","Import mode")],summary:({data})=>{let source=s2(data,"source")??s2(data,"sources");return source!==void 0?`[history] analyze · ${source}`:"[history] analyze completed"},outcome:derivedFromValue("exitCode")},"history.daily.failed":{description:"The daily history refresh failed, carrying the detail, reason, and exit code.",fields:[field("source","Source"),field("sources","Sources"),field("detail","Detail"),field("reason","Reason"),field("exitCode","Exit code")],retain:[field("trigger","Refresh trigger"),field("windowStart","Refresh window start"),field("windowEnd","Refresh window end"),field("importMode","Import mode")],summary:()=>"[history] daily failed",outcome:{support:"derived",derive:({data})=>s2(data,"reason")??s2(data,"detail")??n2(data,"exitCode")}},"history.refresh.enqueued":{description:"A completion-triggered history refresh was enqueued, naming its window.",fields:[field("trigger","Trigger"),field("triggerId","Trigger id"),field("jobId","Queue job"),field("windowStart","Window start"),field("windowEnd","Window end"),field("coalesced","Coalesced"),field("outcome","Outcome")],summary:({data})=>{let start=s2(data,"windowStart"),end=s2(data,"windowEnd");return start!==void 0&&end!==void 0?`[history] refresh · ${start} -> ${end}`:"[history] refresh enqueued"},outcome:{support:"derived",derive:({data})=>{let status=s2(data,"outcome");return status!==void 0&&status!=="enqueued"?status:void 0}}},"rule.run.start":{description:"A rule run began with the rule count it will evaluate.",fields:[field("runId","Run"),field("ruleCount","Rules"),field("evaluator","Evaluator")],summary:({data,correlation})=>{let run=s2(data,"runId")??correlation.runId;return run!==void 0?`[rule] run ${run} started`:"[rule] run started"},outcome:unsupported},"rule.eval.start":{description:"A single rule began evaluating.",fields:[field("runId","Run"),field("ruleId","Rule"),field("evaluator","Evaluator"),field("index","Index"),field("total","Total")],summary:({data})=>{let id=s2(data,"ruleId");return id!==void 0?`[rule] ${id} evaluating`:"[rule] evaluating"},outcome:unsupported},"rule.eval.done":{description:"A rule finished evaluating, reporting its findings count and severity.",fields:[field("runId","Run"),field("ruleId","Rule"),field("evaluator","Evaluator"),field("findings","Findings"),field("durationMs","Duration (ms)"),field("severity","Severity")],summary:({data})=>{let id=s2(data,"ruleId");return id!==void 0?`[rule] ${id} evaluated`:"[rule] evaluated"},outcome:derivedFromValue("findings")},"rule.eval.error":{description:"A rule evaluation failed with an error.",fields:[field("runId","Run"),field("ruleId","Rule"),field("evaluator","Evaluator"),field("error","Error")],summary:({data})=>{let id=s2(data,"ruleId");return id!==void 0?`[rule] ${id} error`:"[rule] error"},outcome:derivedFrom("error")},"rule.run.done":{description:"A rule run finished, reporting findings and whether it stopped early.",fields:[field("runId","Run"),field("findings","Findings"),field("durationMs","Duration (ms)"),field("stoppedEarly","Stopped early"),field("severity","Severity")],summary:({data,correlation})=>{let run=s2(data,"runId")??correlation.runId;return run!==void 0?`[rule] run ${run} done`:"[rule] run done"},outcome:{support:"derived",derive:({data})=>n2(data,"findings")??s2(data,"stoppedEarly")}},"workflow.run.started":{description:"A workflow run started, naming the workflow definition.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("mode","Mode"),field("dryRun","Dry run")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} started`:"[workflow] started"},outcome:unsupported},"workflow.run.done":{description:"A workflow run reached a done terminal state.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("finalState","Final state"),field("transitionsTaken","Transitions")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} done`:"[workflow] done"},outcome:derivedFrom("finalState")},"workflow.run.failed":{description:"A workflow run failed with a terminal failure reason.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("finalState","Final state"),field("reason","Reason")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} failed`:"[workflow] failed"},outcome:derivedFrom("reason")},"workflow.run.finalized":{description:"A workflow run settled on a terminal status.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("status","Status")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} finalized`:"[workflow] finalized"},outcome:derivedFrom("status")},"workflow.escalation.created":{description:"A canonical escalation packet was projected from existing run evidence.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("fingerprint","Fingerprint"),field("artifactPath","Artifact"),field("decision","Decision")],summary:(input)=>{let name=humanWorkflowTitle(input),decision=typeof at(input.data,"decision")==="string"?` — ${String(at(input.data,"decision"))}`:"";return name!==""?`[workflow] escalation packet created (${name}${decision})`:`[workflow] escalation packet created${decision}`},outcome:derivedFrom("decision")},"workflow.escalation.projection_failed":{description:"Escalation packet projection failed; the original failure is preserved untouched.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("error","Error")],summary:()=>"[workflow] escalation packet projection failed",outcome:derivedFrom("error")},"workflow.run.paused":{description:"A workflow run paused at a step, naming the step when available.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("transitionsTaken","Transitions")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} paused`:"[workflow] paused"},outcome:unsupported},"workflow.run.resumed":{description:"A paused workflow run resumed at a step, naming the step when available.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} resumed`:"[workflow] resumed"},outcome:unsupported},"workflow.run.reseeded":{description:"A workflow run was reseeded to a new state, naming the transition.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("fromState","From"),field("toState","To")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"fromState"),to=s2(input.data,"toState");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} : ${from} -> ${to}`:`[workflow] : ${from} -> ${to}`;return name!==""?`[workflow] ${name} reseeded`:"[workflow] reseeded"},outcome:derivedFrom("toState")},"workflow.node.enter":{description:"The engine entered a workflow node, naming the step when available.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("transitionsTaken","Transitions")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] node entered"},outcome:unsupported},"workflow.phase":{description:"A workflow phase changed status, naming the phase.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("phase","Phase"),field("status","Status")],summary:(input)=>{let name=humanWorkflowTitle(input),phase=s2(input.data,"phase"),parts=[name,phase].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] phase"},outcome:derivedFrom("status")},"workflow.node.transition":{description:"A workflow transitioned between nodes, naming the from and to states.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("trigger","Trigger")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} : ${from} -> ${to}`:`[workflow] : ${from} -> ${to}`;return name!==""?`[workflow] ${name} transitioned`:"[workflow] transitioned"},outcome:derivedFrom("to")},"workflow.transition":{description:"A workflow state transition was committed.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("trigger","Trigger")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} : ${from} -> ${to}`:`[workflow] : ${from} -> ${to}`;return name!==""?`[workflow] ${name} transitioned`:"[workflow] transitioned"},outcome:derivedFrom("to")},"workflow.transition.requested":{description:"A workflow transition was requested and accepted for evaluation.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("trigger","Trigger")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} requested ${from} -> ${to}`:`[workflow] requested ${from} -> ${to}`;return name!==""?`[workflow] ${name} transition requested`:"[workflow] transition requested"},outcome:unsupported},"workflow.transition.denied":{description:"A workflow transition was denied with a reason.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("reason","Reason")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} denied ${from} -> ${to}`:`[workflow] denied ${from} -> ${to}`;return name!==""?`[workflow] ${name} transition denied`:"[workflow] transition denied"},outcome:derivedFrom("reason")},"workflow.action.started":{description:"A workflow action began executing, naming the step and kind.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("actionId","Action"),field("kind","Kind")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} started`:"[workflow] action started"},outcome:unsupported},"workflow.action.finished":{description:"A workflow action finished, reporting its status and success.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("actionId","Action"),field("kind","Kind"),field("durationMs","Duration (ms)"),field("status","Status")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} finished`:"[workflow] action finished"},outcome:{support:"derived",derive:({data})=>s2(data,"status")??n2(data,"ok")}},"workflow.action.failed_continue":{description:"A workflow action failed but the workflow continued, carrying the error.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("transitionsTaken","Transitions"),field("error","Error")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} failed; continuing`:"[workflow] action failed; continuing"},outcome:derivedFrom("error")},"workflow.guard.evaluated":{description:"A workflow guard was evaluated for a transition, reporting whether it passed.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("kind","Kind"),field("passed","Passed")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} guard ${from} -> ${to}`:`[workflow] guard ${from} -> ${to}`;return name!==""?`[workflow] ${name} guard evaluated`:"[workflow] guard evaluated"},outcome:derivedFromValue("passed")},"workflow.hitl.ask":{description:"A workflow paused for human input, naming the step and kind.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("kind","Kind")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} awaiting input`:"[workflow] awaiting input"},outcome:unsupported},"workflow.hitl.response":{description:"Human input was received for a paused workflow step.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("ok","Accepted")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} input received`:"[workflow] input received"},outcome:derivedFromValue("ok")},"workflow.hitl.note":{description:"A note was recorded on a paused workflow step.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} note`:"[workflow] note"},outcome:unsupported},"workflow.custom":{description:"A custom workflow event was emitted, naming the custom event.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("name","Event")],summary:(input)=>{let name=humanWorkflowTitle(input),custom3=s2(input.data,"name"),parts=[name,custom3].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] custom"},outcome:unsupported},"workflow.agent":{description:"A workflow-dispatched agent execution lifecycle event, discriminated by kind.",fields:[field("runId","Run"),field("executionId","Execution"),field("actionId","Action"),field("kind","Kind"),field("agent","Agent"),field("model","Model")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),kind=s2(input.data,"kind"),parts=[name,kind!==void 0?`agent ${kind}`:"agent"].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] agent"},outcome:{support:"derived",derive:({data})=>s2(data,"kind")==="finished"?s2(data,"outcome"):void 0}},"workflow.steering":{description:"A steering command was acknowledged for a workflow action boundary.",fields:[field("runId","Run"),field("actionId","Action"),field("operation","Operation"),field("actor","Actor"),field("accepted","Accepted"),field("state","State"),field("reason","Reason")],summary:(input)=>{let name=humanWorkflowTitle(input),operation=s2(input.data,"operation"),parts=[name,operation!==void 0?`steering ${operation}`:"steering"].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] steering"},outcome:{support:"derived",derive:({data})=>{let reason=s2(data,"reason");if(reason!==void 0)return reason;let accepted=at(data,"accepted");if(accepted===!0)return"accepted";if(accepted===!1)return"rejected";return s2(data,"state")}}},"api.request.error":{description:"An API request failed, naming the method, path, and status or error code.",fields:[field("method","Method"),field("path","Path"),field("status","Status"),field("code","Code"),field("requestId","Request"),field("error","Error")],summary:({data})=>{let method=s2(data,"method"),path8=s2(data,"path");return method!==void 0&&path8!==void 0?`[api] ${method} ${path8}`:"[api] request error"},outcome:{support:"derived",derive:({data})=>s2(data,"error")??s2(data,"code")??n2(data,"status")}},"bus.emit.done":{description:"An event was emitted to its handlers on the event bus.",fields:[field("event","Event"),field("handlers","Handlers"),field("durationMs","Duration (ms)")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} emitted`:"[bus] event emitted"},outcome:derivedFromValue("handlers")},"bus.emit.noop":{description:"An event was emitted but had no registered handlers.",fields:[field("event","Event"),field("handlers","Handlers"),field("durationMs","Duration (ms)")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} had no handlers`:"[bus] event had no handlers"},outcome:derivedFromValue("handlers")},"bus.handler.error":{description:"An event-bus handler threw an error while processing an event.",fields:[field("event","Event"),field("handlers","Handlers"),field("durationMs","Duration (ms)"),field("error","Error")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} handler error`:"[bus] handler error"},outcome:derivedFrom("error")},"bus.handler.async.enqueued":{description:"An event-bus handler was enqueued for asynchronous processing.",fields:[field("event","Event"),field("handlers","Handlers")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} handlers enqueued`:"[bus] handlers enqueued"},outcome:derivedFromValue("handlers")}};function inferSeverity(name){if(/(?:failed|error|denied)$/.test(name))return"error";if(/(?:retrying|paused|dropped)$/.test(name))return"warning";return"info"}function resolveCatalogEntry(base2){let profile=SOURCE_PROFILES[base2.source],presenter=SYSTEM_EVENT_PRESENTERS[base2.name];return{name:base2.name,prefix:base2.name.split(".")[0]??base2.name,source:base2.source,tier:base2.tier,persisted:!0,streamed:!0,payloadPolicy:base2.payloadPolicy,renderer:base2.renderer,...profile,...base2.producer!==void 0?{producerPackage:base2.producer.package,subsystem:base2.producer.subsystem}:{},severity:inferSeverity(base2.name),description:presenter.description,metadataFields:presenter.retain?[...presenter.fields,...presenter.retain.filter((r)=>!presenter.fields.some((f)=>f.path===r.path))]:presenter.fields,remediationKind:profile.remediationKind}}var SYSTEM_EVENT_CATALOG=BASE_CATALOG.map(resolveCatalogEntry),SYSTEM_EVENT_NAMES=SYSTEM_EVENT_CATALOG.map((entry)=>entry.name),SYSTEM_EVENT_PERSISTED_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="default").map((entry)=>entry.name),SYSTEM_EVENT_STREAMED_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="default").map((entry)=>entry.name),SYSTEM_EVENT_PREFIXES=Array.from(new Set(SYSTEM_EVENT_CATALOG.map((entry)=>entry.prefix))),SYSTEM_EVENT_DEFAULT_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="default").map((entry)=>entry.name),SYSTEM_EVENT_DIAGNOSTIC_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="diagnostic").map((entry)=>entry.name);var SYSTEM_EVENT_CATALOG_METADATA=SYSTEM_EVENT_CATALOG.map(({name,prefix,source,tier,renderer,producerPackage,subsystem,severity,description,metadataFields,remediationKind})=>({name,prefix,source,tier,renderer,producerPackage,subsystem,severity,description,metadataFields,remediationKind}));function workflowVersionLiteral(workflow){return typeof workflow.version==="string"&&workflow.version!==""?workflow.version:null}var{mkdirSync:mkdirSync2}=await import("node:fs");function parseIdentityMetadata(raw){if(raw.trim()==="")return{};try{let parsed=JSON.parse(raw);if(parsed===null||typeof parsed!=="object"||Array.isArray(parsed))return null;return parsed}catch{return null}}async function openInlineRunProjectDb(workdir){let url2=join5(resolve4(workdir),".spur","spur.db");mkdirSync2(join5(url2,".."),{recursive:!0});let adapter=await createMigratedDb({url:url2});return{adapter,close:()=>adapter.close()}}async function createOrAttachInlineRun(input){let runId=input.runId.trim();if(runId==="")return{ok:!1,error:"inline run setup requires a non-empty runId (driver Run setup step 2)"};let workdir=resolve4(input.workdir),resolved;try{let projection=input.inventory===void 0?void 0:parseWorkflowInventory(input.inventory);if(projection&&!projection.ok)return projection;let inventory=projection?.ok?projection.inventory:void 0;if(inventory&&(!inventory.source||inventory.kind!=="state-machine"))return{ok:!1,error:"inline run setup requires a state-machine inventory with definition source"};if(resolved=await resolveWorkflowDefinition(workdir,inventory?.source?.path??input.file,{validateSchema:!0,...input.embeddedSchemas!==void 0?{embeddedSchemas:input.embeddedSchemas}:{},...!inventory?{registered:input.registered}:{}}),(resolved.workflow.kind??"state-machine")!=="state-machine")return{ok:!1,error:"inline run setup requires a state-machine definition"};if(inventory?.source){let identity4=assertInventoryIdentity(inventory,resolved.digest);if(!identity4.ok)return identity4;if(inventory.name!==resolved.workflow.name)return{ok:!1,error:"inline run setup: inventory workflow name does not match its definition"};resolved={...resolved,layer:inventory.source.layer}}}catch(error51){return{ok:!1,error:`inline run setup could not resolve the workflow definition: ${error51.message}`}}let digest=resolved.digest,version3=workflowVersionLiteral(resolved.workflow),source={path:resolved.path,layer:resolved.layer,workdir},db2=await input.getDb(),existing=await new RunDao(db2).traceRowById(runId);if(existing!==void 0){let metadata=parseIdentityMetadata(existing.metadata_json);if(metadata===null)return{ok:!1,error:`inline run setup refuses run ${runId}: its existing row has malformed metadata_json, `+"so its identity cannot be verified — delete the stale run row or allocate a new run id"};let resumeDigest=typeof metadata.resumeDefinitionDigest==="string"?metadata.resumeDefinitionDigest:void 0,launchDigest=typeof metadata.definitionDigest==="string"?metadata.definitionDigest:void 0,effectiveDigest=resumeDigest??launchDigest;if(effectiveDigest===void 0)return{ok:!1,error:`inline run setup refuses run ${runId}: its existing row carries no definition digest `+"(pre-identity legacy row) — allocate a new run id instead of attaching an unverifiable identity"};if(effectiveDigest!==digest)return{ok:!1,error:`inline run setup refuses run ${runId}: the resolved definition digest (${digest}) does not match the run's recorded ${resumeDigest!==void 0?"resume":""} digest (${effectiveDigest}) — `+"a changed definition must resume through the explicit resume rules, not silently re-attach"};if(existing.workflow_name!==resolved.workflow.name)return{ok:!1,error:`inline run setup refuses run ${runId}: the run row records workflow "${existing.workflow_name}" but the resolved definition is "${resolved.workflow.name}" — conflicting run identity`};if(typeof metadata.definitionSource!=="object"||metadata.definitionSource===null||Array.isArray(metadata.definitionSource))return{ok:!1,error:`inline run setup refuses run ${runId}: its existing row carries no definition source `+"(path/layer/workdir) — allocate a new run id instead of attaching an unverifiable launch source"};let existingSource=metadata.definitionSource;if(!(typeof existingSource.path==="string"&&resolve4(existingSource.path)===resolved.path&&normalizePersistedWorkflowLayer(existingSource.layer)===resolved.layer&&typeof existingSource.workdir==="string"&&resolve4(existingSource.workdir)===workdir))return{ok:!1,error:`inline run setup refuses run ${runId}: the recorded definition source (${JSON.stringify(existingSource)}) does not match the resolved launch source (${JSON.stringify(source)}) — conflicting project/workdir identity`};return{ok:!0,attached:!0,runId,workflowName:resolved.workflow.name,definitionDigest:digest,workflowVersion:version3,resolvedPath:resolved.path,layer:resolved.layer,workdir,status:existing.status}}return await new WorkflowService(createDefaultWorkflowEngineHost(),new DbWorkflowPersistenceAdapter(db2)).createOrAttachRun({id:runId,workflow_name:resolved.workflow.name,mode:"state-machine",status:"running",started_at:new Date().toISOString(),completed_at:null,metadata_json:JSON.stringify({definitionDigest:digest,workflowVersion:version3,definitionSource:source})}),{ok:!0,attached:!1,runId,workflowName:resolved.workflow.name,definitionDigest:digest,workflowVersion:version3,resolvedPath:resolved.path,layer:resolved.layer,workdir,status:"running"}}import{basename as basename2,join as join6}from"node:path";var FEATURE_RECEIPT_SCHEMA_VERSION=1,DEFAULT_FEATURE_VERIFICATION_CMD="bun run spur-check-feature",RECEIPT_ID_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function assertReceiptId(kind,id){if(!RECEIPT_ID_PATTERN.test(id)||id.includes(".."))throw Error(`invalid ${kind} for receipt path: ${JSON.stringify(id)}`)}function featureReceiptPaths(runDir,featureId2,runId){return assertReceiptId("featureId",featureId2),assertReceiptId("runId",runId),{runScoped:join6(runDir,`${runId}-feature-verification.json`),featureScoped:join6(runDir,`${featureId2}-feature-verification.json`),log:join6(runDir,`${runId}-feature-verification.log`),status:join6(runDir,`${runId}-feature-verification.status`)}}async function atomicWriteReceipt(fs2,path8,receipt){let body=`${JSON.stringify(receipt,null,4)}
1482
+ `:this._frontmatterBlock.slice(0,rawStart)+raw+this._frontmatterBlock.slice(rawStart+oldRaw.length)}serialize(){let result=this._frontmatterBlock;result+=this._preamble;for(let section of this._sections)result+=section.modifiedText??section.originalText;return result}}function escapeYamlArrayElement(value){return`"${value.replace(/\\/g,"\\\\").replace(/"/g,"\\\"")}"`}function escapeYamlValue(value){if(value.startsWith('"')&&value.endsWith('"'))return value;if(/[:{}[\],&*?|>!%@`#"'\\\n\r]/.test(value))return`"${value.replace(/\\/g,"\\\\").replace(/"/g,"\\\"")}"`;if(/^(null|true|false|yes|no|on|off)$/i.test(value))return`"${value}"`;if(/^\d/.test(value)&&!/^\d{4}-\d{2}-\d{2}/.test(value))return`"${value}"`;return value}init_zod();var TASK_STATUSES=["backlog","todo","wip","testing","blocked","done","cancelled"],FEATURE_STATUSES=["backlog","active","verifying","blocked","done","cancelled"];var PRIORITIES=["P0","P1","P2","P3"],PROFILES=["simple","standard","complex","research","refine","plan","unit","review","docs"],TASK_TYPES=["task","issue","review","meta","brainstorm"],TASK_VARIANTS=["standard","feature-impl","issue","review","meta","brainstorm"];var FEATURE_ID_PATTERN=/^[A-Z][1-9]*$/;var TASK_STATUS_ALIASES={completed:"done",complete:"done","in-progress":"wip","in progress":"wip",in_progress:"wip",dropped:"cancelled",cancel:"cancelled",canceled:"cancelled",new:"backlog",pending:"backlog",blocked:"blocked",wip:"wip",testing:"testing",done:"done",cancelled:"cancelled",backlog:"backlog",todo:"todo"};function normalizeTaskStatus(raw){let key=raw.trim().toLowerCase(),resolved=TASK_STATUS_ALIASES[key];if(resolved===void 0)throw Error(`Unknown task status: ${JSON.stringify(raw)} (allowed: ${TASK_STATUSES.join(", ")})`);return resolved}var isoDateString=exports_external.string().min(1).refine((value)=>!Number.isNaN(Date.parse(value)),{message:"must be an ISO 8601 timestamp"}),featureId=exports_external.string().regex(FEATURE_ID_PATTERN,{message:"feature id must match ^[A-Z][1-9]*$ (DD-14)"}).nullable().optional(),wbsString=exports_external.string().regex(/^\d{4}$/,{message:"parent_wbs must be a 4-digit WBS string"}).nullable().optional(),taskFrontmatterSchema=exports_external.object({schema_version:exports_external.literal(1),name:exports_external.string().min(1),description:exports_external.string().optional(),status:exports_external.preprocess((val)=>{if(typeof val==="string")try{return normalizeTaskStatus(val)}catch{}return val},exports_external.enum(TASK_STATUSES)),type:exports_external.enum(TASK_TYPES).optional().default("task"),template:exports_external.enum(TASK_VARIANTS).optional(),profile:exports_external.enum(PROFILES).optional(),feature_id:featureId,parent_wbs:wbsString,priority:exports_external.enum(PRIORITIES).optional(),tags:exports_external.array(exports_external.string()).optional(),dependencies:exports_external.array(exports_external.string()).optional(),ac_numbering:exports_external.literal("task-local").optional(),ac_altitude:exports_external.enum(["graduating","task-local"]).optional(),done_forced:exports_external.preprocess((v)=>typeof v==="string"?v==="true":v,exports_external.boolean().optional()),done_reason:exports_external.string().optional(),feature_link_declined:exports_external.preprocess((v)=>typeof v==="string"?v==="true":v,exports_external.boolean().optional()),estimate_hours:exports_external.preprocess((v)=>typeof v==="string"&&v.trim()!==""?Number(v):v,exports_external.number().positive().optional()),created_at:isoDateString,updated_at:isoDateString}),featureFrontmatterSchema=exports_external.object({schema_version:exports_external.literal(1),id:exports_external.string().regex(FEATURE_ID_PATTERN,{message:"feature id must match ^[A-Z][1-9]*$ (DD-14)"}),name:exports_external.string().min(1),status:exports_external.enum(FEATURE_STATUSES),priority:exports_external.enum(PRIORITIES).optional(),tags:exports_external.array(exports_external.string()).optional(),created_at:isoDateString,updated_at:isoDateString});var taskBatchItemSchema=exports_external.object({name:exports_external.string().min(1,"name is required"),background:exports_external.string().optional(),requirements:exports_external.string().optional(),design:exports_external.string().optional(),plan:exports_external.string().optional(),acceptance_criteria:exports_external.string().optional(),feature_id:featureId,parent_wbs:wbsString,priority:exports_external.enum(PRIORITIES).optional(),tags:exports_external.array(exports_external.string()).optional(),template:exports_external.enum(TASK_VARIANTS).optional(),estimate_hours:exports_external.number().positive().optional()}).strict(),taskBatchSchema=exports_external.array(taskBatchItemSchema).min(1,"batch must contain at least one task");init_dist2();init_zod();var sectionNameSchema=exports_external.enum(TASK_CANONICAL_SECTIONS),matrixEntrySchema=exports_external.object({required:exports_external.array(sectionNameSchema).optional(),optional:exports_external.array(sectionNameSchema).optional(),forbidden:exports_external.array(sectionNameSchema).optional(),gate:exports_external.boolean().optional()}).strict(),matrixStatusSchema=exports_external.enum(["backlog","todo","wip","testing","blocked","done","cancelled"]),sectionMatrixSchema=exports_external.object({variants:exports_external.record(exports_external.string(),exports_external.partialRecord(matrixStatusSchema,matrixEntrySchema))}).strict();var CANONICAL_INDEX=new Map(TASK_CANONICAL_SECTIONS.map((s2,i2)=>[s2,i2]));init_dist6();init_zod();import{join}from"node:path";init_dist9();var SECRET_PATTERN=/(?:sk-[a-z0-9_-]{8,}|(?:api[_-]?key|token|secret|password)\s*[:=]\s*\S+|bearer\s+\S+)/gi;function redactAndBound(value,secrets,maxChars){let redacted=value.replace(SECRET_PATTERN,"[REDACTED]");for(let secret of secrets)if(secret!=="")redacted=redacted.split(secret).join("[REDACTED]");return redacted.length<=maxChars?redacted:`${redacted.slice(0,maxChars)}…`}import{createHash as createHash3}from"node:crypto";import crypto3 from"node:crypto";function canonicalJsonStringify(obj){if(obj===null||typeof obj!=="object")return JSON.stringify(obj);if(Array.isArray(obj))return`[${obj.map(canonicalJsonStringify).join(",")}]`;return`{${Object.keys(obj).sort().map((key)=>`${JSON.stringify(key)}:${canonicalJsonStringify(obj[key])}`).join(",")}}`}function computeDefinitionDigest(workflow){let canonical=canonicalJsonStringify(workflow);return`sha256:${crypto3.createHash("sha256").update(canonical,"utf8").digest("hex")}`}function evidencePayloadDigest(payload){return`sha256:${createHash3("sha256").update(canonicalJsonStringify(payload),"utf8").digest("hex")}`}async function defaultDecisionMaker(){return(await Promise.resolve().then(() => (init_dist9(),exports_dist3))).createDecisionMaker({timeoutMs:15000,maxRetries:0})}var DEFAULT_MIN_CONFIDENCE=0.8,NOUL_YES_THRESHOLD=0.5,DECIDE_EVIDENCE_MAX_CHARS=2000;async function runDecide(options,deps){let started=deps.now(),base2={schemaVersion:1,id:options.id,method:options.method},degraded=(reason,backend=null,confidence=null,evidenceDigest2=null)=>({...base2,value:options.default,backend,confidence,degraded:!0,reason,source:"default",evidenceDigest:evidenceDigest2,durationMs:deps.now()-started});if(!deps.enabled)return degraded("disabled");let maker;try{maker=deps.decisionMaker?await deps.decisionMaker():await defaultDecisionMaker()}catch{return degraded("no-backend")}let evidence=[],evidenceDigest=null;if(options.evidence!==void 0&&options.evidence.length>0)try{evidence=await Promise.all(options.evidence.map(async(path8)=>redactAndBound(await deps.readFile(path8),[],DECIDE_EVIDENCE_MAX_CHARS))),evidenceDigest=evidencePayloadDigest(evidence)}catch{return degraded("error")}let state={id:options.id,evidence},minConfidence=options.minConfidence??DEFAULT_MIN_CONFIDENCE;try{if(options.method==="choice"){let labels=Object.fromEntries((options.choices??[]).map((c3)=>[c3,c3])),answer2=await maker.choice(state,options.question,labels);if(!(answer2.label in labels))return degraded("error",maker.driver,answer2.confidence,evidenceDigest);if(answer2.confidence<minConfidence)return degraded("low-confidence",maker.driver,answer2.confidence,evidenceDigest);return{...base2,value:answer2.label,backend:maker.driver,confidence:answer2.confidence,degraded:!1,reason:"accepted",source:"model",evidenceDigest,durationMs:deps.now()-started}}let confidence=(await maker.noul(state,options.question)).probability;if(confidence<minConfidence)return degraded("low-confidence",maker.driver,confidence,evidenceDigest);return{...base2,value:confidence>=NOUL_YES_THRESHOLD?"yes":"no",backend:maker.driver,confidence,degraded:!1,reason:"accepted",source:"model",evidenceDigest,durationMs:deps.now()-started}}catch(error51){return degraded(error51 instanceof DecisionTimeoutError?"timeout":"error",maker.driver,null,evidenceDigest)}}var DECIDE_KIND="decide",DecideOptionsSchema=exports_external.object({id:exports_external.string().min(1),method:exports_external.enum(["choice","noul"]),question:exports_external.string().min(1),choices:exports_external.array(exports_external.string().min(1)).min(2).optional(),evidence:exports_external.array(exports_external.string().min(1)).optional(),default:exports_external.string().min(1),minConfidence:exports_external.number().min(0).max(1).optional(),resultFile:exports_external.string().min(1)}).strict().superRefine((options,ctx)=>{if(options.method==="choice"){if(options.choices===void 0)ctx.addIssue({code:"custom",message:"choices is required for method choice (at least 2 labels)"});else if(!options.choices.includes(options.default))ctx.addIssue({code:"custom",message:`default "${options.default}" is not one of choices [${options.choices.join(", ")}]`});return}if(options.choices!==void 0)ctx.addIssue({code:"custom",message:"choices is only valid for method choice; noul uses the engine yes/no outcomes"});if(options.default!=="yes"&&options.default!=="no")ctx.addIssue({code:"custom",message:'default must be "yes" or "no" for method noul'})});class DecideActionRunner{fileSystem;deps;kind=DECIDE_KIND;constructor(fileSystem,deps){this.fileSystem=fileSystem;this.deps=deps}async execute(rawOptions,context4){let parsed=DecideOptionsSchema.safeParse(rawOptions);if(!parsed.success)return{ok:!1,error:`${DECIDE_KIND}: invalid options — ${parsed.error.issues.map((i2)=>i2.message).join("; ")}`};let options=parsed.data,workdir=context4.workdir??".",result=await runDecide({...options,...options.evidence!==void 0?{evidence:options.evidence.map((path8)=>join(workdir,path8))}:{},resultFile:join(workdir,options.resultFile)},{enabled:this.deps.enabled,...this.deps.decisionMaker!==void 0?{decisionMaker:this.deps.decisionMaker}:{},readFile:async(path8)=>await this.fileSystem.readFile(path8),now:Date.now.bind(Date)});return await this.fileSystem.writeFile(join(workdir,options.resultFile),`${JSON.stringify(result,null,2)}
1483
+ `),{ok:!0,data:{value:result.value,decision:result}}}}class InvalidWorkflowRunIdError extends Error{code="invalid-run-id";constructor(runId){super(`Invalid workflow run id: ${JSON.stringify(runId)}`);this.name="InvalidWorkflowRunIdError"}}function parseWorkflowInventory(json3){if(typeof json3!=="object"||json3===null)return{ok:!1,error:"workflow inventory: projection is not an object"};let obj=json3,name=typeof obj.name==="string"?obj.name:"",kind=typeof obj.kind==="string"?obj.kind:"",format2=typeof obj.format==="string"?obj.format:"",version3=typeof obj.version==="string"||typeof obj.version==="number"?String(obj.version):"",definitionDigest=typeof obj.definitionDigest==="string"?obj.definitionDigest:"",source;if(obj.source!==void 0){if(typeof obj.source!=="object"||obj.source===null)return{ok:!1,error:"workflow inventory: invalid definition source"};let value=obj.source;if(typeof value.path!=="string"||value.path===""||typeof value.layer!=="string"||!["project","registered","shared"].includes(value.layer))return{ok:!1,error:"workflow inventory: invalid definition source path/layer"};source={path:value.path,layer:value.layer}}if(name==="")return{ok:!1,error:"workflow inventory: missing name"};if(kind==="")return{ok:!1,error:"workflow inventory: missing kind"};if(definitionDigest==="")return{ok:!1,error:"workflow inventory: missing definitionDigest"};if(!Array.isArray(obj.steps)||obj.steps.length===0)return{ok:!1,error:"workflow inventory: no declared steps"};let steps=[];for(let raw of obj.steps){if(typeof raw!=="object"||raw===null)return{ok:!1,error:"workflow inventory: a step is not an object"};let s2=raw;if(typeof s2.id!=="string"||s2.id==="")return{ok:!1,error:"workflow inventory: a step is missing its id"};steps.push({id:s2.id,initial:s2.initial===!0,terminal:s2.terminal===!0,failure:s2.failure===!0,pause:s2.pause===!0,loopBack:s2.loopBack===!0,conditional:s2.conditional===!0,...typeof s2.nodeType==="string"?{nodeType:s2.nodeType}:{},...typeof s2.description==="string"?{description:s2.description}:{}})}return{ok:!0,inventory:{name,kind,format:format2,version:version3,definitionDigest,steps,...source?{source}:{}}}}function assertInventoryIdentity(inventory,expectedDigest){if(expectedDigest==="")return{ok:!1,error:"workflow inventory: no expected definition digest to bind against"};if(inventory.definitionDigest!==expectedDigest)return{ok:!1,error:`workflow inventory: identity drift — projected ${inventory.definitionDigest} ≠ execution ${expectedDigest}`};return{ok:!0}}import{basename,isAbsolute,join as join4,resolve as resolve2}from"node:path";init_dist6();init_dist();init_dist2();init_zod();import{existsSync as existsSync3,statSync as statSync4}from"node:fs";import{homedir}from"node:os";import{dirname as dirname3,join as join3,resolve}from"node:path";import{fileURLToPath as fileURLToPath3}from"node:url";init_zod();var RFC3339_PATTERN=/^\d{4}-\d{2}-\d{2}[Tt]\d{2}:\d{2}:\d{2}(\.\d+)?([Zz]|[+-]\d{2}:\d{2})$/;function isRfc3339Timestamp(value){return RFC3339_PATTERN.test(value)&&Number.isFinite(Date.parse(value))}var ALL_FINDING_CODES=["L1.markdown-parse","L1.schema-validation","L2.missing-required-section","L2.forbidden-section","L2.disallowed-section","L2.heading-level","L2.section-order","L3.requirements-format","L3.requirements-checkbox","L3.requirements-empty","L3.ac-empty","L3.ac-requirement-coverage","L3.solution-file-line","L3.review-priority-table","L3.required-section-placeholder","L3.plan-format","L3.unchecked-checklist","L3.ac-checklist-text","L3.ac-bdd-error","L3.ac-bdd-warning","L3.ac-bdd-invalid","L3.scope-delineation","L3.one-active-goal","L3.children-limit","L3.review-testing-contradiction","L4.design-placeholder","L4.feature-not-found","L4.feature-terminal","L4.missing-feature-id","L4.parent-not-found","L4.dependency-not-found","L4.rollup-subtasks-open","L4.rollup-parent-open","L4.rollup-missing-roster","L4.rollup-roster-not-declared-dependency","L4.readiness-blocked","L4.prose-prerequisite-unlisted","L4.prerequisite-cycle","L4.prerequisite-not-done","L4.gate-language","L4.linked-task-parse-failed","L4.orphan-scenarios","L4.uncovered-task-scenario","L4.uncovered-feature-scenario","L4.verdict-rows-match-no-scenario","L4.verifying-incomplete-tasks","L4.dogfood-missing","L4.stale-line-anchor","L4.anchor-subject-mismatch","L4.malformed-verdict-artifact","L4.scenario-unverified","L4.testing-verdict-stub","L4.evidence-not-recoverable","L4.feature-receipt-missing","L4.feature-receipt-malformed","L4.feature-receipt-cross-feature","L4.feature-receipt-divergent","L4.feature-receipt-failed","L4.feature-receipt-run","L4.feature-receipt-stale","L4.feature-receipt-contract"];function isFindingCode(code){return ALL_FINDING_CODES.includes(code)}init_dist();init_zod();var projectEntrySchema=exports_external.object({name:exports_external.string().min(1),path:exports_external.string().min(1),port:exports_external.number().int().nonnegative().default(0)}),projectsFileSchema=exports_external.object({schema_version:exports_external.literal(1).default(1),projects:exports_external.array(projectEntrySchema).default([])});init_zod();var slashCommandCategorySchema=exports_external.enum(["git","dev","sys","harness"]),slashCommandItemSchema=exports_external.object({name:exports_external.string().min(1),description:exports_external.string().min(1),category:slashCommandCategorySchema.default("dev"),argumentHint:exports_external.string().optional(),tags:exports_external.array(exports_external.string()).default([]),role:exports_external.string().optional(),source:exports_external.string().optional()}),slashCommandsFileSchema=exports_external.object({version:exports_external.number().int().default(1),updatedAt:exports_external.string().optional(),commands:exports_external.array(slashCommandItemSchema).default([])});var SPUR_LOG_LEVELS=["debug","info","warn","error"],DEFAULT_TASKS_DIR="docs/tasks",DEFAULT_FEATURES_DIR="docs/features",DEFAULT_DATABASE_URL=".spur/spur.db";var folderConfigSchema=exports_external.object({baseCounter:exports_external.number().int().nonnegative().default(0),label:exports_external.string().optional()});function folderPathWithDefault(defaultPath){return exports_external.preprocess((v)=>v==null?void 0:v,exports_external.string().default(defaultPath))}var tasksConfigSchema=exports_external.object({folders:exports_external.record(exports_external.string(),folderConfigSchema).default({}),active:folderPathWithDefault(DEFAULT_TASKS_DIR),severity:exports_external.record(exports_external.string(),exports_external.enum(["error","warning","off"])).optional()}).superRefine((data,ctx)=>{if(data.severity){for(let code of Object.keys(data.severity))if(!isFindingCode(code))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["severity",code],message:`Unknown finding code "${code}" in severity overrides map`})}}),featuresConfigSchema=exports_external.object({dir:folderPathWithDefault(DEFAULT_FEATURES_DIR)}),EXECUTOR_CAPABILITY_TIERS=["cheap","standard","capable-1","capable-2","capable-3"];function normalizeExecutorTier(value){return value==="capable"?"capable-1":value}var executorCapabilityTierSchema=exports_external.preprocess((value)=>{if(value===void 0||value===null)return;return typeof value==="string"?normalizeExecutorTier(value):value},exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional()),AGENT_ROLE_NAMES=["scribe","coder","reviewer","planner"];var EXECUTION_CAPABILITY_AXES=["fsRead","fsWrite","networkEgress","processSpawn","externalMutationApproval"],SESSION_CAPABILITY_AXES=["resumeById","sessionDir","persistentStdin","structuredOutput"],AGENT_RUN_CAPABILITY_AXES=[...EXECUTION_CAPABILITY_AXES,...SESSION_CAPABILITY_AXES],EXECUTION_CAPABILITY_STATES=["enforced","available","unavailable","unknown"],EXECUTION_CAPABILITY_PROVENANCES=["native-known","operator-configured","unattested"],ExecutionCapabilityAttestationSchema=exports_external.object({state:exports_external.enum(EXECUTION_CAPABILITY_STATES),provenance:exports_external.enum(EXECUTION_CAPABILITY_PROVENANCES)}),ExecutionCapabilitiesSchema=exports_external.object({version:exports_external.literal(1),axes:exports_external.partialRecord(exports_external.enum(EXECUTION_CAPABILITY_AXES),ExecutionCapabilityAttestationSchema)}),EXECUTION_CAPABILITY_REQUIREMENTS=["available","enforced"],RequiresCapabilitiesSchema=exports_external.partialRecord(exports_external.enum(AGENT_RUN_CAPABILITY_AXES),exports_external.enum(EXECUTION_CAPABILITY_REQUIREMENTS)),executorAvailabilityOwnerSchema=exports_external.enum(["operator","quota","probe"]),executorDisabledObjectSchema=exports_external.object({owner:executorAvailabilityOwnerSchema,since:exports_external.string().refine(isRfc3339Timestamp,{message:"since must be an RFC 3339 timestamp"}),reason:exports_external.string().min(1)}),AgentExecutorConfigSchema=exports_external.object({name:exports_external.string().min(1),agent:exports_external.string().min(1),model:exports_external.string().min(1).optional(),tier:executorCapabilityTierSchema.optional(),executionCapabilities:ExecutionCapabilitiesSchema.optional(),disabled:exports_external.union([exports_external.boolean(),executorDisabledObjectSchema]).default(!1)});var AgentRoleConfigSchema=exports_external.object({tier:exports_external.enum(EXECUTOR_CAPABILITY_TIERS).optional(),stages:exports_external.array(exports_external.string().min(1)).min(1).optional()});var FleetMemberSchema=exports_external.object({id:exports_external.string().min(1).optional(),role:exports_external.enum(AGENT_ROLE_NAMES,{error:(issue2)=>Error(`Unknown role "${issue2.input}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`)}).optional(),executor:exports_external.string().min(1).optional(),purpose:exports_external.string().optional(),enabled:exports_external.boolean().optional()}),FLEET_STRATEGIES=["rest","gtd"],FleetMemberEntrySchema=FleetMemberSchema.superRefine((member,ctx)=>{if(member.role===void 0&&member.executor===void 0)ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:"must declare a role or an executor — at least one is required"})}),AgentFleetSchema=exports_external.object({enabled:exports_external.boolean().default(!1),strategy:exports_external.enum(FLEET_STRATEGIES).default("rest"),orchestrator:exports_external.string().min(1).optional(),members:exports_external.array(FleetMemberEntrySchema).default([])});var AgentOutputConfigSchema=exports_external.object({"max-bytes":exports_external.number().int().positive().optional(),"max-lines":exports_external.number().int().positive().optional()}),AgentConfigSchema=exports_external.object({default:exports_external.string().optional(),executors:exports_external.array(AgentExecutorConfigSchema).optional(),roles:exports_external.record(exports_external.string(),AgentRoleConfigSchema).optional(),output:AgentOutputConfigSchema.optional(),sessionAffinity:exports_external.boolean().optional(),fleet:AgentFleetSchema.optional()}).superRefine((value,ctx)=>{for(let key of Object.keys(value.roles??{}))if(!AGENT_ROLE_NAMES.includes(key))ctx.addIssue({code:exports_external.ZodIssueCode.custom,path:["roles",key],message:`Unknown role "${key}" — expected one of: ${AGENT_ROLE_NAMES.join(", ")}`});let executors=value.executors,executorNames=new Set;if(executors!==void 0){let seen=new Set;for(let[index2,executor]of executors.entries()){if(seen.has(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Duplicate executor name: ${executor.name}`,path:["executors",index2,"name"]});if(executor.name==="inline"||executor.name==="auto")ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" is reserved (the --agent selector value '${executor.name}' has fixed semantics); rename executor at index ${index2}.`,path:["executors",index2,"name"]});if(AGENT_ROLE_NAMES.includes(executor.name))ctx.addIssue({code:exports_external.ZodIssueCode.custom,message:`Executor name "${executor.name}" collides with the role selector namespace ("${executor.name}"); rename executor at index ${index2}.`,path:["executors",index2,"name"]});seen.add(executor.name),executorNames.add(executor.name)}}}),RulesConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowsConfigSchema=exports_external.object({paths:exports_external.array(exports_external.string()).optional()}),WorkflowConfigSchema=exports_external.object({hitlDecisionMaker:exports_external.boolean().optional(),decideDecisionMaker:exports_external.boolean().optional(),logRetentionDays:exports_external.number().int().positive().default(30)}),RedactionConfigSchema=exports_external.object({enabled:exports_external.boolean().optional()}),HistoryRefreshConfigSchema=exports_external.object({on_completion:exports_external.boolean().default(!1),debounce_ms:exports_external.number().int().min(1000).default(600000)}),HistoryConfigSchema=exports_external.object({refresh:HistoryRefreshConfigSchema.optional()}),VersionCarrierEntrySchema=exports_external.looseObject({type:exports_external.string().min(1)}),BuilderBumpVerConfigSchema=exports_external.object({tagVersionSeparator:exports_external.string().min(1).default("-v"),aggregatePackage:exports_external.string().min(1).optional(),publishWorkflow:exports_external.string().min(1).default("publish.yml"),releaseCommitType:exports_external.string().min(1).default("chore"),releaseCommitScope:exports_external.string().min(1).default("release"),ghRunListLimit:exports_external.number().int().positive().default(5),versionCarriers:exports_external.array(VersionCarrierEntrySchema).default([])}),BuilderConfigSchema=exports_external.object({"bump-ver":BuilderBumpVerConfigSchema.optional()});var bootstrapOptionsSchema=exports_external.object({options:exports_external.record(exports_external.string(),exports_external.unknown()).optional()}),spurConfigSchema=exports_external.object({version:exports_external.string().optional(),name:exports_external.string().optional(),bootstrap:bootstrapOptionsSchema.optional(),agent:AgentConfigSchema.optional(),rules:RulesConfigSchema.optional(),workflows:WorkflowsConfigSchema.optional(),workflow:WorkflowConfigSchema.optional(),redaction:RedactionConfigSchema.optional(),history:HistoryConfigSchema.optional(),builder:BuilderConfigSchema.optional(),tasks:tasksConfigSchema.optional(),features:featuresConfigSchema.optional()});var configSchema3=exports_external.object({database:exports_external.object({url:exports_external.string().default(DEFAULT_DATABASE_URL)}).default({url:DEFAULT_DATABASE_URL}),server:exports_external.object({port:exports_external.coerce.number().int().positive().default(3000),host:exports_external.string().default("localhost"),openBrowser:exports_external.boolean().default(!0),webDistPath:exports_external.string().nullable().default(null)}).default({port:3000,host:"localhost",openBrowser:!0,webDistPath:null}),telemetry:exports_external.object({enabled:exports_external.boolean().default(!1),endpoint:exports_external.string().optional()}).default({enabled:!1}),logging:exports_external.object({level:exports_external.enum(SPUR_LOG_LEVELS).default("info")}).default({level:"info"})});import{existsSync as existsSync2,readdirSync as readdirSync2,statSync as statSync3}from"node:fs";import{dirname as dirname2,join as join2}from"node:path";var BUNDLED_CONFIG_DIRS=["config","spur-cli/config"],cachedRoot;function bundledConfigRoot(){if(cachedRoot!==void 0)return cachedRoot;let dir=import.meta.dirname;while(!0){for(let name of BUNDLED_CONFIG_DIRS){let candidate=join2(dir,name);if(isBundledConfigDir(candidate))return cachedRoot=candidate,cachedRoot}let parent=dirname2(dir);if(parent===dir)break;dir=parent}return cachedRoot=null,cachedRoot}function isBundledConfigDir(candidate){return existsSync2(candidate)&&statSync3(candidate).isDirectory()&&existsSync2(join2(candidate,"rules"))&&existsSync2(join2(candidate,"workflows"))}init_dist2();var SPUR_CONFIG_DIR=".spur",SPUR_CONFIG_FILE="config.yaml",GLOBAL_CONFIG_FILE=join3(homedir(),".config","spur","config.yaml"),LOADER_DIR=dirname3(fileURLToPath3(import.meta.url)),nextEmbeddedSchemasId=1,embeddedSchemasIds=new WeakMap,spurConfigCache=new Map;function embeddedSchemasId(embeddedSchemas){if(embeddedSchemas===void 0)return"disk";let id=embeddedSchemasIds.get(embeddedSchemas);if(id===void 0)id=nextEmbeddedSchemasId,nextEmbeddedSchemasId+=1,embeddedSchemasIds.set(embeddedSchemas,id);return`embedded:${id}`}function cacheKey(configPath,opts,validateJsonSchema2){return[configPath,validateJsonSchema2?"schema":"zod",opts?.schemaManifestSpecifier??"@gobing-ai/spur/package.json",embeddedSchemasId(opts?.embeddedSchemas)].join("\x00")}function resolveSchemaSpecifier(specifier,manifestSpecifier){if(specifier===manifestSpecifier){let workspaceManifest=join3(LOADER_DIR,"..","..","..","apps","cli","package.json");if(existsSync3(workspaceManifest))return workspaceManifest}try{let resolved=import.meta.resolve(specifier);return resolved.startsWith("file:")?fileURLToPath3(resolved):resolved}catch{return specifier}}function resolveConfigLayers(cwd){let layers={};if(!(cwd===void 0&&getEnvVar("SPUR_SKIP_PROJECT_CONFIG")==="true")){let projectConfig=join3(cwd??process.cwd(),SPUR_CONFIG_DIR,SPUR_CONFIG_FILE);if(existsSync3(projectConfig))layers.project=projectConfig}if(getEnvVar("SPUR_SKIP_GLOBAL_CONFIG")!=="true"&&existsSync3(GLOBAL_CONFIG_FILE))layers.global=GLOBAL_CONFIG_FILE;return layers}var EMBEDDED_PREFIX="\x00embedded-spur";function makeEmbeddedReader(embeddedSchemas){return async function(path8){if(path8.startsWith(EMBEDDED_PREFIX)){let subpath=path8.slice(EMBEDDED_PREFIX.length+1),embedded=embeddedSchemas.get(subpath);if(embedded===void 0)throw Error(`No embedded schema registered for "${subpath}".`);return embedded}return createNodeFileSystem2().readFile(path8)}}async function loadSpurConfig(cwd,opts){let layers=resolveConfigLayers(cwd),projectRoot=resolve(cwd??process.cwd());if(assertNoLegacyFleetFile(projectRoot,layers.project),layers.global===void 0&&layers.project===void 0)return spurConfigSchema.parse({});let validateJsonSchema2=opts?.validateJsonSchema??getEnvVar("NODE_ENV")!=="test",mtimeOf=(path8)=>path8!==void 0?String(statSync4(path8).mtimeMs):"-",key=[cacheKey(layers.project??layers.global??"",opts,validateJsonSchema2),layers.global??"-",mtimeOf(layers.project),mtimeOf(layers.global)].join("\x00"),cached2=spurConfigCache.get(key);if(cached2!==void 0)return cached2;let promise2=loadMergedConfig(layers,opts,validateJsonSchema2);return spurConfigCache.set(key,promise2),promise2.catch(()=>spurConfigCache.delete(key)),promise2}async function resolveDecideDecisionMakerEnabled(cwd,opts){return(await loadSpurConfig(cwd,opts)).workflow?.decideDecisionMaker===!0}function assertNoRetiredTeamKey(parsed,layerPath,replacementFile){let agent=parsed.agent;if(!isPlainObject5(agent)||!("team"in agent))return;throw Error(`agent.team is no longer supported (${layerPath??"the merged config"}). Declare the project fleet under agent.fleet in ${replacementFile}.`)}function assertNoGlobalFleetSection(globalRaw,layerPath,projectFile){let agent=globalRaw.agent;if(!isPlainObject5(agent)||!("fleet"in agent))return;throw Error(`agent.fleet is not supported in the global config (${layerPath??SPUR_CONFIG_FILE}). Declare the project fleet under agent.fleet in ${projectFile} — the flock belongs to a project, not to the machine.`)}function assertNoLegacyFleetFile(projectRoot,projectConfigPath){let candidates=new Set([join3(projectRoot,SPUR_CONFIG_DIR,"fleet.json")]);if(projectConfigPath!==void 0)candidates.add(join3(dirname3(projectConfigPath),"fleet.json"));for(let legacyFile of candidates){if(!existsSync3(legacyFile))continue;throw Error(`The retired fleet declaration ${legacyFile} still exists. Move its members and orchestrator under agent.fleet in the project config, then delete the file.`)}}function projectConfigReplacement(layers){return layers.project??join3(SPUR_CONFIG_DIR,SPUR_CONFIG_FILE)}function schemaValidationContext(opts){let embeddedSchemas=opts?.embeddedSchemas,manifestSpecifier=opts?.schemaManifestSpecifier??"@gobing-ai/spur/package.json",resolve2=(specifier)=>{if(embeddedSchemas!==void 0&&specifier===manifestSpecifier)return`${EMBEDDED_PREFIX}/package.json`;return resolveSchemaSpecifier(specifier,manifestSpecifier)},fileSystem=embeddedSchemas?{readFile:makeEmbeddedReader(embeddedSchemas)}:void 0;return{resolve:resolve2,...fileSystem!==void 0?{fileSystem}:{}}}async function readRawYamlLayer(configPath,kind){let nodeFs=createNodeFileSystem2(),text3;try{text3=await nodeFs.readFile(nodeFs.resolve(configPath))}catch(error51){throw Error(`Failed to read ${kind} config ${configPath}: ${error51.message}`)}try{return $parse(text3)??{}}catch(error51){throw Error(`Failed to parse ${kind} config ${configPath}: ${error51.message}`)}}function isPlainObject5(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function executorNameOf(item){return isPlainObject5(item)&&typeof item.name==="string"?item.name:void 0}function isConcatPath(segments){return segments.length===2&&segments[0]==="rules"&&segments[1]==="paths"||segments.length===2&&segments[0]==="workflows"&&segments[1]==="paths"}function byKeyIdentityFor(segments){if(segments.length===2&&segments[0]==="agent"&&segments[1]==="executors")return executorNameOf;return}function concatUnique(globalItems,projectItems){let out=[...globalItems];for(let item of projectItems)if(!out.includes(item))out.push(item);return out}function mergeByKeyIdentity(globalItems,projectItems,identityOf,segments){let merged=[],indexByIdentity=new Map;for(let item of globalItems){let identity5=identityOf(item);if(identity5!==void 0&&!indexByIdentity.has(identity5))indexByIdentity.set(identity5,merged.length);merged.push(item)}let matchedProjectIdentities=new Set;for(let item of projectItems){let identity5=identityOf(item),existing=identity5===void 0||matchedProjectIdentities.has(identity5)?void 0:indexByIdentity.get(identity5);if(existing===void 0){merged.push(item);continue}if(identity5!==void 0)matchedProjectIdentities.add(identity5);let base2=merged[existing];merged[existing]=isPlainObject5(base2)&&isPlainObject5(item)?mergeDeep(base2,item,[...segments,existing]):item}return merged}function mergeDeep(globalValue,projectValue,segments){if(isPlainObject5(globalValue)&&isPlainObject5(projectValue)){let out={...globalValue};for(let[key,projectItem]of Object.entries(projectValue))out[key]=key in out?mergeDeep(out[key],projectItem,[...segments,key]):projectItem;return out}if(Array.isArray(globalValue)&&Array.isArray(projectValue)){if(isConcatPath(segments))return concatUnique(globalValue,projectValue);let identityOf=byKeyIdentityFor(segments);if(identityOf!==void 0)return mergeByKeyIdentity(globalValue,projectValue,identityOf,segments);return projectValue}return projectValue}function mergeSpurConfigLayers(globalRaw,projectRaw){return mergeDeep(globalRaw,projectRaw,[])}function formatZodPath(path8){return path8.map((segment,index2)=>typeof segment==="number"?`[${segment}]`:index2===0?segment:`.${segment}`).join("")}function parseViolationPath(path8){let segments=[];for(let part of path8.split(".")){let bracket=part.indexOf("["),key=bracket===-1?part:part.slice(0,bracket);if(key!=="")segments.push(key);if(bracket!==-1)for(let match of part.slice(bracket).matchAll(/\[(\d+)\]/g))segments.push(Number(match[1]))}return segments}function findItemByIdentity(node,identityOf,identity5){return Array.isArray(node)?node.find((entry)=>identityOf(entry)===identity5):void 0}function describeIssueProvenance(issuePath,merged,globalRaw,projectRaw){let g2=globalRaw,p=projectRaw,m=merged,segments=[],parentG=globalRaw,parentP=projectRaw,identityPrefix="";for(let segment of issuePath){if(parentG=g2,parentP=p,segments=[...segments,segment],typeof segment==="number"){let mergedItem=Array.isArray(m)?m[segment]:void 0,identityOf=byKeyIdentityFor(segments.slice(0,-1));if(identityOf!==void 0&&mergedItem!==void 0){let identity5=identityOf(mergedItem);if(identity5!==void 0)identityPrefix=`executor "${identity5}" `,g2=findItemByIdentity(g2,identityOf,identity5),p=findItemByIdentity(p,identityOf,identity5)}else g2=Array.isArray(g2)&&segment<g2.length?g2[segment]:void 0,p=Array.isArray(p)&&segment<p.length?p[segment]:void 0;m=mergedItem;continue}g2=isPlainObject5(g2)?g2[segment]:void 0,p=isPlainObject5(p)?p[segment]:void 0,m=isPlainObject5(m)?m[segment]:void 0}let label;if(g2!==void 0&&p!==void 0)label="set in both layers (project value wins)";else if(g2!==void 0)label="from global layer";else if(p!==void 0)label="from project layer";else if(parentP!==void 0&&parentG===void 0)label="from project layer (key absent there)";else if(parentG!==void 0&&parentP===void 0)label="from global layer (key absent there)";else label="missing in both layers";return`${identityPrefix}${label}`}function parseMergedWithProvenance(merged,globalRaw,projectRaw,layers){try{return spurConfigSchema.parse(merged)}catch(error51){if(!(error51 instanceof ZodError))throw error51;let details=error51.issues.map((issue2)=>{let path8=issue2.path.filter((segment)=>typeof segment!=="symbol");return` ${formatZodPath(path8)}: ${issue2.message} (${describeIssueProvenance(path8,merged,globalRaw,projectRaw)})`}).join(`
1484
+ `);throw Error(`Spur config validation failed after merging global ${layers.global??"(absent)"} with project ${layers.project??"(absent)"}:
1485
+ ${details}`)}}function enrichSchemaViolationError(error51,merged,globalRaw,projectRaw,layers){let violations=error51.violations;if(!Array.isArray(violations))return error51;let details=violations.map((violation)=>{let v=violation,path8=typeof v.path==="string"?v.path:"(root)",message=typeof v.message==="string"?v.message:"schema violation",label=describeIssueProvenance(parseViolationPath(path8),merged,globalRaw,projectRaw);return` ${path8}: ${message} (${label})`}).join(`
1486
+ `);return Error(`Merged Spur config failed JSON Schema validation (global ${layers.global??"(absent)"} + project ${layers.project??"(absent)"}):
1487
+ ${details}`)}async function loadMergedConfig(layers,opts,validateJsonSchema2){let globalRaw=layers.global!==void 0?await readRawYamlLayer(layers.global,"global"):{},projectRaw=layers.project!==void 0?await readRawYamlLayer(layers.project,"project"):{},replacementFile=projectConfigReplacement(layers);if(layers.global!==void 0)assertNoRetiredTeamKey(globalRaw,layers.global,replacementFile),assertNoGlobalFleetSection(globalRaw,layers.global,replacementFile);if(layers.project!==void 0)assertNoRetiredTeamKey(projectRaw,layers.project,replacementFile);let merged=mergeSpurConfigLayers(globalRaw,projectRaw);if(validateJsonSchema2){let source=layers.project??layers.global??"";try{await validateDeclaredJsonSchema(merged,source,schemaValidationContext(opts))}catch(error51){throw enrichSchemaViolationError(error51,merged,globalRaw,projectRaw,layers)}}return parseMergedWithProvenance(merged,globalRaw,projectRaw,layers)}init_dist6();init_dist2();var EMBEDDED_SCHEMA_PREFIX="\x00embedded-spur",SPUR_SCHEMA_MANIFEST="@gobing-ai/spur/package.json";function normalizeLayerPath(cwd,path8){return resolve2(cwd,path8)}function workflowLayers(opts){let sharedRoot=opts.sharedRoot!==void 0?opts.sharedRoot:bundledConfigRoot(),sharedPath=sharedRoot!==null?normalizeLayerPath(opts.cwd,join4(sharedRoot,"workflows")):null,layers=[],seen=new Set,add=(id,path8)=>{if(seen.has(path8))return;seen.add(path8),layers.push({id,path:path8})};add("project",normalizeLayerPath(opts.cwd,join4(opts.cwd,".spur","workflows")));for(let entry of opts.registered){if(sharedPath!==null&&normalizeLayerPath(opts.cwd,entry)===sharedPath)continue;add("registered",normalizeLayerPath(opts.cwd,entry))}if(sharedPath!==null)add("shared",sharedPath);return layers}function createEmbeddedSchemaOptions(embedded){if(embedded===void 0||embedded.size===0)return;let nodeFs=createNodeFileSystem2();return{resolve:(specifier)=>specifier===SPUR_SCHEMA_MANIFEST?`${EMBEDDED_SCHEMA_PREFIX}/package.json`:specifier,fileSystem:{readFile:async(path8)=>{if(!path8.startsWith(EMBEDDED_SCHEMA_PREFIX))return nodeFs.readFile(path8);let subpath=path8.slice(EMBEDDED_SCHEMA_PREFIX.length+1),text3=embedded.get(subpath);if(text3===void 0)throw Error(`No embedded schema registered for "${subpath}".`);return text3}}}}async function readWorkflowNameFast(fs2,filePath){try{let text3=await fs2.readFile(filePath),parsed=$parse(text3);return typeof parsed?.name==="string"?parsed.name:null}catch{return null}}async function scanWorkflowByName(cwd,name,registered){let fs2=createNodeFileSystem2();for(let layer of workflowLayers({cwd,registered}))try{let files=(await fs2.readDir(layer.path)).filter((f)=>f.endsWith(".yaml")||f.endsWith(".yml"));for(let f of files){let abs=join4(layer.path,f);if(await readWorkflowNameFast(fs2,abs)===name)return{path:abs,source:layer.id}}}catch{}return null}function resolveWorkflowFile(cwd,file2){let fs2=createNodeFileSystem2(),projectPath=resolve2(cwd,file2);if(fs2.exists(projectPath))return{path:projectPath,source:"project"};let isYaml=file2.endsWith(".yaml")||file2.endsWith(".yml"),base2=basename(file2);if(!isAbsolute(file2)){let withYaml=isYaml?file2:`${file2}.yaml`,projectSpur=resolve2(cwd,".spur","workflows",withYaml);if(fs2.exists(projectSpur))return{path:projectSpur,source:"project"};if(!isYaml){let projectDirect=resolve2(cwd,`${file2}.yaml`);if(fs2.exists(projectDirect))return{path:projectDirect,source:"project"};let projectSpurPipeline=resolve2(cwd,".spur","workflows",`${file2}-pipeline.yaml`);if(fs2.exists(projectSpurPipeline))return{path:projectSpurPipeline,source:"project"};let projectDirectPipeline=resolve2(cwd,`${file2}-pipeline.yaml`);if(fs2.exists(projectDirectPipeline))return{path:projectDirectPipeline,source:"project"}}}let bundledRoot=bundledConfigRoot();if(bundledRoot!==null){let sharedName=isYaml?base2:`${base2}.yaml`,sharedPath=join4(bundledRoot,"workflows",sharedName);if(fs2.exists(sharedPath))return{path:sharedPath,source:"shared"};if(!isYaml){let sharedPipeline=join4(bundledRoot,"workflows",`${base2}-pipeline.yaml`);if(fs2.exists(sharedPipeline))return{path:sharedPipeline,source:"shared"};let sharedLiteral=join4(bundledRoot,"workflows",base2);if(fs2.exists(sharedLiteral))return{path:sharedLiteral,source:"shared"}}return{path:null,probed:[projectPath,sharedPath]}}return{path:null,probed:[projectPath,null]}}async function resolveWorkflowDefinition(cwd,fileOrName,options={}){let registered=options.registered??[],resolved=(basename(fileOrName)===fileOrName&&!/\.ya?ml$/.test(fileOrName)&&!createNodeFileSystem2().exists(resolve2(cwd,fileOrName))?await scanWorkflowByName(cwd,fileOrName,registered):null)??resolveWorkflowFile(cwd,fileOrName);if(resolved.path===null){let scanned=await scanWorkflowByName(cwd,fileOrName,registered);if(scanned!==null)resolved=scanned;else{let[probedProject,probedShared]=resolved.probed;throw Error(`Workflow not found: ${probedProject}${probedShared!==null?` (shared: ${probedShared})`:""}`)}}let embedded=createEmbeddedSchemaOptions(options.embeddedSchemas),workflow=await loadWorkflowDef(resolved.path,{validateSchema:options.validateSchema!==!1,...embedded!==void 0?embedded:{}});if(workflow.version==="")throw Error(`Invalid workflow definition ${resolved.path}: root "version" is an empty string. Omit the field for an unversioned definition, or give it a non-empty literal.`);let digest=computeDefinitionDigest(workflow);return{path:resolved.path,workflow,digest,layer:resolved.source}}var TERMINAL_REASONS=["done","paused-operator","failed-check","failed-agent","failed-timeout","failed-guard","cancelled","interrupted","retry-exhausted"];function isTerminalReason(value){return TERMINAL_REASONS.includes(value)}function classifyTerminalReason({status,engineReason,actionKind,errorText}){if(engineReason!==void 0&&engineReason!==null&&isTerminalReason(engineReason))return engineReason;if(status==="interrupted")return"interrupted";if(status==="paused")return"paused-operator";if(status==="done")return"done";if(engineReason==="no-passing-transition"||engineReason==="no-passing-edge")return"failed-guard";if(engineReason==="iteration-bound-exceeded")return"retry-exhausted";if(errorText!==void 0&&errorText!==null&&/timeout/i.test(errorText))return"failed-timeout";if(actionKind==="agent.run")return"failed-agent";return"failed-check"}var UNPERSISTED_PREFIX="trace-unpersisted:";class RunRowNotFoundError extends Error{runId;constructor(runId){super(`run row not found: ${runId}`);this.name="RunRowNotFoundError",this.runId=runId}}class WorkflowActionTraceWriter{inner;recordFailure;db;boundaries=new Map;constructor(inner,recordFailure,db2){this.inner=inner;this.recordFailure=recordFailure;this.db=db2}async saveActionStart(runId,node,kind,options){let outcome=await this.guard("action.start",{runId,node,kind},()=>this.inner.saveActionStart(runId,node,kind,options));if(!outcome.ok){let syntheticId=`${UNPERSISTED_PREFIX}${crypto.randomUUID()}`;return this.boundaries.set(syntheticId,{runId,node,kind}),this.lastStart={runId,node,kind},syntheticId}return this.boundaries.set(outcome.value,{runId,node,kind}),this.lastStart={runId,node,kind},outcome.value}lastStart;async saveActionFinalize(actionId,status,durationMs,ok,kind,result,redactor){let origin2=this.boundaries.get(actionId)??this.lastStart;await this.guard("action.finish",{runId:origin2?.runId??"",node:origin2?.node,kind},()=>this.inner.saveActionFinalize(actionId,status,durationMs,ok,kind,result,redactor)),this.boundaries.delete(actionId)}async finalizeRun(runId,status,completedAt,fence,reason){await this.inner.finalizeRun(runId,status,completedAt,fence,reason===void 0?void 0:classifyTerminalReason({status,engineReason:reason,errorText:reason}))}async claimRunOwnership(runId,owner,expectedStatuses){return this.inner.claimRunOwnership(runId,owner,expectedStatuses)}async interruptRun(runId,reason){return this.inner.interruptRun(runId,reason)}async recordAction(boundary2){let start=await this.guard("action.start",{runId:boundary2.runId,node:boundary2.node,kind:boundary2.kind},()=>this.inner.saveActionStart(boundary2.runId,boundary2.node,boundary2.kind));if(!start.ok)return start;let finish=await this.guard("action.finish",{runId:boundary2.runId,node:boundary2.node,kind:boundary2.kind},()=>this.inner.saveActionFinalize(start.value,boundary2.status,boundary2.durationMs,boundary2.ok,boundary2.kind,boundary2.result,boundary2.redactor));if(!finish.ok)return finish;return await this.backdateStart(start.value,boundary2),{ok:!0,actionId:start.value}}async backdateStart(actionId,boundary2){let db2=this.db;if(db2===void 0||boundary2.durationMs<=0)return;await this.guard("action.backdate",{runId:boundary2.runId,node:boundary2.node,kind:boundary2.kind},async()=>{let dao2=new ActionRunDao(db2),completedAt=await dao2.completedAtById(actionId);if(completedAt===null)return;let startedAt=new Date(new Date(completedAt).getTime()-boundary2.durationMs).toISOString();await dao2.setStartedAt(actionId,startedAt)})}async closeRun(runId,status,completedAt,reason){if(await this.inner.loadRun(runId)===void 0)throw new RunRowNotFoundError(runId);if(await this.inner.finalizeRun(runId,status,completedAt??new Date().toISOString(),void 0,reason===void 0?void 0:classifyTerminalReason({status,engineReason:reason,errorText:reason})),this.db===void 0)return{ok:!0};return{ok:!0,actionRows:(await new ActionRunDao(this.db).actionRowsByRunId(runId)).length}}async guard(operation,context4,emit){try{return{ok:!0,value:await emit()}}catch(error51){let failure={operation,runId:context4.runId,...context4.node!==void 0?{node:context4.node}:{},...context4.kind!==void 0?{kind:context4.kind}:{},error:error51 instanceof Error?error51.message:String(error51),at:new Date().toISOString()};try{this.recordFailure?.(failure)}catch{}return{ok:!1,failure}}}createRun(record3){return this.inner.createRun(record3)}savePhase(runId,phase,status){return this.inner.savePhase(runId,phase,status)}saveTransition(runId,from,to,trigger){return this.inner.saveTransition(runId,from,to,trigger)}saveWorkflowState(runId,state,data){return this.inner.saveWorkflowState(runId,state,data)}commitTransition(runId,from,to,trigger,state,data,phase){return this.inner.commitTransition(runId,from,to,trigger,state,data,phase)}loadRun(runId){return this.inner.loadRun(runId)}listRuns(){return this.inner.listRuns()}findRunByKey(workflowName,externalKey){return this.inner.findRunByKey(workflowName,externalKey)}createOrAttachRun(record3){return this.inner.createOrAttachRun(record3)}reseedRun(runId,newState){return this.inner.reseedRun(runId,newState)}loadCurrentState(runId){return this.inner.loadCurrentState(runId)}loadLatestStateSnapshot(runId){return this.inner.loadLatestStateSnapshot(runId)}listPausedRuns(options){return this.inner.listPausedRuns(options)}}function createWorkflowActionTraceWriter(db2,recordFailure){return new WorkflowActionTraceWriter(new DbWorkflowPersistenceAdapter(db2),recordFailure,db2)}var TRIPWIRE_CATALOG=Object.freeze({"retry-exhausted":{id:"retry-exhausted",version:1,response:"fail",nextDecision:"Retries are exhausted; an operator must decide to escalate, extend the retry policy, or fail the stage. No further automatic retry is permitted."},"hard-budget":{id:"hard-budget",version:1,response:"fail",nextDecision:"An operator must raise the declared budget or trim the stage scope, then re-run the action; the run stays failed until then."},"capability-denied":{id:"capability-denied",version:1,response:"fail",nextDecision:"An operator must attest the executor capabilities in agent config or lower the stage requiresCapabilities, then re-run the action."},"proof-invalidated":{id:"proof-invalidated",version:1,response:"fail",nextDecision:"An operator must restore the proof inputs or re-establish the verdict (re-verify) before record; recording against a changed tree is blocked."},"output-drop":{id:"output-drop",version:1,response:"continue",nextDecision:"The dispatch completed but its captured evidence is incomplete (bounded relay dropped chunks). Inspect the session/trace for full output if the result is contested."}});var SHELL_METACHARACTERS=/[;&|<>$`(){}[\]!*?~#\n\r"']/;function splitLaunchCommand(value,label){if(SHELL_METACHARACTERS.test(value))return{error:`${label} must not contain shell metacharacters (got ${value})`};let tokens=value.trim().split(/\s+/).filter((t)=>t.length>0),command=tokens[0];if(command===void 0)return{error:`Action option ${label.slice(label.indexOf('"'))} must be a non-empty string`};return{command,leadingArgs:tokens.slice(1)}}import crypto4 from"node:crypto";import{tmpdir}from"node:os";import{dirname as dirname4,join as join5,resolve as resolve3,sep}from"node:path";init_dist6();class ProofCaptureError extends Error{stderr;constructor(message,stderr){super(message);this.stderr=stderr;this.name="ProofCaptureError"}}var TASK_SPEC_SECTIONS=["Background","Requirements","Acceptance Criteria","Design","Plan"],CANONICAL_TASK_HEADING_RE=/^##[ \t]+(\d+)\.[ \t]+(\S.*)$/m;function taskDocumentShapeError(content){let doc2=MarkdownDocument.parse(content,"task"),heading=CANONICAL_TASK_HEADING_RE.exec(doc2.bodyWithoutFrontmatter);if(heading===null)return"no canonical task heading (`## <WBS>. <title>`) was found";if((heading[2]??"").trim()==="")return`the canonical task heading for WBS ${heading[1]} has an empty title`;if(TASK_SPEC_SECTIONS.filter((section)=>doc2.hasSection(section)).length===0)return`no task specification section (${TASK_SPEC_SECTIONS.join(", ")}) was found`;return null}async function readProofInputContents(fileSystem=createNodeFileSystem2(),workdir,options){for(let name of["taskFile","featureFile"]){let value=options[name];if(value!==void 0&&typeof value!=="string")return{ok:!1,error:`${name} must be a string when supplied (got ${typeof value})`}}let readOne=async(name)=>{let raw=name==="taskFile"?options.taskFile:options.featureFile;if(raw===void 0||raw==="")return{};let workdirAbs=resolve3(workdir),resolved=resolve3(workdirAbs,raw);if(!(resolved===workdirAbs||resolved.startsWith(`${workdirAbs}${sep}`)))return{error:`${name} must resolve under the workflow workdir (${workdirAbs}): ${raw}`};let stat;try{stat=await fileSystem.stat(resolved)}catch(error51){return{error:`${name} could not be inspected: ${error51.message}`}}if(stat===null)return{error:`${name} does not exist: ${raw} (resolved ${resolved}) — an explicitly supplied spec must be readable, not silently omitted`};if(!stat.isFile())return{error:`${name} is not a regular file: ${resolved}`};let content;try{content=await fileSystem.readFile(resolved)}catch(error51){return{error:`${name} is not readable: ${error51.message}`}}if(name==="taskFile"){let shapeError=taskDocumentShapeError(content);if(shapeError!==null)return{error:`taskFile is not a task document: ${raw} (resolved ${resolved}) — ${shapeError}. Supply the task specification markdown itself: a \`## <WBS>. <title>\` heading plus at least one of ${TASK_SPEC_SECTIONS.join(", ")}. A file containing only a path is not dereferenced.`}}return{content}},task=await readOne("taskFile");if(task.error!==void 0)return{ok:!1,error:task.error};let feature=await readOne("featureFile");if(feature.error!==void 0)return{ok:!1,error:feature.error};return{ok:!0,...task.content!==void 0?{taskContent:task.content}:{},...feature.content!==void 0?{featureContent:feature.content}:{}}}var DEFAULT_EXCLUDE_GLOBS=["docs/tasks*","docs/features*"];async function createGitAlternateTree(cwd,excludeGlobs=DEFAULT_EXCLUDE_GLOBS,executor=new NodeProcessExecutor2,fs2=createNodeFileSystem2()){let indexFile=join5(tmpdir(),`spur-proof-fingerprint-${crypto4.randomUUID()}.index`);try{await fs2.ensureDir(dirname4(indexFile));let env2=Object.fromEntries(Object.entries(getEnvVars()).filter((entry)=>entry[1]!==void 0));env2.GIT_INDEX_FILE=indexFile;let common4={cwd,env:env2,forceBuffered:!0,rejectOnError:!1},read=await executor.run({command:"git",args:["read-tree","HEAD"],...common4});if(read.exitCode!==0)throw new ProofCaptureError(`git read-tree HEAD failed with exit code ${read.exitCode}`,read.stderr);let excludes=excludeGlobs.map((glob)=>`:(exclude)${glob}`),add=await executor.run({command:"git",args:["add","-A","--",".",...excludes],...common4});if(add.exitCode!==0)throw new ProofCaptureError(`git add -A failed with exit code ${add.exitCode}`,add.stderr);let tree=await executor.run({command:"git",args:["write-tree"],...common4});if(tree.exitCode!==0)throw new ProofCaptureError(`git write-tree failed with exit code ${tree.exitCode}`,tree.stderr);return tree.stdout.trim()}catch(error51){if(error51 instanceof ProofCaptureError)throw error51;throw new ProofCaptureError(`git alternate-tree capture threw: ${error51.message}`)}finally{if(await fs2.exists(indexFile))try{await fs2.deleteFile(indexFile)}catch{}}}function extractTaskProofData(content){let doc2=MarkdownDocument.parse(content,"task"),fm=doc2.frontmatterData??{},wbs=typeof fm.wbs==="string"?fm.wbs:void 0,name=typeof fm.name==="string"?fm.name:void 0,feature_id=typeof fm.feature_id==="string"?fm.feature_id:void 0,depends_on;if(Array.isArray(fm.depends_on))depends_on=fm.depends_on.filter((d)=>typeof d==="string");else if(Array.isArray(fm.dependencies))depends_on=fm.dependencies.filter((d)=>typeof d==="string");let sections={},taskSections=["Background","Requirements","Acceptance Criteria","Design","Plan"];for(let sec of taskSections)if(doc2.hasSection(sec)){let body=doc2.getSection(sec);if(body!==null)sections[sec]=body.trim()}return{...wbs!==void 0?{wbs}:{},...name!==void 0?{name}:{},...feature_id!==void 0?{feature_id}:{},...depends_on!==void 0?{depends_on}:{},sections}}function extractFeatureProofData(content){let doc2=MarkdownDocument.parse(content,"feature"),fm=doc2.frontmatterData??{},id=typeof fm.id==="string"?fm.id:void 0,name=typeof fm.name==="string"?fm.name:void 0,sections={},featureSections=["Goal","Scope","Acceptance Criteria"];for(let sec of featureSections)if(doc2.hasSection(sec)){let body=doc2.getSection(sec);if(body!==null)sections[sec]=body.trim()}return{...id!==void 0?{id}:{},...name!==void 0?{name}:{},sections}}async function computeProofInputFingerprint(options={}){let cwd=options.cwd??process.cwd(),gitTree=await createGitAlternateTree(cwd,options.excludeGlobs??DEFAULT_EXCLUDE_GLOBS,options.processExecutor,options.fileSystem),task;if(options.taskContent!==void 0)task=extractTaskProofData(options.taskContent);let feature;if(options.featureContent!==void 0)feature=extractFeatureProofData(options.featureContent);let canonical=canonicalJsonStringify({gitTree,...task!==void 0?{task}:{},...feature!==void 0?{feature}:{},...options.learningsContent!==void 0?{learnings:options.learningsContent}:{}});return`sha256:${crypto4.createHash("sha256").update(canonical,"utf8").digest("hex")}`}var ProofInputFingerprint={compute:computeProofInputFingerprint};init_zod();var VERDICT_AGGREGATES=["PASS","PARTIAL","FAIL","UNKNOWN"],ROW_STATUSES=["MET","PARTIAL","UNMET","N/A"],CHECK_SEVERITIES=["blocker","major","minor","advisory"],verdictSchema=exports_external.string().transform((v,ctx)=>{let up=v.toUpperCase();if(!VERDICT_AGGREGATES.includes(up))return ctx.addIssue({code:"custom",message:`invalid verdict "${v}" (expected PASS|PARTIAL|FAIL|UNKNOWN)`}),"UNKNOWN";return up}),coverageRowSchema=exports_external.object({id:exports_external.string().optional(),scenario:exports_external.string().optional(),status:exports_external.string(),evidenceType:exports_external.string().optional(),evidence:exports_external.string().optional()}).superRefine((r,ctx)=>{if(r.id!==void 0&&r.scenario!==void 0&&r.id!==r.scenario)ctx.addIssue({code:"custom",message:`id/scenario conflict ("${r.id}" vs "${r.scenario}")`,path:["scenario"]});if(!ROW_STATUSES.includes(r.status.toUpperCase()))ctx.addIssue({code:"custom",message:`invalid row status "${r.status}"`,path:["status"]})}).transform((r)=>({id:r.id??r.scenario??"",status:r.status.toUpperCase(),evidenceType:r.evidenceType??"",evidence:r.evidence??""})),checkSchema=exports_external.object({name:exports_external.string().optional(),check:exports_external.string().optional(),id:exports_external.string().optional(),status:exports_external.string(),evidence:exports_external.string().optional().default(""),severity:exports_external.enum(CHECK_SEVERITIES).optional()}).superRefine((c3,ctx)=>{if(c3.name===void 0&&c3.check===void 0&&c3.id===void 0)ctx.addIssue({code:"custom",message:"check row needs one of name/check/id",path:["name"]})}).transform((c3)=>({name:c3.name??c3.check??c3.id??"",status:c3.status,evidence:c3.evidence,severity:c3.severity})),verifyVerdictSchema=exports_external.object({wbs:exports_external.string().optional().default(""),verdict:verdictSchema,requirements:exports_external.array(coverageRowSchema).optional().default([]),acceptanceCriteria:exports_external.array(coverageRowSchema).optional().default([]),checks:exports_external.array(checkSchema).optional().default([]),source:exports_external.string().optional(),pipelineRunId:exports_external.string().optional(),recordedAt:exports_external.string().optional()});var field=(path8,label)=>({path:path8,label}),SOURCE_PROFILES={planning:{producerPackage:"spur",subsystem:"planning",remediationKind:"prefix-filter"},queue:{producerPackage:"@gobing-ai/ts-infra",subsystem:"job-queue",remediationKind:"prefix-filter"},scheduler:{producerPackage:"@gobing-ai/ts-infra",subsystem:"scheduler",remediationKind:"prefix-filter"},message:{producerPackage:"spur",subsystem:"coordination-messaging",remediationKind:"prefix-filter"},process:{producerPackage:"@gobing-ai/ts-runtime",subsystem:"process-executor",remediationKind:"prefix-filter"},workflow:{producerPackage:"@gobing-ai/ts-dual-workflow-engine",subsystem:"workflow",remediationKind:"workflow-trace"},rule:{producerPackage:"@gobing-ai/ts-rule-engine",subsystem:"rule-engine",remediationKind:"rule-trace"},agent:{producerPackage:"@gobing-ai/ts-ai-runner",subsystem:"agent-runner",remediationKind:"prefix-filter"},history:{producerPackage:"spur",subsystem:"history",remediationKind:"prefix-filter"},bus:{producerPackage:"@gobing-ai/ts-infra",subsystem:"event-bus",remediationKind:"prefix-filter"},api:{producerPackage:"spur",subsystem:"http-api",remediationKind:"prefix-filter"}};function at(data,path8){if(data===null)return;let current=data;for(let segment of path8.split(".")){if(current===null||typeof current!=="object"||Array.isArray(current))return;current=current[segment]}return current}function s2(data,...paths){for(let path8 of paths){let value=at(data,path8);if(typeof value==="string"&&value.length>0)return value}return}function n2(data,...paths){for(let path8 of paths){let value=at(data,path8);if(typeof value==="number"&&Number.isFinite(value))return String(value);if(typeof value==="boolean")return String(value)}return}function entityId(input){return s2(input.data,"entity.id")??input.correlation.entityId??""}function looksLikeOpaqueId(value){if(typeof value!=="string")return!1;let v=value.trim();if(v==="")return!1;if(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v))return!0;if(/^live[-_][a-z0-9._-]+$/i.test(v))return!0;if(/^(?:eventId|rowId|runId|executionId|actionId)$/i.test(v))return!0;return!1}function humanWorkflowTitle(input){let raw=s2(input.data,"workflowName")??s2(input.data,"workflow");if(raw!==void 0&&!looksLikeOpaqueId(raw))return(raw.split("/").pop()?.replace(/\.(?:ya?ml|json)$/i,"")??raw).replace(/[._-]+$/,"");return""}function humanStepLabel(data){let label=s2(data,"nodeLabel")??s2(data,"stepName")??s2(data,"step");if(label!==void 0&&!looksLikeOpaqueId(label))return label;let node=s2(data,"node");if(node!==void 0&&!looksLikeOpaqueId(node))return node;return}function derivedFrom(...paths){return{support:"derived",derive:({data})=>s2(data,...paths)}}function derivedFromValue(...paths){return{support:"derived",derive:({data})=>n2(data,...paths)??s2(data,...paths)}}var unsupported={support:"unsupported"};function baseEvent(name,source,renderer,payloadPolicy="metadata-only",tier="default",producer){return{name,source,tier,payloadPolicy,renderer,...producer!==void 0?{producer}:{}}}var BASE_CATALOG=[baseEvent("task.created","planning","planning"),baseEvent("task.updated","planning","planning"),baseEvent("task.transitioned","planning","planning"),baseEvent("feature.created","planning","planning"),baseEvent("feature.updated","planning","planning"),baseEvent("feature.transitioned","planning","planning"),baseEvent("queue.consumer.started","queue","queue"),baseEvent("queue.consumer.stopped","queue","queue"),baseEvent("queue.job.enqueued","queue","queue"),baseEvent("queue.job.started","queue","queue"),baseEvent("queue.job.completed","queue","queue"),baseEvent("queue.job.failed","queue","queue"),baseEvent("queue.job.retrying","queue","queue"),baseEvent("queue.stats","queue","queue"),baseEvent("scheduler.job.executed","scheduler","scheduler"),baseEvent("message.sent","message","message"),baseEvent("message.replied","message","message"),baseEvent("process.spawned","process","process"),baseEvent("process.exited","process","process"),baseEvent("process.stopped","process","process"),baseEvent("process.started","process","process"),baseEvent("agent.invoke.start","agent","agent"),baseEvent("agent.invoke.exit","agent","agent"),baseEvent("agent.invoke.escalated","agent","agent","metadata-only","default",{package:"spur",subsystem:"agent-runner"}),baseEvent("agent.invoke.exhausted","agent","agent","metadata-only","default",{package:"spur",subsystem:"agent-runner"}),baseEvent("agent.started","agent","agent"),baseEvent("agent.stopped","agent","agent"),baseEvent("agent.message.sent","agent","agent"),baseEvent("strategy.changed","agent","agent","metadata-only","default",{package:"spur",subsystem:"fleet-strategy"}),baseEvent("fleet.capacity.changed","agent","agent","metadata-only","default",{package:"spur",subsystem:"write-slot"}),baseEvent("task.assigned","planning","planning"),baseEvent("history.import.completed","history","history-import"),baseEvent("history.analyze.completed","history","history-analyze"),baseEvent("history.daily.failed","history","history-daily"),baseEvent("history.refresh.enqueued","history","history-refresh"),baseEvent("rule.run.start","rule","rule"),baseEvent("rule.eval.start","rule","rule"),baseEvent("rule.eval.done","rule","rule"),baseEvent("rule.eval.error","rule","rule"),baseEvent("rule.run.done","rule","rule"),baseEvent("workflow.run.started","workflow","workflow-run"),baseEvent("workflow.run.done","workflow","workflow-run"),baseEvent("workflow.run.failed","workflow","workflow-run"),baseEvent("workflow.run.finalized","workflow","workflow-run"),baseEvent("workflow.escalation.created","workflow","workflow-run","redacted"),baseEvent("workflow.escalation.projection_failed","workflow","workflow-run","metadata-only"),baseEvent("workflow.run.paused","workflow","workflow-run"),baseEvent("workflow.run.resumed","workflow","workflow-run"),baseEvent("workflow.run.reseeded","workflow","workflow-run"),baseEvent("workflow.node.enter","workflow","workflow-phase"),baseEvent("workflow.phase","workflow","workflow-phase"),baseEvent("workflow.node.transition","workflow","workflow-transition"),baseEvent("workflow.transition","workflow","workflow-transition"),baseEvent("workflow.transition.requested","workflow","workflow-transition","metadata-only","diagnostic"),baseEvent("workflow.transition.denied","workflow","workflow-transition","metadata-only","diagnostic"),baseEvent("workflow.action.started","workflow","workflow-action"),baseEvent("workflow.action.finished","workflow","workflow-action"),baseEvent("workflow.action.failed_continue","workflow","workflow-action"),baseEvent("workflow.guard.evaluated","workflow","workflow-guard","metadata-only","diagnostic"),baseEvent("workflow.hitl.ask","workflow","workflow-hitl","redacted"),baseEvent("workflow.hitl.response","workflow","workflow-hitl","redacted"),baseEvent("workflow.hitl.note","workflow","workflow-hitl","redacted"),baseEvent("workflow.custom","workflow","workflow-custom"),baseEvent("workflow.agent","workflow","workflow-agent","redacted","diagnostic"),baseEvent("workflow.steering","workflow","workflow-steering","redacted"),baseEvent("api.request.error","api","api"),baseEvent("bus.emit.done","bus","bus","metadata-only","diagnostic"),baseEvent("bus.emit.noop","bus","bus","metadata-only","diagnostic"),baseEvent("bus.handler.error","bus","bus","metadata-only","diagnostic"),baseEvent("bus.handler.async.enqueued","bus","bus","metadata-only","diagnostic")],SYSTEM_EVENT_PRESENTERS={"task.created":{description:"A task file was created with a new WBS id.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity")],summary:({data,correlation})=>`[task] ${entityId({data,correlation})} created`,outcome:unsupported},"task.updated":{description:"An existing task file was updated in place, naming the section that changed.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("field","Field"),field("data.mutation.name","Section"),field("data.after","After"),field("data.diff","Diff")],summary:({data,correlation})=>{let section=s2(data,"data.mutation.name"),id=entityId({data,correlation});return section!==void 0?`[task] ${section}`:`[task] ${id||"updated"}`},outcome:unsupported},"task.transitioned":{description:"A task moved between lifecycle states, naming both the previous and new status.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("from","From"),field("to","To")],summary:({data,correlation})=>{let id=entityId({data,correlation}),from=s2(data,"from"),to=s2(data,"to");return from!==void 0&&to!==void 0?`[task] ${id} : ${from} -> ${to}`:`[task] ${id} transitioned`},outcome:{support:"derived",derive:({data})=>s2(data,"to")}},"feature.created":{description:"A feature file was created with a new feature id.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity")],summary:({data,correlation})=>`[feature] ${entityId({data,correlation})} created`,outcome:unsupported},"feature.updated":{description:"An existing feature file was updated in place, naming the section that changed.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("field","Field"),field("data.mutation.name","Section"),field("data.after","After"),field("data.diff","Diff")],summary:({data,correlation})=>{let section=s2(data,"data.mutation.name"),id=entityId({data,correlation});return section!==void 0?`[feature] ${section}`:`[feature] ${id||"updated"}`},outcome:unsupported},"feature.transitioned":{description:"A feature moved between lifecycle states, naming both the previous and new status.",fields:[field("entity.kind","Entity kind"),field("entity.id","Entity"),field("from","From"),field("to","To")],summary:({data,correlation})=>{let id=entityId({data,correlation}),from=s2(data,"from"),to=s2(data,"to");return from!==void 0&&to!==void 0?`[feature] ${id} : ${from} -> ${to}`:`[feature] ${id} transitioned`},outcome:{support:"derived",derive:({data})=>s2(data,"to")}},"queue.consumer.started":{description:"The configured queue consumer began polling its named queue.",fields:[field("queueName","Queue"),field("startedAt","Started"),field("pollInterval","Poll interval"),field("batchSize","Batch size"),field("maxConcurrency","Max concurrency"),field("visibilityTimeout","Visibility timeout")],summary:({data})=>{let name=s2(data,"queueName");return name!==void 0?`[queue] ${name} : consumer started`:"[queue] consumer started"},outcome:{support:"derived",derive:({data})=>at(data,"startedAt")!==void 0?"running":void 0}},"queue.consumer.stopped":{description:"The queue consumer stopped, reporting whether it drained in-flight work.",fields:[field("queueName","Queue"),field("stoppedAt","Stopped"),field("drainTimeoutMs","Drain timeout"),field("inFlightAtStop","In flight"),field("drained","Drained")],summary:({data})=>{let name=s2(data,"queueName");return name!==void 0?`[queue] ${name} : consumer stopped`:"[queue] consumer stopped"},outcome:{support:"derived",derive:({data})=>{let drained=at(data,"drained");if(drained===!0)return"drained";if(drained===!1)return"timeout";return}}},"queue.job.enqueued":{description:"A job was enqueued onto the job queue for later processing.",fields:[field("jobId","Job"),field("type","Type"),field("nextRetryAt","Next retry")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} enqueued`:"[queue] job enqueued"},outcome:unsupported},"queue.job.started":{description:"A queued job handler began executing (job identity and phase anchor).",fields:[field("jobId","Job"),field("type","Type"),field("name","Name")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} started`:"[queue] job started"},outcome:unsupported},"queue.job.completed":{description:"A queued job finished successfully with its attempt and duration.",fields:[field("jobId","Job"),field("type","Type"),field("attempt","Attempt"),field("durationMs","Duration (ms)")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} completed`:"[queue] job completed"},outcome:unsupported},"queue.job.failed":{description:"A queued job exhausted its attempts and failed with an error.",fields:[field("jobId","Job"),field("type","Type"),field("attempt","Attempt"),field("maxRetries","Max retries"),field("durationMs","Duration (ms)"),field("error","Error")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} failed`:"[queue] job failed"},outcome:derivedFrom("error")},"queue.job.retrying":{description:"A queued job failed once and is scheduled for another attempt.",fields:[field("jobId","Job"),field("type","Type"),field("attempt","Attempt"),field("maxRetries","Max retries"),field("nextRetryAt","Next retry"),field("error","Error")],summary:({data})=>{let type=s2(data,"type"),jobId=s2(data,"jobId");return type!==void 0&&jobId!==void 0?`[queue] ${type} · job ${jobId} retrying`:"[queue] job retrying"},outcome:{support:"derived",derive:({data})=>{let attempt=at(data,"attempt"),max=at(data,"maxRetries");if(typeof attempt==="number"&&typeof max==="number"&&Number.isFinite(attempt)&&Number.isFinite(max))return`retrying ${attempt}/${max}`;return s2(data,"error")}}},"queue.stats":{description:"Periodic job-queue statistics across ready, running, completed, and failed counts.",fields:[field("ready","Ready"),field("running","Running"),field("completed","Completed"),field("failed","Failed")],summary:()=>"[queue] stats",outcome:unsupported},"scheduler.job.executed":{description:"A scheduler job ran to completion or failed, with its duration.",fields:[field("name","Job"),field("action","Action"),field("durationMs","Duration (ms)"),field("error","Error")],summary:({data})=>{let name=s2(data,"name");return name!==void 0?`[scheduler] ${name}`:"[scheduler] job executed"},outcome:{support:"derived",derive:({data})=>s2(data,"error")??(at(data,"error")===null?"completed":void 0)}},"message.sent":{description:"A team message was sent from one member to another.",fields:[field("msgId","Message"),field("fromId","From"),field("toId","To"),field("threadId","Thread")],summary:({data})=>{let from=s2(data,"fromId"),to=s2(data,"toId");return from!==void 0&&to!==void 0?`[message] ${from} -> ${to}`:"[message] sent"},outcome:unsupported},"message.replied":{description:"A member replied to an existing message thread.",fields:[field("msgId","Message"),field("fromId","From"),field("toId","To"),field("threadId","Thread")],summary:({data})=>{let from=s2(data,"fromId"),thread=s2(data,"threadId");return from!==void 0&&thread!==void 0?`[message] ${from} replied in ${thread}`:"[message] replied"},outcome:unsupported},"process.spawned":{description:"A supervised process was spawned with a new pid.",fields:[field("label","Label"),field("pid","PID"),field("agentId","Agent")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} spawned`:"[process] spawned"},outcome:unsupported},"process.exited":{description:"A supervised process exited, carrying its exit code, signal, or failure reason.",fields:[field("label","Label"),field("pid","PID"),field("exitCode","Exit code"),field("signal","Signal"),field("durationMs","Duration (ms)"),field("reason","Reason")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} exited`:"[process] exited"},outcome:{support:"derived",derive:({data})=>{let reason=s2(data,"reason");if(reason!==void 0)return reason;let signal=s2(data,"signal");if(signal!==void 0)return`signal ${signal}`;let code=at(data,"exitCode");if(typeof code==="number"&&Number.isFinite(code))return code===0?"ok":`exit ${code}`;return}}},"process.stopped":{description:"A supervised process was stopped, naming the stopping reason.",fields:[field("label","Label"),field("pid","PID"),field("signal","Signal"),field("reason","Reason")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} stopped`:"[process] stopped"},outcome:derivedFrom("reason")},"process.started":{description:"A process executor started a process with a new pid.",fields:[field("label","Label"),field("pid","PID")],summary:({data})=>{let label=s2(data,"label")??n2(data,"pid");return label!==void 0?`[process] ${label} started`:"[process] started"},outcome:unsupported},"agent.invoke.start":{description:"An agent invocation began, naming the agent and its operation.",fields:[field("agent","Agent"),field("operation","Operation"),field("routing.role","Role"),field("routing.tier","Tier"),field("routing.executor","Executor"),field("routing.source","Selection source")],summary:({data})=>{let agent=s2(data,"agent"),operation=s2(data,"operation");return agent!==void 0&&operation!==void 0?`[agent] ${agent} · ${operation}`:"[agent] invocation started"},outcome:unsupported},"agent.invoke.exit":{description:"An agent invocation exited, reporting its exit code or signal.",fields:[field("agent","Agent"),field("operation","Operation"),field("exitCode","Exit code"),field("signal","Signal"),field("routing.role","Role"),field("routing.tier","Tier"),field("routing.executor","Executor"),field("routing.source","Selection source")],summary:({data})=>{let agent=s2(data,"agent"),operation=s2(data,"operation");return agent!==void 0&&operation!==void 0?`[agent] ${agent} · ${operation} exited`:"[agent] invocation exited"},outcome:{support:"derived",derive:({data})=>{let signal=s2(data,"signal");if(signal!==void 0)return`signal ${signal}`;let code=at(data,"exitCode");if(typeof code==="number"&&Number.isFinite(code))return code===0?"ok":`exit ${code}`;return}}},"agent.invoke.escalated":{description:"An agent invocation escalated from one executor tier to another.",fields:[field("fromExecutor","From executor"),field("fromTier","From tier"),field("toExecutor","To executor"),field("toTier","To tier"),field("trigger","Trigger")],summary:({data})=>{let from=s2(data,"fromExecutor"),to=s2(data,"toExecutor");return from!==void 0&&to!==void 0?`[agent] ${from} -> ${to}`:"[agent] escalation"},outcome:{support:"derived",derive:({data})=>s2(data,"toTier")??s2(data,"trigger")}},"agent.invoke.exhausted":{description:"An agent invocation exhausted every eligible executor tier without success.",fields:[field("stage","Stage"),field("attempts","Attempts"),field("fromTier","From tier"),field("toTier","To tier"),field("fromExecutor","From executor"),field("toExecutor","To executor")],summary:({data})=>{let stage=s2(data,"stage");return stage!==void 0?`[agent] ${stage} escalation exhausted`:"[agent] escalation exhausted"},outcome:derivedFromValue("attempts")},"agent.started":{description:"An agent started, carrying its id and type.",fields:[field("agentId","Agent"),field("agentType","Agent type"),field("pid","PID")],summary:({data})=>{let id=s2(data,"agentId");return id!==void 0?`[agent] ${id} started`:"[agent] started"},outcome:unsupported},"agent.stopped":{description:"An agent stopped, reporting its exit code.",fields:[field("agentId","Agent"),field("exitCode","Exit code")],summary:({data})=>{let id=s2(data,"agentId");return id!==void 0?`[agent] ${id} stopped`:"[agent] stopped"},outcome:derivedFromValue("exitCode")},"strategy.changed":{description:"A project strategy changed (0838), minting a new strategy version for dispatch fencing.",fields:[field("data.projectPath","Project"),field("data.strategy","Strategy"),field("data.version","Version")],summary:({data})=>{let strategy=s2(data,"data.strategy"),version3=s2(data,"data.version");return strategy!==void 0?`[strategy] ${strategy}${version3!==void 0?` (v${version3})`:""}`:"[strategy] changed"},outcome:unsupported},"fleet.capacity.changed":{description:"The project write slot was claimed or released (0837), changing dispatch capacity.",fields:[field("data.projectPath","Project"),field("data.change","Change"),field("data.holderId","Holder")],summary:({data})=>{let change=s2(data,"data.change"),holder=s2(data,"data.holderId");return`[fleet] write slot ${change??"changed"}${holder!==void 0?` — ${holder}`:""}`},outcome:unsupported},"agent.message.sent":{description:"A message was sent to an agent, reporting delivery success.",fields:[field("agentId","Agent"),field("ok","Delivered")],summary:({data})=>{let id=s2(data,"agentId");return id!==void 0?`[agent] message -> ${id}`:"[agent] message sent"},outcome:derivedFromValue("ok")},"task.assigned":{description:"A task was assigned to an agent, naming the agent when resolved.",fields:[field("memberId","Member"),field("agentType","Agent type"),field("taskId","Task"),field("outcome","Outcome")],summary:({data})=>{let member=s2(data,"memberId"),task=s2(data,"taskId");return task!==void 0&&member!==void 0?`[task] ${task} assigned to ${member}`:"[task] assignment recorded"},outcome:derivedFrom("outcome")},"history.import.completed":{description:"A history import finished, reporting files, messages, and exit code.",fields:[field("source","Source"),field("sources","Sources"),field("files","Files"),field("messages","Messages"),field("durationMs","Duration (ms)"),field("exitCode","Exit code"),field("artifactPath","Artifact"),field("cwd","Project root")],retain:[field("trigger","Refresh trigger"),field("windowStart","Refresh window start"),field("windowEnd","Refresh window end"),field("importMode","Import mode"),field("coverage","Refresh coverage")],summary:({data})=>{let source=s2(data,"source")??s2(data,"sources");return source!==void 0?`[history] import · ${source}`:"[history] import completed"},outcome:derivedFromValue("exitCode")},"history.analyze.completed":{description:"A history analyze pass finished, reporting sources, duration, and exit code.",fields:[field("source","Source"),field("sources","Sources"),field("durationMs","Duration (ms)"),field("exitCode","Exit code"),field("artifactPath","Artifact")],retain:[field("trigger","Refresh trigger"),field("windowStart","Refresh window start"),field("windowEnd","Refresh window end"),field("importMode","Import mode")],summary:({data})=>{let source=s2(data,"source")??s2(data,"sources");return source!==void 0?`[history] analyze · ${source}`:"[history] analyze completed"},outcome:derivedFromValue("exitCode")},"history.daily.failed":{description:"The daily history refresh failed, carrying the detail, reason, and exit code.",fields:[field("source","Source"),field("sources","Sources"),field("detail","Detail"),field("reason","Reason"),field("exitCode","Exit code")],retain:[field("trigger","Refresh trigger"),field("windowStart","Refresh window start"),field("windowEnd","Refresh window end"),field("importMode","Import mode")],summary:()=>"[history] daily failed",outcome:{support:"derived",derive:({data})=>s2(data,"reason")??s2(data,"detail")??n2(data,"exitCode")}},"history.refresh.enqueued":{description:"A completion-triggered history refresh was enqueued, naming its window.",fields:[field("trigger","Trigger"),field("triggerId","Trigger id"),field("jobId","Queue job"),field("windowStart","Window start"),field("windowEnd","Window end"),field("coalesced","Coalesced"),field("outcome","Outcome")],summary:({data})=>{let start=s2(data,"windowStart"),end=s2(data,"windowEnd");return start!==void 0&&end!==void 0?`[history] refresh · ${start} -> ${end}`:"[history] refresh enqueued"},outcome:{support:"derived",derive:({data})=>{let status=s2(data,"outcome");return status!==void 0&&status!=="enqueued"?status:void 0}}},"rule.run.start":{description:"A rule run began with the rule count it will evaluate.",fields:[field("runId","Run"),field("ruleCount","Rules"),field("evaluator","Evaluator")],summary:({data,correlation})=>{let run=s2(data,"runId")??correlation.runId;return run!==void 0?`[rule] run ${run} started`:"[rule] run started"},outcome:unsupported},"rule.eval.start":{description:"A single rule began evaluating.",fields:[field("runId","Run"),field("ruleId","Rule"),field("evaluator","Evaluator"),field("index","Index"),field("total","Total")],summary:({data})=>{let id=s2(data,"ruleId");return id!==void 0?`[rule] ${id} evaluating`:"[rule] evaluating"},outcome:unsupported},"rule.eval.done":{description:"A rule finished evaluating, reporting its findings count and severity.",fields:[field("runId","Run"),field("ruleId","Rule"),field("evaluator","Evaluator"),field("findings","Findings"),field("durationMs","Duration (ms)"),field("severity","Severity")],summary:({data})=>{let id=s2(data,"ruleId");return id!==void 0?`[rule] ${id} evaluated`:"[rule] evaluated"},outcome:derivedFromValue("findings")},"rule.eval.error":{description:"A rule evaluation failed with an error.",fields:[field("runId","Run"),field("ruleId","Rule"),field("evaluator","Evaluator"),field("error","Error")],summary:({data})=>{let id=s2(data,"ruleId");return id!==void 0?`[rule] ${id} error`:"[rule] error"},outcome:derivedFrom("error")},"rule.run.done":{description:"A rule run finished, reporting findings and whether it stopped early.",fields:[field("runId","Run"),field("findings","Findings"),field("durationMs","Duration (ms)"),field("stoppedEarly","Stopped early"),field("severity","Severity")],summary:({data,correlation})=>{let run=s2(data,"runId")??correlation.runId;return run!==void 0?`[rule] run ${run} done`:"[rule] run done"},outcome:{support:"derived",derive:({data})=>n2(data,"findings")??s2(data,"stoppedEarly")}},"workflow.run.started":{description:"A workflow run started, naming the workflow definition.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("mode","Mode"),field("dryRun","Dry run")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} started`:"[workflow] started"},outcome:unsupported},"workflow.run.done":{description:"A workflow run reached a done terminal state.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("finalState","Final state"),field("transitionsTaken","Transitions")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} done`:"[workflow] done"},outcome:derivedFrom("finalState")},"workflow.run.failed":{description:"A workflow run failed with a terminal failure reason.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("finalState","Final state"),field("reason","Reason")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} failed`:"[workflow] failed"},outcome:derivedFrom("reason")},"workflow.run.finalized":{description:"A workflow run settled on a terminal status.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("status","Status")],summary:(input)=>{let name=humanWorkflowTitle(input);return name!==""?`[workflow] ${name} finalized`:"[workflow] finalized"},outcome:derivedFrom("status")},"workflow.escalation.created":{description:"A canonical escalation packet was projected from existing run evidence.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("fingerprint","Fingerprint"),field("artifactPath","Artifact"),field("decision","Decision")],summary:(input)=>{let name=humanWorkflowTitle(input),decision=typeof at(input.data,"decision")==="string"?` — ${String(at(input.data,"decision"))}`:"";return name!==""?`[workflow] escalation packet created (${name}${decision})`:`[workflow] escalation packet created${decision}`},outcome:derivedFrom("decision")},"workflow.escalation.projection_failed":{description:"Escalation packet projection failed; the original failure is preserved untouched.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("error","Error")],summary:()=>"[workflow] escalation packet projection failed",outcome:derivedFrom("error")},"workflow.run.paused":{description:"A workflow run paused at a step, naming the step when available.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("transitionsTaken","Transitions")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} paused`:"[workflow] paused"},outcome:unsupported},"workflow.run.resumed":{description:"A paused workflow run resumed at a step, naming the step when available.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} resumed`:"[workflow] resumed"},outcome:unsupported},"workflow.run.reseeded":{description:"A workflow run was reseeded to a new state, naming the transition.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("fromState","From"),field("toState","To")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"fromState"),to=s2(input.data,"toState");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} : ${from} -> ${to}`:`[workflow] : ${from} -> ${to}`;return name!==""?`[workflow] ${name} reseeded`:"[workflow] reseeded"},outcome:derivedFrom("toState")},"workflow.node.enter":{description:"The engine entered a workflow node, naming the step when available.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("transitionsTaken","Transitions")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] node entered"},outcome:unsupported},"workflow.phase":{description:"A workflow phase changed status, naming the phase.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("phase","Phase"),field("status","Status")],summary:(input)=>{let name=humanWorkflowTitle(input),phase=s2(input.data,"phase"),parts=[name,phase].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] phase"},outcome:derivedFrom("status")},"workflow.node.transition":{description:"A workflow transitioned between nodes, naming the from and to states.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("trigger","Trigger")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} : ${from} -> ${to}`:`[workflow] : ${from} -> ${to}`;return name!==""?`[workflow] ${name} transitioned`:"[workflow] transitioned"},outcome:derivedFrom("to")},"workflow.transition":{description:"A workflow state transition was committed.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("trigger","Trigger")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} : ${from} -> ${to}`:`[workflow] : ${from} -> ${to}`;return name!==""?`[workflow] ${name} transitioned`:"[workflow] transitioned"},outcome:derivedFrom("to")},"workflow.transition.requested":{description:"A workflow transition was requested and accepted for evaluation.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("trigger","Trigger")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} requested ${from} -> ${to}`:`[workflow] requested ${from} -> ${to}`;return name!==""?`[workflow] ${name} transition requested`:"[workflow] transition requested"},outcome:unsupported},"workflow.transition.denied":{description:"A workflow transition was denied with a reason.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("reason","Reason")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} denied ${from} -> ${to}`:`[workflow] denied ${from} -> ${to}`;return name!==""?`[workflow] ${name} transition denied`:"[workflow] transition denied"},outcome:derivedFrom("reason")},"workflow.action.started":{description:"A workflow action began executing, naming the step and kind.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("actionId","Action"),field("kind","Kind")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} started`:"[workflow] action started"},outcome:unsupported},"workflow.action.finished":{description:"A workflow action finished, reporting its status and success.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("actionId","Action"),field("kind","Kind"),field("durationMs","Duration (ms)"),field("status","Status")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} finished`:"[workflow] action finished"},outcome:{support:"derived",derive:({data})=>s2(data,"status")??n2(data,"ok")}},"workflow.action.failed_continue":{description:"A workflow action failed but the workflow continued, carrying the error.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("transitionsTaken","Transitions"),field("error","Error")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} failed; continuing`:"[workflow] action failed; continuing"},outcome:derivedFrom("error")},"workflow.guard.evaluated":{description:"A workflow guard was evaluated for a transition, reporting whether it passed.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("from","From"),field("to","To"),field("kind","Kind"),field("passed","Passed")],summary:(input)=>{let name=humanWorkflowTitle(input),from=s2(input.data,"from"),to=s2(input.data,"to");if(from!==void 0&&to!==void 0)return name!==""?`[workflow] ${name} guard ${from} -> ${to}`:`[workflow] guard ${from} -> ${to}`;return name!==""?`[workflow] ${name} guard evaluated`:"[workflow] guard evaluated"},outcome:derivedFromValue("passed")},"workflow.hitl.ask":{description:"A workflow paused for human input, naming the step and kind.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("kind","Kind")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} awaiting input`:"[workflow] awaiting input"},outcome:unsupported},"workflow.hitl.response":{description:"Human input was received for a paused workflow step.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node"),field("ok","Accepted")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} input received`:"[workflow] input received"},outcome:derivedFromValue("ok")},"workflow.hitl.note":{description:"A note was recorded on a paused workflow step.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("nodeLabel","Step"),field("node","Node")],summary:(input)=>{let name=humanWorkflowTitle(input),step=humanStepLabel(input.data),parts=[name,step].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")} note`:"[workflow] note"},outcome:unsupported},"workflow.custom":{description:"A custom workflow event was emitted, naming the custom event.",fields:[field("runId","Run"),field("workflowName","Workflow"),field("name","Event")],summary:(input)=>{let name=humanWorkflowTitle(input),custom3=s2(input.data,"name"),parts=[name,custom3].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] custom"},outcome:unsupported},"workflow.agent":{description:"A workflow-dispatched agent execution lifecycle event, discriminated by kind.",fields:[field("runId","Run"),field("executionId","Execution"),field("actionId","Action"),field("kind","Kind"),field("agent","Agent"),field("model","Model")],retain:[field("metadata.agent","Agent"),field("metadata.role","Role"),field("routing.executor","Executor")],summary:(input)=>{let name=humanWorkflowTitle(input),kind=s2(input.data,"kind"),parts=[name,kind!==void 0?`agent ${kind}`:"agent"].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] agent"},outcome:{support:"derived",derive:({data})=>s2(data,"kind")==="finished"?s2(data,"outcome"):void 0}},"workflow.steering":{description:"A steering command was acknowledged for a workflow action boundary.",fields:[field("runId","Run"),field("actionId","Action"),field("operation","Operation"),field("actor","Actor"),field("accepted","Accepted"),field("state","State"),field("reason","Reason")],summary:(input)=>{let name=humanWorkflowTitle(input),operation=s2(input.data,"operation"),parts=[name,operation!==void 0?`steering ${operation}`:"steering"].filter((part)=>typeof part==="string"&&part!=="");return parts.length>0?`[workflow] ${parts.join(" · ")}`:"[workflow] steering"},outcome:{support:"derived",derive:({data})=>{let reason=s2(data,"reason");if(reason!==void 0)return reason;let accepted=at(data,"accepted");if(accepted===!0)return"accepted";if(accepted===!1)return"rejected";return s2(data,"state")}}},"api.request.error":{description:"An API request failed, naming the method, path, and status or error code.",fields:[field("method","Method"),field("path","Path"),field("status","Status"),field("code","Code"),field("requestId","Request"),field("error","Error")],summary:({data})=>{let method=s2(data,"method"),path8=s2(data,"path");return method!==void 0&&path8!==void 0?`[api] ${method} ${path8}`:"[api] request error"},outcome:{support:"derived",derive:({data})=>s2(data,"error")??s2(data,"code")??n2(data,"status")}},"bus.emit.done":{description:"An event was emitted to its handlers on the event bus.",fields:[field("event","Event"),field("handlers","Handlers"),field("durationMs","Duration (ms)")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} emitted`:"[bus] event emitted"},outcome:derivedFromValue("handlers")},"bus.emit.noop":{description:"An event was emitted but had no registered handlers.",fields:[field("event","Event"),field("handlers","Handlers"),field("durationMs","Duration (ms)")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} had no handlers`:"[bus] event had no handlers"},outcome:derivedFromValue("handlers")},"bus.handler.error":{description:"An event-bus handler threw an error while processing an event.",fields:[field("event","Event"),field("handlers","Handlers"),field("durationMs","Duration (ms)"),field("error","Error")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} handler error`:"[bus] handler error"},outcome:derivedFrom("error")},"bus.handler.async.enqueued":{description:"An event-bus handler was enqueued for asynchronous processing.",fields:[field("event","Event"),field("handlers","Handlers")],summary:({data})=>{let event=s2(data,"event");return event!==void 0?`[bus] ${event} handlers enqueued`:"[bus] handlers enqueued"},outcome:derivedFromValue("handlers")}};function inferSeverity(name){if(/(?:failed|error|denied)$/.test(name))return"error";if(/(?:retrying|paused|dropped)$/.test(name))return"warning";return"info"}function resolveCatalogEntry(base2){let profile=SOURCE_PROFILES[base2.source],presenter=SYSTEM_EVENT_PRESENTERS[base2.name];return{name:base2.name,prefix:base2.name.split(".")[0]??base2.name,source:base2.source,tier:base2.tier,persisted:!0,streamed:!0,payloadPolicy:base2.payloadPolicy,renderer:base2.renderer,...profile,...base2.producer!==void 0?{producerPackage:base2.producer.package,subsystem:base2.producer.subsystem}:{},severity:inferSeverity(base2.name),description:presenter.description,metadataFields:presenter.retain?[...presenter.fields,...presenter.retain.filter((r)=>!presenter.fields.some((f)=>f.path===r.path))]:presenter.fields,remediationKind:profile.remediationKind}}var SYSTEM_EVENT_CATALOG=BASE_CATALOG.map(resolveCatalogEntry),SYSTEM_EVENT_NAMES=SYSTEM_EVENT_CATALOG.map((entry)=>entry.name),SYSTEM_EVENT_PERSISTED_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="default").map((entry)=>entry.name),SYSTEM_EVENT_STREAMED_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="default").map((entry)=>entry.name),SYSTEM_EVENT_PREFIXES=Array.from(new Set(SYSTEM_EVENT_CATALOG.map((entry)=>entry.prefix))),SYSTEM_EVENT_DEFAULT_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="default").map((entry)=>entry.name),SYSTEM_EVENT_DIAGNOSTIC_NAMES=SYSTEM_EVENT_CATALOG.filter((entry)=>entry.tier==="diagnostic").map((entry)=>entry.name);var SYSTEM_EVENT_CATALOG_METADATA=SYSTEM_EVENT_CATALOG.map(({name,prefix,source,tier,renderer,producerPackage,subsystem,severity,description,metadataFields,remediationKind})=>({name,prefix,source,tier,renderer,producerPackage,subsystem,severity,description,metadataFields,remediationKind}));function workflowVersionLiteral(workflow){return typeof workflow.version==="string"&&workflow.version!==""?workflow.version:null}var{mkdirSync:mkdirSync2,writeFileSync:writeFileSync3}=await import("node:fs"),{readFile}=await import("node:fs/promises");function parseIdentityMetadata(raw){if(raw.trim()==="")return{};try{let parsed=JSON.parse(raw);if(parsed===null||typeof parsed!=="object"||Array.isArray(parsed))return null;return parsed}catch{return null}}async function openInlineRunProjectDb(workdir){let url2=join6(resolve4(workdir),".spur","spur.db");mkdirSync2(join6(url2,".."),{recursive:!0});let adapter=await createMigratedDb({url:url2});return{adapter,close:()=>adapter.close()}}var SAFE_RUN_ID_RE=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;async function persistWorktreeRuns(input){let fromDir=resolve4(input.fromWorkdir),toDir=resolve4(input.toWorkdir),source=await openInlineRunProjectDb(fromDir);try{for(let id of await listRunIds(source.adapter))if(!SAFE_RUN_ID_RE.test(id))throw new InvalidWorkflowRunIdError(id);let target=await openInlineRunProjectDb(toDir);try{let{persistedIds,skipped}=await transferRunTables(source.adapter,target.adapter),recordSkips=[];if(persistedIds.length>0){let fromRunDir=join6(fromDir,".spur","run"),toRunDir=join6(toDir,".spur","run");mkdirSync2(toRunDir,{recursive:!0});for(let id of persistedIds)for(let fileName of[`${id}.md`,`${id}.state.json`]){let sourceBytes=await readFile(join6(fromRunDir,fileName)),targetPath=join6(toRunDir,fileName),existing;try{existing=await readFile(targetPath)}catch{existing=void 0}if(existing!==void 0){if(existing.equals(sourceBytes))continue;recordSkips.push({id,reason:`record-conflict:${fileName}`});continue}writeFileSync3(targetPath,sourceBytes)}}return{ok:!0,persisted:persistedIds.length,skipped:[...skipped,...recordSkips]}}finally{target.close()}}finally{source.close()}}async function createOrAttachInlineRun(input){let runId=input.runId.trim();if(runId==="")return{ok:!1,error:"inline run setup requires a non-empty runId (driver Run setup step 2)"};let workdir=resolve4(input.workdir),resolved;try{let projection=input.inventory===void 0?void 0:parseWorkflowInventory(input.inventory);if(projection&&!projection.ok)return projection;let inventory=projection?.ok?projection.inventory:void 0;if(inventory&&(!inventory.source||inventory.kind!=="state-machine"))return{ok:!1,error:"inline run setup requires a state-machine inventory with definition source"};if(resolved=await resolveWorkflowDefinition(workdir,inventory?.source?.path??input.file,{validateSchema:!0,...input.embeddedSchemas!==void 0?{embeddedSchemas:input.embeddedSchemas}:{},...!inventory?{registered:input.registered}:{}}),(resolved.workflow.kind??"state-machine")!=="state-machine")return{ok:!1,error:"inline run setup requires a state-machine definition"};if(inventory?.source){let identity5=assertInventoryIdentity(inventory,resolved.digest);if(!identity5.ok)return identity5;if(inventory.name!==resolved.workflow.name)return{ok:!1,error:"inline run setup: inventory workflow name does not match its definition"};resolved={...resolved,layer:inventory.source.layer}}}catch(error51){return{ok:!1,error:`inline run setup could not resolve the workflow definition: ${error51.message}`}}let digest=resolved.digest,version3=workflowVersionLiteral(resolved.workflow),source={path:resolved.path,layer:resolved.layer,workdir},db2=await input.getDb(),existing=await new RunDao(db2).traceRowById(runId);if(existing!==void 0){let metadata=parseIdentityMetadata(existing.metadata_json);if(metadata===null)return{ok:!1,error:`inline run setup refuses run ${runId}: its existing row has malformed metadata_json, `+"so its identity cannot be verified — delete the stale run row or allocate a new run id"};let resumeDigest=typeof metadata.resumeDefinitionDigest==="string"?metadata.resumeDefinitionDigest:void 0,launchDigest=typeof metadata.definitionDigest==="string"?metadata.definitionDigest:void 0,effectiveDigest=resumeDigest??launchDigest;if(effectiveDigest===void 0)return{ok:!1,error:`inline run setup refuses run ${runId}: its existing row carries no definition digest `+"(pre-identity legacy row) — allocate a new run id instead of attaching an unverifiable identity"};if(effectiveDigest!==digest)return{ok:!1,error:`inline run setup refuses run ${runId}: the resolved definition digest (${digest}) does not match the run's recorded ${resumeDigest!==void 0?"resume":""} digest (${effectiveDigest}) — `+"a changed definition must resume through the explicit resume rules, not silently re-attach"};if(existing.workflow_name!==resolved.workflow.name)return{ok:!1,error:`inline run setup refuses run ${runId}: the run row records workflow "${existing.workflow_name}" but the resolved definition is "${resolved.workflow.name}" — conflicting run identity`};if(typeof metadata.definitionSource!=="object"||metadata.definitionSource===null||Array.isArray(metadata.definitionSource))return{ok:!1,error:`inline run setup refuses run ${runId}: its existing row carries no definition source `+"(path/layer/workdir) — allocate a new run id instead of attaching an unverifiable launch source"};let existingSource=metadata.definitionSource;if(!(typeof existingSource.path==="string"&&resolve4(existingSource.path)===resolved.path&&normalizePersistedWorkflowLayer(existingSource.layer)===resolved.layer&&typeof existingSource.workdir==="string"&&resolve4(existingSource.workdir)===workdir))return{ok:!1,error:`inline run setup refuses run ${runId}: the recorded definition source (${JSON.stringify(existingSource)}) does not match the resolved launch source (${JSON.stringify(source)}) — conflicting project/workdir identity`};return{ok:!0,attached:!0,runId,workflowName:resolved.workflow.name,definitionDigest:digest,workflowVersion:version3,resolvedPath:resolved.path,layer:resolved.layer,workdir,status:existing.status}}return await new WorkflowService(createDefaultWorkflowEngineHost(),new DbWorkflowPersistenceAdapter(db2)).createOrAttachRun({id:runId,workflow_name:resolved.workflow.name,mode:"state-machine",status:"running",started_at:new Date().toISOString(),completed_at:null,metadata_json:JSON.stringify({definitionDigest:digest,workflowVersion:version3,definitionSource:source})}),{ok:!0,attached:!1,runId,workflowName:resolved.workflow.name,definitionDigest:digest,workflowVersion:version3,resolvedPath:resolved.path,layer:resolved.layer,workdir,status:"running"}}async function runDecideForInlineRun(input){let optionsFile=join6(resolve4(input.workdir),input.optionsFile),raw;try{raw=JSON.parse(await readFile(optionsFile,"utf8"))}catch(error51){return{ok:!1,error:`decide: unreadable options file ${input.optionsFile}: ${String(error51)}`}}let parsed=DecideOptionsSchema.safeParse(raw);if(!parsed.success)return{ok:!1,error:`decide: invalid options — ${parsed.error.issues.map((i2)=>i2.message).join("; ")}`};let result=await new DecideActionRunner(createNodeFileSystem2(),{enabled:input.enabled}).execute(raw,{runId:"inline-decide",stateOrNodeId:"decide",workdir:resolve4(input.workdir),vars:{},env:{}});if(!result.ok||result.data===void 0)return{ok:!1,error:result.error??"decide: action failed without an error message"};let decision=result.data.decision;return{ok:!0,value:decision.value,degraded:decision.degraded,reason:decision.reason,source:decision.source,backend:decision.backend,confidence:decision.confidence,resultFile:join6(resolve4(input.workdir),parsed.data.resultFile),durationMs:decision.durationMs}}import{basename as basename2,join as join7}from"node:path";var FEATURE_RECEIPT_SCHEMA_VERSION=1,DEFAULT_FEATURE_VERIFICATION_CMD="bun run spur-check-feature",RECEIPT_ID_PATTERN=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function assertReceiptId(kind,id){if(!RECEIPT_ID_PATTERN.test(id)||id.includes(".."))throw Error(`invalid ${kind} for receipt path: ${JSON.stringify(id)}`)}function featureReceiptPaths(runDir,featureId2,runId){return assertReceiptId("featureId",featureId2),assertReceiptId("runId",runId),{runScoped:join7(runDir,`${runId}-feature-verification.json`),featureScoped:join7(runDir,`${featureId2}-feature-verification.json`),log:join7(runDir,`${runId}-feature-verification.log`),status:join7(runDir,`${runId}-feature-verification.status`)}}async function atomicWriteReceipt(fs2,path8,receipt){let body=`${JSON.stringify(receipt,null,4)}
1459
1488
  `,tmp=`${path8}.tmp`;await fs2.writeFile(tmp,body),await fs2.rename(tmp,path8)}async function startFeatureVerificationReceipt(fs2,runDir,options){let receipt={schemaVersion:FEATURE_RECEIPT_SCHEMA_VERSION,featureId:options.featureId,runId:options.runId,workdir:options.workdir,verifier:options.verifier,verificationCmd:options.verificationCmd,inputDigest:options.inputDigest,status:"RUNNING",startedAt:options.startedAt??new Date().toISOString().replace(/\.\d{3}Z$/,"Z"),completedAt:null},paths=featureReceiptPaths(runDir,options.featureId,options.runId);return await fs2.ensureDir(runDir),await atomicWriteReceipt(fs2,paths.runScoped,receipt),await atomicWriteReceipt(fs2,paths.featureScoped,receipt),receipt}async function completeFeatureVerificationReceipt(fs2,runDir,running,options){if(running.status!=="RUNNING")throw Error(`receipt for run ${running.runId} is already ${running.status}`);let receipt={...running,status:options.status,inputDigest:options.inputDigest??running.inputDigest,completedAt:options.completedAt??new Date().toISOString().replace(/\.\d{3}Z$/,"Z")},paths=featureReceiptPaths(runDir,receipt.featureId,receipt.runId);return await fs2.ensureDir(runDir),await atomicWriteReceipt(fs2,paths.runScoped,receipt),await atomicWriteReceipt(fs2,paths.featureScoped,receipt),await fs2.writeFile(paths.status,`${receipt.status}
1460
- `),receipt}function parseReceipt(raw){let parsed;try{parsed=JSON.parse(raw)}catch(err){throw Error(`not JSON (${String(err)})`)}if(parsed===null||typeof parsed!=="object")throw Error("not an object");let r=parsed;if(r.schemaVersion!==FEATURE_RECEIPT_SCHEMA_VERSION)throw Error(`schemaVersion must be ${FEATURE_RECEIPT_SCHEMA_VERSION}`);let v=r.verifier;if(typeof r.featureId!=="string"||typeof r.runId!=="string"||typeof r.workdir!=="string"||typeof v?.name!=="string"||typeof v?.sourcePath!=="string"||typeof v?.layer!=="string"||typeof v?.definitionDigest!=="string"||typeof r.verificationCmd!=="string"||typeof r.inputDigest!=="string"||r.status!=="RUNNING"&&r.status!=="PASS"&&r.status!=="FAIL"||typeof r.startedAt!=="string"||r.completedAt!==null&&typeof r.completedAt!=="string")throw Error("required fields missing or mistyped");return parsed}async function readReceiptCopy(fs2,path8,label){let raw;try{raw=await fs2.readFile(path8)}catch{throw Error(`no ${label} receipt at ${path8}; run the feature-scoped verification pass`)}try{return parseReceipt(raw)}catch(err){throw Error(`${label} receipt at ${basename2(path8)} is not a valid schema-v1 artifact (${String(err)})`)}}async function validateFeatureVerificationReceipt(fs2,options){let latest;try{latest=await readReceiptCopy(fs2,join6(options.runDir,`${options.featureId}-feature-verification.json`),"feature-latest")}catch(err){let message=String(err);return{ok:!1,reason:message.includes("not a valid")?"malformed":"missing",detail:message}}let paths=featureReceiptPaths(options.runDir,options.featureId,latest.runId);try{let runScoped=await readReceiptCopy(fs2,paths.runScoped,"run-scoped");if(JSON.stringify(runScoped)!==JSON.stringify(latest))return{ok:!1,reason:"divergent",detail:`run-scoped ${paths.runScoped} and feature-latest receipts disagree — a newer attempt started or the evidence was tampered with`}}catch(err){let message=String(err);return{ok:!1,reason:message.includes("not a valid")?"malformed":"missing",detail:message}}if(latest.featureId!==options.featureId)return{ok:!1,reason:"cross-feature",detail:`receipt belongs to feature "${latest.featureId}", not "${options.featureId}"`};if(latest.status==="FAIL")return{ok:!1,reason:"failed",detail:`verification pass recorded FAIL (started ${latest.startedAt}, ended ${latest.completedAt})`};if(latest.status==="RUNNING")return{ok:!1,reason:"run",detail:`verification pass is still RUNNING (started ${latest.startedAt}); no completion evidence exists`};if(options.runPort?.readRunRow){let row=await options.runPort.readRunRow(latest.runId);if(!row)return{ok:!1,reason:"run",detail:`run ${latest.runId} that recorded the receipt does not exist in the run store`};if(row.status!=="done")return{ok:!1,reason:"run",detail:`run ${latest.runId} is "${row.status}", not terminal done — the recording run never finished`};if(row.definitionDigest&&row.definitionDigest!==latest.verifier.definitionDigest)return{ok:!1,reason:"run",detail:`run ${latest.runId} attached with definition digest ${row.definitionDigest}, receipt records ${latest.verifier.definitionDigest}`};let recordedCmd;try{let vars=row.varsJson?JSON.parse(row.varsJson):void 0;if(vars&&typeof vars==="object"&&typeof vars.verificationCmd==="string")recordedCmd=vars.verificationCmd}catch{recordedCmd=void 0}if(recordedCmd!==void 0&&recordedCmd!==latest.verificationCmd)return{ok:!1,reason:"run",detail:`run ${latest.runId} recorded effective command "${recordedCmd}", receipt records "${latest.verificationCmd}"`};if(options.runPort.hasArtifact&&!await options.runPort.hasArtifact(latest.runId,paths.runScoped))return{ok:!1,reason:"run",detail:`receipt ${basename2(paths.runScoped)} is not registered as an artifact of run ${latest.runId}`}}let verifier=latest.verifier;if(verifier.name!==options.currentVerifier.name||verifier.sourcePath!==options.currentVerifier.sourcePath||verifier.layer!==options.currentVerifier.layer||verifier.definitionDigest!==options.currentVerifier.definitionDigest)return{ok:!1,reason:"contract-mismatch",detail:`receipt recorded verifier ${verifier.name}@${verifier.layer} (${verifier.definitionDigest}), completion evaluates ${options.currentVerifier.name}@${options.currentVerifier.layer} (${options.currentVerifier.definitionDigest}) — the selected definition changed after the pass`};if(latest.verificationCmd!==options.currentVerificationCmd)return{ok:!1,reason:"contract-mismatch",detail:`receipt recorded with verifier "${latest.verificationCmd}", completion evaluates the configured command "${options.currentVerificationCmd}"`};if(latest.inputDigest!==options.currentDigest)return{ok:!1,reason:"stale",detail:`receipt digest ${latest.inputDigest} ≠ current inputs ${options.currentDigest} — tree, spec, learnings or check contract changed after the pass`};return{ok:!0,receipt:latest}}async function captureFeatureReceiptDigest(repoRoot,featureContent,learningsContent){return ProofInputFingerprint.compute({cwd:repoRoot,featureContent,learningsContent})}var section_matrix_schema_default={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://gobing.ai/spur/schemas/section-matrix.schema.json",title:"Section-Status-Matrix Schema",description:"Validates the shipped section-matrix.yaml — which sections are required/optional/forbidden per task status. Design §3.2. Authored for ts-runtime's loadStructuredConfig validator (supports properties/required/additionalProperties + $defs/$ref/enum; NOT patternProperties/uniqueItems).",type:"object",required:["variants"],additionalProperties:!1,properties:{$schema:{type:"string",description:"JSON Schema ref this file validates against (loadStructuredConfig reads it)."},variants:{type:"object",description:"Map of template variant → per-status matrix. Variant names are extensible (user-defined variants allowed); each value is a variant.",additionalProperties:{$ref:"#/$defs/variant"}}},$defs:{section:{enum:["Background","Requirements","Acceptance Criteria","Q&A","Design","Plan","Solution","Root Cause","Testing","Review","References","Notes","History"],description:"Canonical task section vocabulary (DD-08). Any other value is a typo."},sectionList:{type:"array",items:{$ref:"#/$defs/section"}},entry:{type:"object",additionalProperties:!1,properties:{required:{$ref:"#/$defs/sectionList"},optional:{$ref:"#/$defs/sectionList"},forbidden:{$ref:"#/$defs/sectionList"},gate:{type:"boolean"}}},variant:{type:"object",additionalProperties:!1,description:"A variant may declare any subset of the 7 canonical statuses (enumerated below); an unknown status key is rejected.",properties:{backlog:{$ref:"#/$defs/entry"},todo:{$ref:"#/$defs/entry"},wip:{$ref:"#/$defs/entry"},testing:{$ref:"#/$defs/entry"},blocked:{$ref:"#/$defs/entry"},done:{$ref:"#/$defs/entry"},cancelled:{$ref:"#/$defs/entry"}}}}};var spur_config_schema_default={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://github.com/gobing-ai/spur/schemas/spur-config.schema.json",title:"Spur Project Configuration",description:"Schema for .spur/config.yaml — the single project configuration surface consumed by spur and (future) spur-server.",type:"object",properties:{$schema:{type:"string",description:"Reference to this schema for IDE validation. spur resolves this at runtime via loadStructuredConfig."},version:{type:"string",description:"Config schema version (string, not integer). Current recommended: '1.2' (config-1.2 layered global/project merge, ADR-033 executor tiers + planning blocks). '1' remains accepted for backward compatibility."},name:{type:"string",description:"Project name written by spur init."},bootstrap:{type:"object",description:"Portable bootstrap block consumed by @gobing-ai/ts-infra runNodeApplication. Shared across spur and spur-server.",properties:{logging:{type:"object",properties:{enabled:{type:"boolean",description:"Enable structured logging via LogTape."},level:{type:"string",enum:["trace","debug","info","warn","error","fatal"],description:"Minimum log level."},console:{type:"boolean",description:"Emit log records to console (stderr)."},json:{type:"boolean",description:"Format log records as JSON Lines. false = text format."},file:{type:"boolean",description:"Write log records to a file sink. Uses filePath when set, otherwise disabled."},filePath:{type:"string",description:"Path to the log file. Relative to project root. Default: .spur/logs/spur.log."}}},telemetry:{type:"object",properties:{enabled:{type:"boolean",description:"Enable OpenTelemetry tracing/metrics export."},serviceName:{type:"string",description:"Service name reported to OTel collectors."},environment:{type:"string",description:"Deployment environment label."}}},database:{type:"object",properties:{enabled:{type:"boolean",description:"Enable the SQLite database adapter."},driver:{type:"string",enum:["bun-sqlite"],description:"Database driver. Currently only bun-sqlite."},url:{type:"string",description:"Database file path. Supports ${DATABASE_URL} interpolation. Default: .spur/spur.db."}}},scheduler:{type:"object",properties:{enabled:{type:"boolean",description:"Enable the scheduled-task runner. OFF by default for CLI (run-once)."},jobs:{type:"array",description:"Declarative scheduled commands (task 0734). Each entry registers one scheduler tick that enqueues a `scheduler.custom` queue job running `command` through `/bin/sh -c`. Normalized and validated by @gobing-ai/ts-infra runNodeApplication before the server starts.",items:{type:"object",required:["name","command"],properties:{name:{type:"string",minLength:1,description:"Job name, unique across the list after trimming. Reported as the `scheduler.custom:<name>` display name on scheduler.job.executed."},command:{type:"string",minLength:1,description:"Shell command run by `/bin/sh -c` with the project root as cwd. Trusted operator input — never logged."},intervalMinutes:{type:"integer",minimum:1,maximum:35791,description:"Fixed interval in minutes. Mutually exclusive with `cron`. The upper bound is the Node timer ceiling (2147483647 ms)."},cron:{type:"string",minLength:1,description:"Five-field cron expression (minute hour day-of-month month day-of-week) evaluated in local time. Mutually exclusive with `intervalMinutes`."}},oneOf:[{required:["intervalMinutes"],not:{required:["cron"]}},{required:["cron"],not:{required:["intervalMinutes"]}}]}}}}}},agent:{type:"object",properties:{default:{type:"string",description:"Default role for `--agent auto` when nothing is declared (0542 R2). A role id (scribe, coder, reviewer, planner) selects its tier's cheapest eligible executor; a configured executor name still resolves during the transition with a one-time warning; any other value is rejected naming both accepted sets."},executors:{type:"array",description:"Named executor profiles: each pairs a canonical agent with an optional model override. Referenced by name from `agent.default` and stage model_policy (default-by-phase removed 0452).",items:{type:"object",required:["name","agent"],properties:{name:{type:"string",minLength:1,description:"Executor selector name (unique across the list)."},agent:{type:"string",minLength:1,description:"Canonical coding agent (claude, codex, gemini, pi, opencode, antigravity-cli, openclaw, hermes, omp)."},model:{type:"string",minLength:1,description:"Opaque model override passed straight to the agent (e.g. zai//glm-5.2). Applied only when the user passes no explicit --model."},tier:{type:"string",enum:["cheap","standard","capable-1","capable-2","capable-3"],description:"Capability tier for stage-registry adaptive model routing (ADR-033, 0343). Live values: cheap | standard | capable-1 | capable-2 | capable-3 (1=low output quality, 3=high within the capable band). A stage starts on the cheapest eligible executor meeting its model_policy min_tier. Bare legacy `capable` is accepted at runtime (zod preprocess → capable-1) during the deprecation window but is not part of this editor enum."},disabled:{description:"Routing kill-switch (111; ownership widened 0890): a disabled profile never serves a role, team, stage, or explicit selection, and doctor inventories it without probing. Omitted = enabled. Bare `true` is operator-owned (only humans write booleans); automatic writers emit the object form carrying owner (operator|quota|probe), since (RFC 3339) and reason.",anyOf:[{type:"boolean"},{type:"object",additionalProperties:!1,required:["owner","since","reason"],properties:{owner:{enum:["operator","quota","probe"]},since:{type:"string",format:"date-time",minLength:1},reason:{type:"string",minLength:1}}}]}}}},fleet:{type:"object",description:"The project's agent fleet (G65 / 0858): the single declaration of composition, the on/off switch, and the dispatch strategy. PROJECT LAYER ONLY — a global-layer agent.fleet fails the load. Replaces the retired .spur/fleet.json (0835) and agent.team (0857). Mirrors @gobing-ai/spur-config AgentFleetSchema (Zod is SSOT).",properties:{enabled:{type:"boolean",default:!1,description:"The single fleet switch. `spur serve` materializes and autostarts the roster only when true; an absent or disabled fleet starts nothing."},strategy:{type:"string",enum:["rest","gtd"],default:"rest",description:"Dispatch strategy, reconciled into project_strategy at serve start (0859). One name is added by a typed code change, not by config."},orchestrator:{type:"string",minLength:1,description:"memberLocalId of the one planner-role member carrying purpose: orchestrator. Absent = no orchestrator declared (never inferred)."},members:{type:"array",default:[],description:"The roster. Each member declares a role or an executor. `enabled: false` keeps the member's derived <role>-<n> id index but does not materialize it.",items:{type:"object",properties:{id:{type:"string",minLength:1,description:"Explicit stable id; wins over the derived <role>-<n> form."},role:{type:"string",enum:["scribe","coder","reviewer","planner"],description:"Layer-1 role id (closed vocabulary)."},executor:{type:"string",minLength:1,description:"Executor profile name or a raw canonical agent type."},purpose:{type:"string",description:"Free-form member purpose; `orchestrator` is the value the orchestrator pointer binds to."},enabled:{type:"boolean",description:"Default true. False preserves the member's derived id index without materializing it."}},anyOf:[{required:["role"]},{required:["executor"]}]}}}},roles:{type:"object",description:"Per-role tier/stage overrides over DEFAULT_AGENT_ROLES (0572 / ADR-061). Keys are the closed role vocabulary (scribe, coder, reviewer, planner); a present field replaces the default for that role, an omitted field keeps it. Mirrors @gobing-ai/spur-config AgentRoleConfigSchema (Zod is SSOT).",additionalProperties:{type:"object",properties:{tier:{type:"string",enum:["cheap","standard","capable-1","capable-2","capable-3"],description:"Replacement capability tier for the role. Must not sit below the highest min_tier among the role's folded stages (enforced at the CLI boundary)."},stages:{type:"array",minItems:1,items:{type:"string",minLength:1},description:"Replacement folded-stage list for the role. Ids must come from the canonical stage registry (validated at the CLI boundary). Omit the field to keep the default — an empty array is rejected."}}}}}},rules:{type:"object",properties:{paths:{type:"array",items:{type:"string"},description:"Glob paths to rule files."}}},workflows:{type:"object",properties:{paths:{type:"array",items:{type:"string"},description:"Glob paths to workflow directories."}}},redaction:{type:"object",properties:{enabled:{type:"boolean",description:"Enable sensitive-data redaction in CLI output."}}},history:{type:"object",description:"History import/analyze configuration (feature E3). Opt-in operation-triggered refresh.",properties:{refresh:{type:"object",properties:{on_completion:{type:"boolean",description:"Enqueue a coalesced history refresh when a task or pipeline run completes. Default false (opt-in; hidden automation is out of contract)."},debounce_ms:{type:"integer",minimum:0,description:"Coalescing window in milliseconds. Completions inside the window join one pending refresh. Default 60000."}}}}},builder:{type:"object",description:"Builder noun configuration. Currently hosts the release plumbing knobs for `spur builder bump-ver` / `drop-tags`; every field defaults to the built-in release convention, so an absent builder section keeps default behavior.",properties:{"bump-ver":{type:"object",description:"Release knobs for bump-ver/drop-tags. Defaults: -v separator, publish.yml workflow, chore(release) commit, gh run list limit 5.",properties:{aggregatePackage:{type:"string",minLength:1,description:'Package whose own release tag is the publish trigger for the aggregate (--all) path, as an unscoped package id (e.g. "spur" for @gobing-ai/spur). Default: the package whose full name equals the workspace root manifest name.'},tagVersionSeparator:{type:"string",minLength:1,description:'Release tag format: <package><separator><version>. Default "-v".'},publishWorkflow:{type:"string",minLength:1,description:'GitHub Actions workflow file the pushed release tag triggers. Default "publish.yml".'},releaseCommitType:{type:"string",minLength:1,description:'Conventional commit type for the release commit. Default "chore".'},releaseCommitScope:{type:"string",minLength:1,description:'Conventional commit scope for the release commit. Default "release".'},ghRunListLimit:{type:"integer",minimum:1,description:"gh run list --limit used to point at the triggered publish run. Default 5."},versionCarriers:{type:"array",description:"Extra version carriers beyond workspace package.json files. Default: none. Types are registered in apps/cli/src/version-carriers.ts (registerCarrierType), which validates instances at release time; registering a new type extends this description in the same commit.",items:{type:"object",description:"One carrier instance. Required field: type (string). Built-ins: plugin-manifest { paths: [..] } — repo-wide manifests synced to the release version (e.g. per-platform plugin.json mirrors); ts-literal { file?, identifier? } — version constant in a package source file (defaults src/config.ts / binaryVersion).",properties:{type:{type:"string",minLength:1}},required:["type"]}}}}}},tasks:{type:"object",description:"Task-folder registration (design §9). Absorbs the legacy docs/.tasks/config.json folders + baseCounter concepts. Mirrors @gobing-ai/spur-config tasksConfigSchema (Zod is SSOT).",properties:{folders:{type:"object",description:"Map of task-folder path → folder config.",additionalProperties:{type:"object",properties:{baseCounter:{type:"integer",minimum:0,description:"WBS base counter for new tasks in this folder. Default 0."},label:{type:"string",description:"Human-readable folder label."}}}},active:{type:"string",description:"Default folder for `spur task create`. Default: docs/tasks."},severity:{type:"object",description:"Rule severity overrides map by code (error | warning | off).",additionalProperties:{type:"string",enum:["error","warning","off"]}}}},features:{type:"object",description:"Feature directory location (design §9). Mirrors @gobing-ai/spur-config featuresConfigSchema (Zod is SSOT).",properties:{dir:{type:"string",description:"Feature files directory. Default: docs/features."}}}}};var state_machine_workflow_schema_default={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://github.com/gobing-ai/spur/schemas/state-machine-workflow.schema.json",title:"@gobing-ai/ts-dual-workflow-engine State-machine Workflow",type:"object",additionalProperties:!1,required:["name","initialState","states","transitions"],properties:{$schema:{type:"string"},kind:{const:"state-machine"},name:{type:"string",minLength:1},version:{type:"string",minLength:1,description:"Optional behavior-neutral identity tag (0756). Absent = unversioned; present = a non-empty opaque literal surfaced as explicit(<literal>). Not parsed, ordered, or compatibility-checked; no registry."},description:{type:"string"},initialState:{type:"string",minLength:1},terminalStates:{type:"array",items:{type:"string",minLength:1}},failureStates:{type:"array",items:{type:"string",minLength:1},description:"Subset of terminalStates whose reach finalizes the run as failed. Absent ⇒ every terminal is a success."},iterationBound:{type:"integer",exclusiveMinimum:0},vars:{type:"object",propertyNames:{pattern:"^[A-Za-z_][A-Za-z0-9_]*$"},additionalProperties:{type:"string"}},env:{type:"object",additionalProperties:!1,properties:{allow:{type:"array",items:{type:"string",pattern:"^[A-Za-z_][A-Za-z0-9_]*$"}}}},extensions:{type:"object",additionalProperties:!1,properties:{actions:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}},guards:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}}}},states:{type:"array",items:{type:"object",additionalProperties:!1,required:["id"],properties:{id:{type:"string",minLength:1},description:{type:"string"},pause:{type:"boolean",description:"When true, the engine pauses the run at this state for HITL (E3); resume with `spur workflow continue`."},onEnter:{type:"array",items:{$ref:"#/$defs/action"}},onExit:{type:"array",items:{$ref:"#/$defs/action"}}}}},transitions:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},description:{type:"string"},trigger:{type:"string"},guard:{$ref:"#/$defs/guard"}}}}},$defs:{action:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0},onError:{type:"string",enum:["fail","continue"],description:"Per-action error handling policy: 'fail' halts the run; 'continue' logs the failure and proceeds so transition guards can route the outcome."}}},guard:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0}}},relativeExtensionPath:{type:"string",minLength:1,description:"Relative module path; absolute paths and '..' traversal are forbidden.",not:{anyOf:[{pattern:"^[/\\\\]"},{pattern:"^[A-Za-z]:[/\\\\]"},{pattern:"(^|[/\\\\])\\.\\.([/\\\\]|$)"}]}}}};var transition_flow_workflow_schema_default={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://github.com/gobing-ai/spur/schemas/transition-flow-workflow.schema.json",title:"@gobing-ai/ts-dual-workflow-engine Transition-flow Workflow",type:"object",additionalProperties:!1,required:["kind","name","initialNode","nodes","edges"],properties:{$schema:{type:"string"},kind:{const:"transition-flow"},name:{type:"string",minLength:1},version:{type:"string",minLength:1,description:"Optional behavior-neutral identity tag (0756). Absent = unversioned; present = a non-empty opaque literal surfaced as explicit(<literal>). Not parsed, ordered, or compatibility-checked; no registry."},description:{type:"string"},initialNode:{type:"string",minLength:1},terminalNodes:{type:"array",items:{type:"string",minLength:1}},iterationBound:{type:"integer",exclusiveMinimum:0},vars:{type:"object",propertyNames:{pattern:"^[A-Za-z_][A-Za-z0-9_]*$"},additionalProperties:{type:"string"}},env:{type:"object",additionalProperties:!1,properties:{allow:{type:"array",items:{type:"string",pattern:"^[A-Za-z_][A-Za-z0-9_]*$"}}}},extensions:{type:"object",additionalProperties:!1,properties:{actions:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}},guards:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}}}},nodes:{type:"array",items:{type:"object",additionalProperties:!1,required:["id"],properties:{id:{type:"string",minLength:1},description:{type:"string"},type:{enum:["action","gate","parallel","decision"]},action:{$ref:"#/$defs/action"}}}},edges:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},description:{type:"string"},condition:{$ref:"#/$defs/guard"}}}}},$defs:{action:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0},onError:{type:"string",enum:["fail","continue"],description:"Per-action error handling policy: 'fail' halts the run; 'continue' logs the failure and proceeds so edge conditions can route the outcome."}}},guard:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0}}},relativeExtensionPath:{type:"string",minLength:1,description:"Relative module path; absolute paths and '..' traversal are forbidden.",not:{anyOf:[{pattern:"^[/\\\\]"},{pattern:"^[A-Za-z]:[/\\\\]"},{pattern:"(^|[/\\\\])\\.\\.([/\\\\]|$)"}]}}}};var EMBEDDED_SPUR_SCHEMAS=new Map([["schemas/spur-config.schema.json",JSON.stringify(spur_config_schema_default)],["schemas/section-matrix.schema.json",JSON.stringify(section_matrix_schema_default)],["schemas/state-machine-workflow.schema.json",JSON.stringify(state_machine_workflow_schema_default)],["schemas/transition-flow-workflow.schema.json",JSON.stringify(transition_flow_workflow_schema_default)]]);export{validateFeatureVerificationReceipt,startFeatureVerificationReceipt,splitLaunchCommand,resolveWorkflowDefinition,readProofInputContents,openInlineRunProjectDb,featureReceiptPaths,createWorkflowActionTraceWriter,createOrAttachInlineRun,computeProofInputFingerprint,completeFeatureVerificationReceipt,captureFeatureReceiptDigest,RunDao,EMBEDDED_SPUR_SCHEMAS,DEFAULT_FEATURE_VERIFICATION_CMD,ArtifactDao};
1489
+ `),receipt}function parseReceipt(raw){let parsed;try{parsed=JSON.parse(raw)}catch(err){throw Error(`not JSON (${String(err)})`)}if(parsed===null||typeof parsed!=="object")throw Error("not an object");let r=parsed;if(r.schemaVersion!==FEATURE_RECEIPT_SCHEMA_VERSION)throw Error(`schemaVersion must be ${FEATURE_RECEIPT_SCHEMA_VERSION}`);let v=r.verifier;if(typeof r.featureId!=="string"||typeof r.runId!=="string"||typeof r.workdir!=="string"||typeof v?.name!=="string"||typeof v?.sourcePath!=="string"||typeof v?.layer!=="string"||typeof v?.definitionDigest!=="string"||typeof r.verificationCmd!=="string"||typeof r.inputDigest!=="string"||r.status!=="RUNNING"&&r.status!=="PASS"&&r.status!=="FAIL"||typeof r.startedAt!=="string"||r.completedAt!==null&&typeof r.completedAt!=="string")throw Error("required fields missing or mistyped");return parsed}async function readReceiptCopy(fs2,path8,label){let raw;try{raw=await fs2.readFile(path8)}catch{throw Error(`no ${label} receipt at ${path8}; run the feature-scoped verification pass`)}try{return parseReceipt(raw)}catch(err){throw Error(`${label} receipt at ${basename2(path8)} is not a valid schema-v1 artifact (${String(err)})`)}}async function validateFeatureVerificationReceipt(fs2,options){let latest;try{latest=await readReceiptCopy(fs2,join7(options.runDir,`${options.featureId}-feature-verification.json`),"feature-latest")}catch(err){let message=String(err);return{ok:!1,reason:message.includes("not a valid")?"malformed":"missing",detail:message}}let paths=featureReceiptPaths(options.runDir,options.featureId,latest.runId);try{let runScoped=await readReceiptCopy(fs2,paths.runScoped,"run-scoped");if(JSON.stringify(runScoped)!==JSON.stringify(latest))return{ok:!1,reason:"divergent",detail:`run-scoped ${paths.runScoped} and feature-latest receipts disagree — a newer attempt started or the evidence was tampered with`}}catch(err){let message=String(err);return{ok:!1,reason:message.includes("not a valid")?"malformed":"missing",detail:message}}if(latest.featureId!==options.featureId)return{ok:!1,reason:"cross-feature",detail:`receipt belongs to feature "${latest.featureId}", not "${options.featureId}"`};if(latest.status==="FAIL")return{ok:!1,reason:"failed",detail:`verification pass recorded FAIL (started ${latest.startedAt}, ended ${latest.completedAt})`};if(latest.status==="RUNNING")return{ok:!1,reason:"run",detail:`verification pass is still RUNNING (started ${latest.startedAt}); no completion evidence exists`};if(options.runPort?.readRunRow){let row=await options.runPort.readRunRow(latest.runId);if(!row)return{ok:!1,reason:"run",detail:`run ${latest.runId} that recorded the receipt does not exist in the run store`};if(row.status!=="done")return{ok:!1,reason:"run",detail:`run ${latest.runId} is "${row.status}", not terminal done — the recording run never finished`};if(row.definitionDigest&&row.definitionDigest!==latest.verifier.definitionDigest)return{ok:!1,reason:"run",detail:`run ${latest.runId} attached with definition digest ${row.definitionDigest}, receipt records ${latest.verifier.definitionDigest}`};let recordedCmd;try{let vars=row.varsJson?JSON.parse(row.varsJson):void 0;if(vars&&typeof vars==="object"&&typeof vars.verificationCmd==="string")recordedCmd=vars.verificationCmd}catch{recordedCmd=void 0}if(recordedCmd!==void 0&&recordedCmd!==latest.verificationCmd)return{ok:!1,reason:"run",detail:`run ${latest.runId} recorded effective command "${recordedCmd}", receipt records "${latest.verificationCmd}"`};if(options.runPort.hasArtifact&&!await options.runPort.hasArtifact(latest.runId,paths.runScoped))return{ok:!1,reason:"run",detail:`receipt ${basename2(paths.runScoped)} is not registered as an artifact of run ${latest.runId}`}}let verifier=latest.verifier,current=options.currentVerifier,drifted=["name","layer","definitionDigest"].filter((k)=>verifier[k]!==current[k]);if(drifted.length>0)return{ok:!1,reason:"contract-mismatch",detail:`receipt recorded verifier ${verifier.name}@${verifier.layer} (${verifier.definitionDigest}), completion evaluates ${current.name}@${current.layer} (${current.definitionDigest}) — the selected definition changed after the pass (${drifted.join(", ")})`};if(latest.verificationCmd!==options.currentVerificationCmd)return{ok:!1,reason:"contract-mismatch",detail:`receipt recorded with verifier "${latest.verificationCmd}", completion evaluates the configured command "${options.currentVerificationCmd}"`};if(latest.inputDigest!==options.currentDigest)return{ok:!1,reason:"stale",detail:`receipt digest ${latest.inputDigest} ≠ current inputs ${options.currentDigest} — tree, spec, learnings or check contract changed after the pass`};return{ok:!0,receipt:latest}}async function captureFeatureReceiptDigest(repoRoot,featureContent,learningsContent){return ProofInputFingerprint.compute({cwd:repoRoot,featureContent,learningsContent})}var section_matrix_schema_default={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://gobing.ai/spur/schemas/section-matrix.schema.json",title:"Section-Status-Matrix Schema",description:"Validates the shipped section-matrix.yaml — which sections are required/optional/forbidden per task status. Design §3.2. Authored for ts-runtime's loadStructuredConfig validator (supports properties/required/additionalProperties + $defs/$ref/enum; NOT patternProperties/uniqueItems).",type:"object",required:["variants"],additionalProperties:!1,properties:{$schema:{type:"string",description:"JSON Schema ref this file validates against (loadStructuredConfig reads it)."},variants:{type:"object",description:"Map of template variant → per-status matrix. Variant names are extensible (user-defined variants allowed); each value is a variant.",additionalProperties:{$ref:"#/$defs/variant"}}},$defs:{section:{enum:["Background","Requirements","Acceptance Criteria","Q&A","Design","Plan","Solution","Root Cause","Testing","Review","References","Notes","History"],description:"Canonical task section vocabulary (DD-08). Any other value is a typo."},sectionList:{type:"array",items:{$ref:"#/$defs/section"}},entry:{type:"object",additionalProperties:!1,properties:{required:{$ref:"#/$defs/sectionList"},optional:{$ref:"#/$defs/sectionList"},forbidden:{$ref:"#/$defs/sectionList"},gate:{type:"boolean"}}},variant:{type:"object",additionalProperties:!1,description:"A variant may declare any subset of the 7 canonical statuses (enumerated below); an unknown status key is rejected.",properties:{backlog:{$ref:"#/$defs/entry"},todo:{$ref:"#/$defs/entry"},wip:{$ref:"#/$defs/entry"},testing:{$ref:"#/$defs/entry"},blocked:{$ref:"#/$defs/entry"},done:{$ref:"#/$defs/entry"},cancelled:{$ref:"#/$defs/entry"}}}}};var spur_config_schema_default={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://github.com/gobing-ai/spur/schemas/spur-config.schema.json",title:"Spur Project Configuration",description:"Schema for .spur/config.yaml — the single project configuration surface consumed by spur and (future) spur-server.",type:"object",properties:{$schema:{type:"string",description:"Reference to this schema for IDE validation. spur resolves this at runtime via loadStructuredConfig."},version:{type:"string",description:"Config schema version (string, not integer). Current recommended: '1.2' (config-1.2 layered global/project merge, ADR-033 executor tiers + planning blocks). '1' remains accepted for backward compatibility."},name:{type:"string",description:"Project name written by spur init."},bootstrap:{type:"object",description:"Portable bootstrap block consumed by @gobing-ai/ts-infra runNodeApplication. Shared across spur and spur-server.",properties:{logging:{type:"object",properties:{enabled:{type:"boolean",description:"Enable structured logging via LogTape."},level:{type:"string",enum:["trace","debug","info","warn","error","fatal"],description:"Minimum log level."},console:{type:"boolean",description:"Emit log records to console (stderr)."},json:{type:"boolean",description:"Format log records as JSON Lines. false = text format."},file:{type:"boolean",description:"Write log records to a file sink. Uses filePath when set, otherwise disabled."},filePath:{type:"string",description:"Path to the log file. Relative to project root. Default: .spur/logs/spur.log."}}},telemetry:{type:"object",properties:{enabled:{type:"boolean",description:"Enable OpenTelemetry tracing/metrics export."},serviceName:{type:"string",description:"Service name reported to OTel collectors."},environment:{type:"string",description:"Deployment environment label."}}},database:{type:"object",properties:{enabled:{type:"boolean",description:"Enable the SQLite database adapter."},driver:{type:"string",enum:["bun-sqlite"],description:"Database driver. Currently only bun-sqlite."},url:{type:"string",description:"Database file path. Supports ${DATABASE_URL} interpolation. Default: .spur/spur.db."}}},scheduler:{type:"object",properties:{enabled:{type:"boolean",description:"Enable the scheduled-task runner. OFF by default for CLI (run-once)."},jobs:{type:"array",description:"Declarative scheduled commands (task 0734). Each entry registers one scheduler tick that enqueues a `scheduler.custom` queue job running `command` through `/bin/sh -c`. Normalized and validated by @gobing-ai/ts-infra runNodeApplication before the server starts.",items:{type:"object",required:["name","command"],properties:{name:{type:"string",minLength:1,description:"Job name, unique across the list after trimming. Reported as the `scheduler.custom:<name>` display name on scheduler.job.executed."},command:{type:"string",minLength:1,description:"Shell command run by `/bin/sh -c` with the project root as cwd. Trusted operator input — never logged."},intervalMinutes:{type:"integer",minimum:1,maximum:35791,description:"Fixed interval in minutes. Mutually exclusive with `cron`. The upper bound is the Node timer ceiling (2147483647 ms)."},cron:{type:"string",minLength:1,description:"Five-field cron expression (minute hour day-of-month month day-of-week) evaluated in local time. Mutually exclusive with `intervalMinutes`."}},oneOf:[{required:["intervalMinutes"],not:{required:["cron"]}},{required:["cron"],not:{required:["intervalMinutes"]}}]}}}}}},agent:{type:"object",properties:{default:{type:"string",description:"Default role for `--agent auto` when nothing is declared (0542 R2). A role id (scribe, coder, reviewer, planner) selects its tier's cheapest eligible executor; a configured executor name still resolves during the transition with a one-time warning; any other value is rejected naming both accepted sets."},executors:{type:"array",description:"Named executor profiles: each pairs a canonical agent with an optional model override. Referenced by name from `agent.default` and stage model_policy (default-by-phase removed 0452).",items:{type:"object",required:["name","agent"],properties:{name:{type:"string",minLength:1,description:"Executor selector name (unique across the list)."},agent:{type:"string",minLength:1,description:"Canonical coding agent (claude, codex, gemini, pi, opencode, antigravity-cli, openclaw, hermes, omp)."},model:{type:"string",minLength:1,description:"Opaque model override passed straight to the agent (e.g. zai//glm-5.2). Applied only when the user passes no explicit --model."},tier:{type:"string",enum:["cheap","standard","capable-1","capable-2","capable-3"],description:"Capability tier for stage-registry adaptive model routing (ADR-033, 0343). Live values: cheap | standard | capable-1 | capable-2 | capable-3 (1=low output quality, 3=high within the capable band). A stage starts on the cheapest eligible executor meeting its model_policy min_tier. Bare legacy `capable` is accepted at runtime (zod preprocess → capable-1) during the deprecation window but is not part of this editor enum."},disabled:{description:"Routing kill-switch (111; ownership widened 0890): a disabled profile never serves a role, team, stage, or explicit selection, and doctor inventories it without probing. Omitted = enabled. Bare `true` is operator-owned (only humans write booleans); automatic writers emit the object form carrying owner (operator|quota|probe), since (RFC 3339) and reason.",anyOf:[{type:"boolean"},{type:"object",additionalProperties:!1,required:["owner","since","reason"],properties:{owner:{enum:["operator","quota","probe"]},since:{type:"string",format:"date-time",minLength:1},reason:{type:"string",minLength:1}}}]}}}},fleet:{type:"object",description:"The project's agent fleet (G65 / 0858): the single declaration of composition, the on/off switch, and the dispatch strategy. PROJECT LAYER ONLY — a global-layer agent.fleet fails the load. Replaces the retired .spur/fleet.json (0835) and agent.team (0857). Mirrors @gobing-ai/spur-config AgentFleetSchema (Zod is SSOT).",properties:{enabled:{type:"boolean",default:!1,description:"The single fleet switch. `spur serve` materializes and autostarts the roster only when true; an absent or disabled fleet starts nothing."},strategy:{type:"string",enum:["rest","gtd"],default:"rest",description:"Dispatch strategy, reconciled into project_strategy at serve start (0859). One name is added by a typed code change, not by config."},orchestrator:{type:"string",minLength:1,description:"memberLocalId of the one planner-role member carrying purpose: orchestrator. Absent = no orchestrator declared (never inferred)."},members:{type:"array",default:[],description:"The roster. Each member declares a role or an executor. `enabled: false` keeps the member's derived <role>-<n> id index but does not materialize it.",items:{type:"object",properties:{id:{type:"string",minLength:1,description:"Explicit stable id; wins over the derived <role>-<n> form."},role:{type:"string",enum:["scribe","coder","reviewer","planner"],description:"Layer-1 role id (closed vocabulary)."},executor:{type:"string",minLength:1,description:"Executor profile name or a raw canonical agent type."},purpose:{type:"string",description:"Free-form member purpose; `orchestrator` is the value the orchestrator pointer binds to."},enabled:{type:"boolean",description:"Default true. False preserves the member's derived id index without materializing it."}},anyOf:[{required:["role"]},{required:["executor"]}]}}}},roles:{type:"object",description:"Per-role tier/stage overrides over DEFAULT_AGENT_ROLES (0572 / ADR-061). Keys are the closed role vocabulary (scribe, coder, reviewer, planner); a present field replaces the default for that role, an omitted field keeps it. Mirrors @gobing-ai/spur-config AgentRoleConfigSchema (Zod is SSOT).",additionalProperties:{type:"object",properties:{tier:{type:"string",enum:["cheap","standard","capable-1","capable-2","capable-3"],description:"Replacement capability tier for the role. Must not sit below the highest min_tier among the role's folded stages (enforced at the CLI boundary)."},stages:{type:"array",minItems:1,items:{type:"string",minLength:1},description:"Replacement folded-stage list for the role. Ids must come from the canonical stage registry (validated at the CLI boundary). Omit the field to keep the default — an empty array is rejected."}}}}}},rules:{type:"object",properties:{paths:{type:"array",items:{type:"string"},description:"Glob paths to rule files."}}},workflows:{type:"object",properties:{paths:{type:"array",items:{type:"string"},description:"Glob paths to workflow directories."}}},redaction:{type:"object",properties:{enabled:{type:"boolean",description:"Enable sensitive-data redaction in CLI output."}}},history:{type:"object",description:"History import/analyze configuration (feature E3). Opt-in operation-triggered refresh.",properties:{refresh:{type:"object",properties:{on_completion:{type:"boolean",description:"Enqueue a coalesced history refresh when a task or pipeline run completes. Default false (opt-in; hidden automation is out of contract)."},debounce_ms:{type:"integer",minimum:0,description:"Coalescing window in milliseconds. Completions inside the window join one pending refresh. Default 60000."}}}}},builder:{type:"object",description:"Builder noun configuration. Currently hosts the release plumbing knobs for `spur builder bump-ver` / `drop-tags`; every field defaults to the built-in release convention, so an absent builder section keeps default behavior.",properties:{"bump-ver":{type:"object",description:"Release knobs for bump-ver/drop-tags. Defaults: -v separator, publish.yml workflow, chore(release) commit, gh run list limit 5.",properties:{aggregatePackage:{type:"string",minLength:1,description:'Package whose own release tag is the publish trigger for the aggregate (--all) path, as an unscoped package id (e.g. "spur" for @gobing-ai/spur). Default: the package whose full name equals the workspace root manifest name.'},tagVersionSeparator:{type:"string",minLength:1,description:'Release tag format: <package><separator><version>. Default "-v".'},publishWorkflow:{type:"string",minLength:1,description:'GitHub Actions workflow file the pushed release tag triggers. Default "publish.yml".'},releaseCommitType:{type:"string",minLength:1,description:'Conventional commit type for the release commit. Default "chore".'},releaseCommitScope:{type:"string",minLength:1,description:'Conventional commit scope for the release commit. Default "release".'},ghRunListLimit:{type:"integer",minimum:1,description:"gh run list --limit used to point at the triggered publish run. Default 5."},versionCarriers:{type:"array",description:"Extra version carriers beyond workspace package.json files. Default: none. Types are registered in apps/cli/src/version-carriers.ts (registerCarrierType), which validates instances at release time; registering a new type extends this description in the same commit.",items:{type:"object",description:"One carrier instance. Required field: type (string). Built-ins: plugin-manifest { paths: [..] } — repo-wide manifests synced to the release version (e.g. per-platform plugin.json mirrors); ts-literal { file?, identifier? } — version constant in a package source file (defaults src/config.ts / binaryVersion).",properties:{type:{type:"string",minLength:1}},required:["type"]}}}}}},tasks:{type:"object",description:"Task-folder registration (design §9). Absorbs the legacy docs/.tasks/config.json folders + baseCounter concepts. Mirrors @gobing-ai/spur-config tasksConfigSchema (Zod is SSOT).",properties:{folders:{type:"object",description:"Map of task-folder path → folder config.",additionalProperties:{type:"object",properties:{baseCounter:{type:"integer",minimum:0,description:"WBS base counter for new tasks in this folder. Default 0."},label:{type:"string",description:"Human-readable folder label."}}}},active:{type:"string",description:"Default folder for `spur task create`. Default: docs/tasks."},severity:{type:"object",description:"Rule severity overrides map by code (error | warning | off).",additionalProperties:{type:"string",enum:["error","warning","off"]}}}},features:{type:"object",description:"Feature directory location (design §9). Mirrors @gobing-ai/spur-config featuresConfigSchema (Zod is SSOT).",properties:{dir:{type:"string",description:"Feature files directory. Default: docs/features."}}}}};var state_machine_workflow_schema_default={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://github.com/gobing-ai/spur/schemas/state-machine-workflow.schema.json",title:"@gobing-ai/ts-dual-workflow-engine State-machine Workflow",type:"object",additionalProperties:!1,required:["name","initialState","states","transitions"],properties:{$schema:{type:"string"},kind:{const:"state-machine"},name:{type:"string",minLength:1},version:{type:"string",minLength:1,description:"Optional behavior-neutral identity tag (0756). Absent = unversioned; present = a non-empty opaque literal surfaced as explicit(<literal>). Not parsed, ordered, or compatibility-checked; no registry."},description:{type:"string"},initialState:{type:"string",minLength:1},terminalStates:{type:"array",items:{type:"string",minLength:1}},failureStates:{type:"array",items:{type:"string",minLength:1},description:"Subset of terminalStates whose reach finalizes the run as failed. Absent ⇒ every terminal is a success."},iterationBound:{type:"integer",exclusiveMinimum:0},vars:{type:"object",propertyNames:{pattern:"^[A-Za-z_][A-Za-z0-9_]*$"},additionalProperties:{type:"string"}},env:{type:"object",additionalProperties:!1,properties:{allow:{type:"array",items:{type:"string",pattern:"^[A-Za-z_][A-Za-z0-9_]*$"}}}},extensions:{type:"object",additionalProperties:!1,properties:{actions:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}},guards:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}}}},states:{type:"array",items:{type:"object",additionalProperties:!1,required:["id"],properties:{id:{type:"string",minLength:1},description:{type:"string"},pause:{type:"boolean",description:"When true, the engine pauses the run at this state for HITL (E3); resume with `spur workflow continue`."},onEnter:{type:"array",items:{$ref:"#/$defs/action"}},onExit:{type:"array",items:{$ref:"#/$defs/action"}}}}},transitions:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},terminalReason:{type:"string",description:"Closed terminal-reason enum declared when this edge finalizes the run (0937 R3; required for edges into failureStates)."},description:{type:"string"},trigger:{type:"string"},guard:{$ref:"#/$defs/guard"}}}}},$defs:{action:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0},onError:{type:"string",enum:["fail","continue"],description:"Per-action error handling policy: 'fail' halts the run; 'continue' logs the failure and proceeds so transition guards can route the outcome."}}},guard:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0}}},relativeExtensionPath:{type:"string",minLength:1,description:"Relative module path; absolute paths and '..' traversal are forbidden.",not:{anyOf:[{pattern:"^[/\\\\]"},{pattern:"^[A-Za-z]:[/\\\\]"},{pattern:"(^|[/\\\\])\\.\\.([/\\\\]|$)"}]}}}};var transition_flow_workflow_schema_default={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://github.com/gobing-ai/spur/schemas/transition-flow-workflow.schema.json",title:"@gobing-ai/ts-dual-workflow-engine Transition-flow Workflow",type:"object",additionalProperties:!1,required:["kind","name","initialNode","nodes","edges"],properties:{$schema:{type:"string"},kind:{const:"transition-flow"},name:{type:"string",minLength:1},version:{type:"string",minLength:1,description:"Optional behavior-neutral identity tag (0756). Absent = unversioned; present = a non-empty opaque literal surfaced as explicit(<literal>). Not parsed, ordered, or compatibility-checked; no registry."},description:{type:"string"},initialNode:{type:"string",minLength:1},terminalNodes:{type:"array",items:{type:"string",minLength:1}},iterationBound:{type:"integer",exclusiveMinimum:0},vars:{type:"object",propertyNames:{pattern:"^[A-Za-z_][A-Za-z0-9_]*$"},additionalProperties:{type:"string"}},env:{type:"object",additionalProperties:!1,properties:{allow:{type:"array",items:{type:"string",pattern:"^[A-Za-z_][A-Za-z0-9_]*$"}}}},extensions:{type:"object",additionalProperties:!1,properties:{actions:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}},guards:{type:"array",items:{$ref:"#/$defs/relativeExtensionPath"}}}},nodes:{type:"array",items:{type:"object",additionalProperties:!1,required:["id"],properties:{id:{type:"string",minLength:1},description:{type:"string"},type:{enum:["action","gate","parallel","decision"]},action:{$ref:"#/$defs/action"}}}},edges:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},description:{type:"string"},condition:{$ref:"#/$defs/guard"}}}}},$defs:{action:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0},onError:{type:"string",enum:["fail","continue"],description:"Per-action error handling policy: 'fail' halts the run; 'continue' logs the failure and proceeds so edge conditions can route the outcome."}}},guard:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",minLength:1},options:{type:"object",additionalProperties:!0}}},relativeExtensionPath:{type:"string",minLength:1,description:"Relative module path; absolute paths and '..' traversal are forbidden.",not:{anyOf:[{pattern:"^[/\\\\]"},{pattern:"^[A-Za-z]:[/\\\\]"},{pattern:"(^|[/\\\\])\\.\\.([/\\\\]|$)"}]}}}};var EMBEDDED_SPUR_SCHEMAS=new Map([["schemas/spur-config.schema.json",JSON.stringify(spur_config_schema_default)],["schemas/section-matrix.schema.json",JSON.stringify(section_matrix_schema_default)],["schemas/state-machine-workflow.schema.json",JSON.stringify(state_machine_workflow_schema_default)],["schemas/transition-flow-workflow.schema.json",JSON.stringify(transition_flow_workflow_schema_default)]]);export{validateFeatureVerificationReceipt,startFeatureVerificationReceipt,splitLaunchCommand,runDecideForInlineRun,resolveWorkflowDefinition,resolveDecideDecisionMakerEnabled,readProofInputContents,persistWorktreeRuns,openInlineRunProjectDb,featureReceiptPaths,createWorkflowActionTraceWriter,createOrAttachInlineRun,computeProofInputFingerprint,completeFeatureVerificationReceipt,captureFeatureReceiptDigest,RunDao,EMBEDDED_SPUR_SCHEMAS,DEFAULT_FEATURE_VERIFICATION_CMD,ArtifactDao};