@xtalpi/agentic-lab-skills 0.0.5 → 0.0.6

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.
@@ -6,7 +6,7 @@
6
6
  * 复用:在 SFC 的 `<style scoped lang="scss">` 内首行 `@import '@/styles/orbit-quasar-host.scss';`
7
7
  * (须 scoped + `:deep(.q-btn)`,否则子组件 DOM 无法命中)
8
8
  * 主题调整:新增/修改主色或全局 `q-btn` 表现请只改本文件;页面结构见 `src/views/bitable.vue`。
9
- * 按钮分工:`primary` 仅提交等持久化写回;`outline` 仅刷新/检查等页面数据交互(见 studio-orbit-vue-component SKILL 规则 2)。
9
+ * 按钮分工:`primary` 仅提交等持久化写回;`outline` 仅刷新/检查等页面数据交互(见 lab-orbit-component-builder SKILL 规则 2)。
10
10
  */
11
11
  .orbit-quasar-host {
12
12
  --orbit-primary: #123aff;
@@ -98,12 +98,21 @@ export function useBitablePage (getContext: () => XnbSuperCellContext): UseBitab
98
98
  }
99
99
  }
100
100
 
101
+ let _bootstrapCellKey = ''
102
+ let _bootstrapping = false
103
+
101
104
  async function runBootstrapSafe (): Promise<void> {
102
- if (!choreo.value) return
105
+ if (!choreo.value || _bootstrapping) return
106
+ const key = `${getContext().bookPath}|${getContext().cellUid}`
107
+ if (key === _bootstrapCellKey) return
108
+ _bootstrapping = true
109
+ _bootstrapCellKey = key
103
110
  try {
104
111
  await bootstrap()
105
112
  } catch {
106
113
  /* composable 内已 notify */
114
+ } finally {
115
+ _bootstrapping = false
107
116
  }
108
117
  }
109
118
 
@@ -188,18 +188,20 @@ export function useSuperTableBitableLifecycle (
188
188
  const lastAgenticRawTickets = ref<Record<string, unknown>[]>([])
189
189
  const cellUid = computed(() => getContext().cellUid || '')
190
190
 
191
+ let _prevBookPath = ''
192
+ let _prevCellUid = ''
193
+
191
194
  watch(
192
195
  () => [getContext().bookPath, getContext().cellUid, getContext().XNBBitable] as const,
193
196
  () => {
194
197
  const ctx = getContext()
198
+ const bp = ctx.bookPath
199
+ const cu = ctx.cellUid
200
+ if (bp === _prevBookPath && cu === _prevCellUid && choreo.value != null) return
201
+ _prevBookPath = bp
202
+ _prevCellUid = cu
195
203
  const Ctor = ctx.XNBBitable
196
- choreo.value =
197
- Ctor != null
198
- ? new Ctor({
199
- bookPath: ctx.bookPath,
200
- cellUid: ctx.cellUid
201
- })
202
- : null
204
+ choreo.value = Ctor != null ? new Ctor({ bookPath: bp, cellUid: cu }) : null
203
205
  },
204
206
  { immediate: true }
205
207
  )
@@ -242,7 +244,7 @@ export function useSuperTableBitableLifecycle (
242
244
  await x.addColumns(bitable, cols, [])
243
245
  handleBitable(bitable, sub)
244
246
  await x.updateSubBitable([bitable], { isMerge: false, name: DEMO_SUB_TABLE_NAME })
245
- if (typeof x.delay === 'function') await x.delay(20)
247
+ if (typeof x.delay === 'function') await x.delay(300)
246
248
  }
247
249
 
248
250
  async function createEmptyBitable (isMerge = false): Promise<void> {
@@ -254,13 +256,18 @@ export function useSuperTableBitableLifecycle (
254
256
  await x.addColumns(bitable, dataColumns, [])
255
257
  handleBitable(bitable, listSub)
256
258
  await x.updateSubBitable([bitable], { isMerge, name: DEMO_SUB_TABLE_NAME })
257
- if (typeof x.delay === 'function') await x.delay(10)
259
+ if (typeof x.delay === 'function') await x.delay(300)
258
260
  return
259
261
  }
260
262
  const bitable: Record<string, unknown> = { items: [], data_columns: [] }
261
263
  handleBitable(bitable, listSub)
262
264
  await x.addColumns(bitable, dataColumns, [])
263
- await x.createSubBitable([bitable], DEMO_SUB_TABLE_NAME)
265
+ try {
266
+ await x.createSubBitable([bitable], DEMO_SUB_TABLE_NAME)
267
+ } catch {
268
+ if (typeof x.delay === 'function') await x.delay(500)
269
+ await x.createSubBitable([bitable], DEMO_SUB_TABLE_NAME)
270
+ }
264
271
  }
265
272
 
266
273
  async function fetchDemoList (): Promise<DemoListRow[]> {
@@ -367,6 +374,7 @@ export function useSuperTableBitableLifecycle (
367
374
 
368
375
  if (dataColumnsMismatch(bitable, dataColumns) || !((bitable.data_columns as unknown[])?.length)) {
369
376
  await rebuildSubBitableColumns(bitable, listSub, dataColumns)
377
+ bitable = (await resolveBitableBySub(listSub)) ?? bitable
370
378
  }
371
379
 
372
380
  const rows = await fetchDemoList()
@@ -21,7 +21,7 @@
21
21
  <script lang="ts" setup>
22
22
  /**
23
23
  * 模板内演示用超级表格工具栏示例(非业务交付物)。
24
- * studio-orbit-vue-component 技能:向用户目标目录产出时勿原样复制本文件;请按流程文档新建具语义的 `src/views/<业务>.vue` 并参考此处写法。
24
+ * lab-orbit-component-builder 技能:向用户目标目录产出时勿原样复制本文件;请按流程文档新建具语义的 `src/views/<业务>.vue` 并参考此处写法。
25
25
  *
26
26
  * 刷新 / 提交:在 `useBitablePage` 内经 Quasar 对话框确认后再执行。
27
27
  */
@@ -1,6 +1,6 @@
1
1
  <!--
2
2
  模板内演示用多区页面示例(非业务交付物)。
3
- studio-orbit-vue-component 技能:向用户目标目录产出时勿原样复制本文件;请按流程文档新建具语义的 views 与 entries。
3
+ lab-orbit-component-builder 技能:向用户目标目录产出时勿原样复制本文件;请按流程文档新建具语义的 views 与 entries。
4
4
 
5
5
  场景:复杂多组件页面(不使用超级表格 / XNBBitable)
6
6
  入口文件名:custom-page.vue(与 xnb-components 中 id 一致)
@@ -39,7 +39,7 @@
39
39
  | 文档配置项 | 落地建议 |
40
40
  |------------|----------|
41
41
  | **AppBaseUrl** | 本地/CI:`VITE_AGENTICLAB_API_URL`(见模板 `.env.local.example`);Orbit 内 HTTP 走 `orbitRequestJson` / `window.xnb.http.client.request`,基址以宿主代理为准 |
42
- | **数据查询上限** | 列表请求 `limit` 默认值(如 `9000`);与 **flow-package-from-design** 列表类约定一致时注意网关上限 |
42
+ | **数据查询上限** | 列表请求 `limit` 默认值(如 `9000`);与 **lab-flow-designer** 列表类约定一致时注意网关上限 |
43
43
  | **语言类型** | 影响 UI 文案语言(中/英);未给定时与团队默认一致 |
44
44
 
45
45
  门控级 **脚本配置项**(如 StationBaseURL)属于 **后置/工站脚本**,不默认写进 Vue 页;若文档明确要求页面内调用,再在 `AgenticAppAPI` 之外单独增加 `src/api/*` 与环境变量。