@sixb/core 0.1.17 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/actions/commit-edits.d.ts +7 -19
- package/dist/actions/commit-edits.d.ts.map +1 -1
- package/dist/actions/errors.d.ts +0 -3
- package/dist/actions/errors.d.ts.map +1 -1
- package/dist/actions/execution.d.ts +10 -3
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.d.ts +6 -9
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +56 -52
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/read-facade.d.ts +1 -1
- package/dist/actions/request.d.ts +14 -25
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run/context.d.ts +40 -0
- package/dist/actions/run/context.d.ts.map +1 -0
- package/dist/actions/run/edits-commit.d.ts +31 -0
- package/dist/actions/run/edits-commit.d.ts.map +1 -0
- package/dist/actions/run/effects.d.ts +23 -0
- package/dist/actions/run/effects.d.ts.map +1 -0
- package/dist/actions/run/execute.d.ts +30 -0
- package/dist/actions/run/execute.d.ts.map +1 -0
- package/dist/actions/run/executor.d.ts +95 -0
- package/dist/actions/run/executor.d.ts.map +1 -0
- package/dist/actions/run/normalize.d.ts +36 -0
- package/dist/actions/run/normalize.d.ts.map +1 -0
- package/dist/actions/run/phase-types.d.ts +18 -0
- package/dist/actions/run/phase-types.d.ts.map +1 -0
- package/dist/actions/run/phases.d.ts +20 -0
- package/dist/actions/run/phases.d.ts.map +1 -0
- package/dist/actions/run/run-action.d.ts +25 -0
- package/dist/actions/run/run-action.d.ts.map +1 -0
- package/dist/actions/run/signals.d.ts +67 -0
- package/dist/actions/run/signals.d.ts.map +1 -0
- package/dist/actions/run/state.d.ts +47 -0
- package/dist/actions/run/state.d.ts.map +1 -0
- package/dist/actions/run/types.d.ts +54 -0
- package/dist/actions/run/types.d.ts.map +1 -0
- package/dist/actions/run/writeback.d.ts +17 -0
- package/dist/actions/run/writeback.d.ts.map +1 -0
- package/dist/actions/run-authorization.d.ts +1 -1
- package/dist/actions/run-authorization.d.ts.map +1 -1
- package/dist/actions/run-persistence.d.ts +53 -0
- package/dist/actions/run-persistence.d.ts.map +1 -0
- package/dist/actions/types/context.d.ts +10 -0
- package/dist/actions/types/context.d.ts.map +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/agents/adapters.d.ts +7 -0
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +7 -0
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context/entries.d.ts +10 -1
- package/dist/agents/context/entries.d.ts.map +1 -1
- package/dist/agents/context/index.d.ts +1 -1
- package/dist/agents/context/index.d.ts.map +1 -1
- package/dist/agents/context/index.js +4 -2
- package/dist/agents/context/index.js.map +1 -1
- package/dist/agents/context-compaction.d.ts.map +1 -1
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/index.d.ts +6 -4
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +63 -59
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +8 -1
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/request.d.ts +19 -5
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/skills.d.ts +41 -0
- package/dist/agents/skills.d.ts.map +1 -0
- package/dist/agents/streams/index.js +2 -2
- package/dist/agents/streams/internal.js +2 -2
- package/dist/agents/types.d.ts +33 -4
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/auth/index.js +12 -9
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/runtime.d.ts.map +1 -1
- package/dist/auth/types.d.ts +6 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/authorization/event-visibility.d.ts.map +1 -1
- package/dist/authorization/index.js +6 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/resolve.d.ts +1 -1
- package/dist/authorization/resolve.d.ts.map +1 -1
- package/dist/authorization/types.d.ts +7 -0
- package/dist/authorization/types.d.ts.map +1 -1
- package/dist/blob-storage/browser.js +1 -1
- package/dist/blob-storage/execution.d.ts.map +1 -1
- package/dist/blob-storage/file-content.d.ts +18 -0
- package/dist/blob-storage/file-content.d.ts.map +1 -0
- package/dist/blob-storage/index.d.ts +1 -1
- package/dist/blob-storage/index.d.ts.map +1 -1
- package/dist/blob-storage/index.js +2 -2
- package/dist/blob-storage/internal.d.ts +2 -0
- package/dist/blob-storage/internal.d.ts.map +1 -1
- package/dist/blob-storage/internal.js +16 -4
- package/dist/blob-storage/internal.js.map +1 -1
- package/dist/blob-storage/media-type.d.ts +8 -0
- package/dist/blob-storage/media-type.d.ts.map +1 -0
- package/dist/blob-storage/types.d.ts +12 -1
- package/dist/blob-storage/types.d.ts.map +1 -1
- package/dist/blob-storage/validation.d.ts +6 -0
- package/dist/blob-storage/validation.d.ts.map +1 -1
- package/dist/bootstrap/agent-context.d.ts +33 -0
- package/dist/bootstrap/agent-context.d.ts.map +1 -0
- package/dist/bootstrap/discovery.d.ts +23 -3
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.d.ts +2 -1
- package/dist/bootstrap/index.d.ts.map +1 -1
- package/dist/bootstrap/index.js +285 -77
- package/dist/bootstrap/index.js.map +4 -3
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/{chunk-t9shqx3w.js → chunk-1f7wpmyp.js} +143 -7
- package/dist/chunk-1f7wpmyp.js.map +14 -0
- package/dist/{chunk-jjrn5v0p.js → chunk-1k89ecfr.js} +1 -1
- package/dist/{chunk-9vx5e9g1.js → chunk-1sr8ryzk.js} +3 -3
- package/dist/chunk-1sr8ryzk.js.map +11 -0
- package/dist/{chunk-s7ftxrdr.js → chunk-29yx306f.js} +20 -3
- package/dist/{chunk-s7ftxrdr.js.map → chunk-29yx306f.js.map} +3 -3
- package/dist/{chunk-svabwqdq.js → chunk-3gnrh4ve.js} +44 -420
- package/dist/{chunk-svabwqdq.js.map → chunk-3gnrh4ve.js.map} +9 -13
- package/dist/{chunk-4ra628t7.js → chunk-3zxk45er.js} +70 -6
- package/dist/{chunk-4ra628t7.js.map → chunk-3zxk45er.js.map} +5 -4
- package/dist/{chunk-pja9jfz6.js → chunk-4tcx876c.js} +126 -64
- package/dist/chunk-4tcx876c.js.map +19 -0
- package/dist/{chunk-vre348sb.js → chunk-52bk93x8.js} +2 -2
- package/dist/{chunk-4gmng3vf.js → chunk-5e43w60z.js} +2 -2
- package/dist/{chunk-91kcnbf0.js → chunk-6gmfggss.js} +22 -9
- package/dist/chunk-6gmfggss.js.map +10 -0
- package/dist/{chunk-33saed7g.js → chunk-7kg3k1m9.js} +1 -1
- package/dist/{chunk-7ecp4v7a.js → chunk-7mbzgd9m.js} +10 -4
- package/dist/{chunk-7ecp4v7a.js.map → chunk-7mbzgd9m.js.map} +3 -3
- package/dist/{chunk-b9affek3.js → chunk-7n440zgt.js} +30 -30
- package/dist/{chunk-b9affek3.js.map → chunk-7n440zgt.js.map} +4 -4
- package/dist/{chunk-kkqwzy6h.js → chunk-7t429e3f.js} +1 -1
- package/dist/{chunk-xcy5ddha.js → chunk-80mc0971.js} +356 -301
- package/dist/chunk-80mc0971.js.map +15 -0
- package/dist/{chunk-gf7yht60.js → chunk-85yvv5n0.js} +27 -10
- package/dist/chunk-85yvv5n0.js.map +12 -0
- package/dist/{chunk-6fsr7y93.js → chunk-8mx7qw3y.js} +14 -13
- package/dist/{chunk-6fsr7y93.js.map → chunk-8mx7qw3y.js.map} +4 -4
- package/dist/{chunk-kpx7jrmn.js → chunk-91mg3nj9.js} +59 -59
- package/dist/{chunk-kpx7jrmn.js.map → chunk-91mg3nj9.js.map} +5 -5
- package/dist/{chunk-2am3db31.js → chunk-9gyp8hg1.js} +2 -2
- package/dist/{chunk-ewqa58h9.js → chunk-9k93ah50.js} +4 -4
- package/dist/{chunk-ewqa58h9.js.map → chunk-9k93ah50.js.map} +1 -1
- package/dist/{chunk-4wn7bxxa.js → chunk-9ybhtmg4.js} +1 -1
- package/dist/{chunk-fc5zfxy1.js → chunk-a40ad1ft.js} +5 -13
- package/dist/chunk-a40ad1ft.js.map +10 -0
- package/dist/{chunk-dam456ve.js → chunk-aff7cyea.js} +431 -70
- package/dist/{chunk-dam456ve.js.map → chunk-aff7cyea.js.map} +10 -7
- package/dist/{chunk-y2aq6ag9.js → chunk-b38szspf.js} +5 -14
- package/dist/chunk-b38szspf.js.map +11 -0
- package/dist/{chunk-r2y23egw.js → chunk-bkpke1sg.js} +1 -10
- package/dist/chunk-bkpke1sg.js.map +10 -0
- package/dist/{chunk-xyvy73tj.js → chunk-bpgy64fw.js} +8 -3
- package/dist/chunk-bpgy64fw.js.map +12 -0
- package/dist/{chunk-rb143ggb.js → chunk-bwjcehza.js} +1 -1
- package/dist/{chunk-5thzcb8g.js → chunk-c85m1hyj.js} +2 -2
- package/dist/{chunk-e67ynxcr.js → chunk-d2ync1v3.js} +5 -5
- package/dist/{chunk-3rrezgyc.js → chunk-dnmadg9k.js} +2 -2
- package/dist/chunk-enpsx8k5.js +127 -0
- package/dist/chunk-enpsx8k5.js.map +10 -0
- package/dist/chunk-ey3pyej1.js +8807 -0
- package/dist/chunk-ey3pyej1.js.map +106 -0
- package/dist/{chunk-vjcd8d27.js → chunk-fa02jy15.js} +1 -1
- package/dist/{chunk-9se093qz.js → chunk-gc4ntf7d.js} +4 -4
- package/dist/{chunk-9se093qz.js.map → chunk-gc4ntf7d.js.map} +1 -1
- package/dist/{chunk-98cw09sw.js → chunk-hkc3jct7.js} +4 -2
- package/dist/chunk-hkc3jct7.js.map +10 -0
- package/dist/{chunk-rpxz486p.js → chunk-hvsb78a1.js} +24 -8
- package/dist/{chunk-rpxz486p.js.map → chunk-hvsb78a1.js.map} +3 -3
- package/dist/{chunk-5yd8cchh.js → chunk-j2bp5ryw.js} +55 -246
- package/dist/{chunk-5yd8cchh.js.map → chunk-j2bp5ryw.js.map} +4 -4
- package/dist/{chunk-h3v76ams.js → chunk-jhm3zsa7.js} +25 -2
- package/dist/chunk-jhm3zsa7.js.map +12 -0
- package/dist/{chunk-w9yycd3t.js → chunk-kg5j6fct.js} +4 -8
- package/dist/{chunk-w9yycd3t.js.map → chunk-kg5j6fct.js.map} +3 -3
- package/dist/{chunk-vp3z1ckh.js → chunk-kyzq4wy9.js} +7 -7
- package/dist/{chunk-wr8qp979.js → chunk-m427qgq0.js} +9 -5
- package/dist/{chunk-wr8qp979.js.map → chunk-m427qgq0.js.map} +4 -3
- package/dist/{chunk-c2rga5cx.js → chunk-mfs23znk.js} +1 -1
- package/dist/{chunk-e1c18xjx.js → chunk-nq6gpjt7.js} +4 -45
- package/dist/{chunk-e1c18xjx.js.map → chunk-nq6gpjt7.js.map} +5 -5
- package/dist/{chunk-a7er86jd.js → chunk-nre82s12.js} +1 -1
- package/dist/{chunk-1hqwggsn.js → chunk-nzapm6p0.js} +1 -2
- package/dist/chunk-nzapm6p0.js.map +12 -0
- package/dist/{chunk-wt4szfec.js → chunk-pbcbn83d.js} +4 -4
- package/dist/{chunk-wt4szfec.js.map → chunk-pbcbn83d.js.map} +1 -1
- package/dist/{chunk-dmn70ztd.js → chunk-pfp1txq2.js} +25 -6
- package/dist/chunk-pfp1txq2.js.map +11 -0
- package/dist/chunk-pqajwytd.js.map +2 -2
- package/dist/{chunk-f1xh7a32.js → chunk-q1vkr2ys.js} +4 -4
- package/dist/chunk-rdghfsss.js.map +2 -2
- package/dist/{chunk-23xs4qp9.js → chunk-rhg02hxq.js} +4 -4
- package/dist/{chunk-cd234ba4.js → chunk-rz53yb4v.js} +10 -5
- package/dist/chunk-rz53yb4v.js.map +14 -0
- package/dist/{chunk-aq39q04r.js → chunk-s16apyk9.js} +104 -18
- package/dist/chunk-s16apyk9.js.map +16 -0
- package/dist/{chunk-69266efg.js → chunk-s54c868q.js} +12 -4
- package/dist/chunk-s54c868q.js.map +12 -0
- package/dist/{chunk-k4g51s47.js → chunk-t6vq7bff.js} +5 -5
- package/dist/{chunk-sk0hcjsz.js → chunk-tjb1mk5t.js} +3 -3
- package/dist/{chunk-cnb5kv05.js → chunk-tpn40322.js} +23 -8
- package/dist/chunk-tpn40322.js.map +19 -0
- package/dist/{chunk-rx7h5fdx.js → chunk-v9xd5wzd.js} +1 -1
- package/dist/{chunk-2vhg6ysa.js → chunk-vyf9kfqf.js} +1 -1
- package/dist/chunk-wwdfe68s.js +128 -0
- package/dist/chunk-wwdfe68s.js.map +11 -0
- package/dist/{chunk-jnfxmr3f.js → chunk-wz0xs816.js} +6 -6
- package/dist/{chunk-jnfxmr3f.js.map → chunk-wz0xs816.js.map} +1 -1
- package/dist/chunk-xt1zt7gv.js +471 -0
- package/dist/chunk-xt1zt7gv.js.map +13 -0
- package/dist/chunk-y0c4e6ex.js +16 -0
- package/dist/chunk-y0c4e6ex.js.map +10 -0
- package/dist/{chunk-5be2ath4.js → chunk-y7rqfrgg.js} +20 -138
- package/dist/{chunk-5be2ath4.js.map → chunk-y7rqfrgg.js.map} +8 -9
- package/dist/{chunk-z5rnrmz1.js → chunk-yw9pyg66.js} +5 -3
- package/dist/chunk-yw9pyg66.js.map +11 -0
- package/dist/{chunk-dfm066qg.js → chunk-yxd3nnqt.js} +2 -29
- package/dist/chunk-yxd3nnqt.js.map +11 -0
- package/dist/{chunk-70jmg2zx.js → chunk-yzwja0mj.js} +4 -19
- package/dist/{chunk-70jmg2zx.js.map → chunk-yzwja0mj.js.map} +3 -3
- package/dist/{chunk-fggq3d9k.js → chunk-zrmy8zvw.js} +66 -47
- package/dist/{chunk-fggq3d9k.js.map → chunk-zrmy8zvw.js.map} +4 -4
- package/dist/datasets/builders.d.ts +12 -1
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +27 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -1
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/types.d.ts +2 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +5 -0
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +10 -5
- package/dist/datasets/write.js.map +1 -1
- package/dist/deploy/index.d.ts +1 -1
- package/dist/deploy/index.d.ts.map +1 -1
- package/dist/deploy/internal.js +10 -8
- package/dist/deploy/internal.js.map +4 -4
- package/dist/deploy/services.d.ts +1 -2
- package/dist/deploy/services.d.ts.map +1 -1
- package/dist/deploy/types.d.ts +6 -5
- package/dist/deploy/types.d.ts.map +1 -1
- package/dist/deploy/validation.d.ts.map +1 -1
- package/dist/edits/index.js +3 -5
- package/dist/edits/index.js.map +1 -1
- package/dist/edits/properties.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +3 -3
- package/dist/error-reporting/types.d.ts +2 -9
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +12 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/internal.js +1 -1
- package/dist/events/definitions.d.ts +0 -5
- package/dist/events/definitions.d.ts.map +1 -1
- package/dist/events/execution.d.ts +2 -1
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/index.d.ts +3 -3
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +6 -8
- package/dist/events/index.js.map +1 -1
- package/dist/events/scope.d.ts +0 -1
- package/dist/events/scope.d.ts.map +1 -1
- package/dist/events/scope.js +1 -1
- package/dist/events/selectors/builder.d.ts +1 -8
- package/dist/events/selectors/builder.d.ts.map +1 -1
- package/dist/events/selectors/index.d.ts +2 -2
- package/dist/events/selectors/index.d.ts.map +1 -1
- package/dist/events/selectors/index.js +2 -2
- package/dist/events/selectors/predicate.d.ts.map +1 -1
- package/dist/events/selectors/types.d.ts +2 -33
- package/dist/events/selectors/types.d.ts.map +1 -1
- package/dist/events/types/index.d.ts +1 -12
- package/dist/events/types/index.d.ts.map +1 -1
- package/dist/events/types/objects.d.ts +5 -0
- package/dist/events/types/objects.d.ts.map +1 -1
- package/dist/execution/agent.d.ts +10 -0
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +50 -48
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +6 -1
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/primitive.js +60 -88
- package/dist/execution/primitive.js.map +3 -4
- package/dist/execution/request.js +46 -46
- package/dist/execution/request.js.map +1 -1
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +12 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +120 -124
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/index.js +8 -5
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/materialization/index.js +3 -3
- package/dist/materialization/index.js.map +1 -1
- package/dist/materialization/model.d.ts +19 -6
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materializer/index.js +35 -32
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/catalog.d.ts +1 -1
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/execution/binding.d.ts +6 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/index.js +26 -23
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +4 -0
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/models/language-model.d.ts +6 -0
- package/dist/models/language-model.d.ts.map +1 -1
- package/dist/objects/action/errors.d.ts +0 -9
- package/dist/objects/action/errors.d.ts.map +1 -1
- package/dist/objects/action/index.d.ts +3 -3
- package/dist/objects/action/index.d.ts.map +1 -1
- package/dist/objects/action/request.d.ts +2 -8
- package/dist/objects/action/request.d.ts.map +1 -1
- package/dist/objects/context/index.d.ts +1 -1
- package/dist/objects/context/index.d.ts.map +1 -1
- package/dist/objects/context/types.d.ts +6 -0
- package/dist/objects/context/types.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +2 -3
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +49 -30
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/materializer-adapter.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/property-clearance.d.ts +41 -0
- package/dist/objects/property-clearance.d.ts.map +1 -0
- package/dist/objects/query/executor.d.ts +3 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +34 -31
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/validate.d.ts +10 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/file-handle.d.ts +6 -0
- package/dist/objects/sdk/file-handle.d.ts.map +1 -0
- package/dist/objects/sdk/object-handle.d.ts +2 -2
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts +2 -0
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/service/index.d.ts +0 -1
- package/dist/objects/service/index.d.ts.map +1 -1
- package/dist/ontology/builders.d.ts +12 -1
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/docs-markdown.d.ts +35 -0
- package/dist/ontology/docs-markdown.d.ts.map +1 -0
- package/dist/ontology/docs.d.ts +50 -0
- package/dist/ontology/docs.d.ts.map +1 -0
- package/dist/ontology/index.js +7 -4
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +19 -0
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +3 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +276 -3
- package/dist/ontology/internal.js.map +4 -3
- package/dist/ontology/tokens.d.ts +8 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +5 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/index.d.ts +1 -1
- package/dist/ontology/validation/index.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +7 -0
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/pipelines/index.js +34 -31
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +27 -24
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +1 -2
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +0 -7
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +11 -2
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +3 -1
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +13 -2
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/internal.js +30 -28
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/locale.d.ts +9 -0
- package/dist/runtime/locale.d.ts.map +1 -0
- package/dist/runtime/resolve-definitions.d.ts +4 -2
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +46 -39
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/index.js +7 -6
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/runtime.d.ts +3 -0
- package/dist/scheduler/runtime.d.ts.map +1 -1
- package/dist/schedules/builders.d.ts.map +1 -1
- package/dist/schedules/index.js +3 -3
- package/dist/schedules/runtime.d.ts.map +1 -1
- package/dist/schedules/validation.d.ts +0 -1
- package/dist/schedules/validation.d.ts.map +1 -1
- package/dist/security/builders.d.ts +11 -2
- package/dist/security/builders.d.ts.map +1 -1
- package/dist/security/every.d.ts +1 -1
- package/dist/security/index.d.ts +4 -4
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/markings.d.ts +19 -0
- package/dist/security/markings.d.ts.map +1 -0
- package/dist/security/redactions.d.ts +4 -0
- package/dist/security/redactions.d.ts.map +1 -0
- package/dist/security/registry.d.ts +7 -1
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +25 -0
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +4 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -21
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +2 -2
- package/dist/storage/action-runs/idempotency.d.ts +3 -4
- package/dist/storage/action-runs/idempotency.d.ts.map +1 -1
- package/dist/storage/action-runs/in-memory.d.ts +2 -9
- package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/action-runs/index.d.ts +1 -3
- package/dist/storage/action-runs/index.d.ts.map +1 -1
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/action-runs/record.d.ts +20 -0
- package/dist/storage/action-runs/record.d.ts.map +1 -0
- package/dist/storage/action-runs/types.d.ts +39 -68
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +5 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +15 -9
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +2 -2
- package/dist/storage/connector-connections/provider.js +1 -1
- package/dist/storage/file-upload-sessions/provider.js +12 -9
- package/dist/storage/file-upload-sessions/provider.js.map +1 -1
- package/dist/storage/index.d.ts +3 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +36 -34
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +1 -1
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +11 -13
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/objects/execution-limits.d.ts +1 -1
- package/dist/storage/objects/execution-limits.d.ts.map +1 -1
- package/dist/storage/objects/types.d.ts +7 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +12 -9
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +35 -32
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/action-execution.d.ts +34 -4
- package/dist/testing/action-execution.d.ts.map +1 -1
- package/dist/testing/action-run-storage-contract.d.ts +11 -0
- package/dist/testing/action-run-storage-contract.d.ts.map +1 -0
- package/dist/testing/index.d.ts +2 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3213 -2869
- package/dist/testing/index.js.map +7 -6
- package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +29 -26
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +1 -1
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +55 -55
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/dist/workflows/types.d.ts +6 -3
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +2 -1
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +1 -7
- package/src/actions/commit-edits.ts +9 -37
- package/src/actions/errors.ts +0 -4
- package/src/actions/execution.ts +10 -10
- package/src/actions/index.ts +5 -24
- package/src/actions/read-facade.ts +2 -1
- package/src/actions/request.ts +157 -295
- package/src/actions/run/context.ts +193 -0
- package/src/actions/run/edits-commit.ts +102 -0
- package/src/actions/run/effects.ts +105 -0
- package/src/actions/run/execute.ts +113 -0
- package/src/actions/run/executor.ts +314 -0
- package/src/actions/run/normalize.ts +142 -0
- package/src/actions/run/phase-types.ts +20 -0
- package/src/actions/run/phases.ts +150 -0
- package/src/actions/run/run-action.ts +170 -0
- package/src/actions/run/signals.ts +118 -0
- package/src/actions/run/state.ts +95 -0
- package/src/actions/run/types.ts +61 -0
- package/src/actions/run/writeback.ts +79 -0
- package/src/actions/run-authorization.ts +1 -1
- package/src/actions/run-persistence.ts +105 -0
- package/src/actions/types/context.ts +10 -0
- package/src/actions/validation.ts +4 -1
- package/src/agents/adapters.ts +15 -0
- package/src/agents/authority.ts +15 -0
- package/src/agents/context/entries.ts +48 -4
- package/src/agents/context/index.ts +1 -0
- package/src/agents/context-compaction.ts +6 -0
- package/src/agents/errors.ts +3 -0
- package/src/agents/index.ts +13 -1
- package/src/agents/message.ts +9 -0
- package/src/agents/request.ts +178 -22
- package/src/agents/skills.ts +63 -0
- package/src/agents/types.ts +35 -5
- package/src/auth/runtime.ts +14 -0
- package/src/auth/types.ts +6 -0
- package/src/authorization/event-visibility.ts +0 -12
- package/src/authorization/resolve.ts +6 -1
- package/src/authorization/types.ts +7 -0
- package/src/blob-storage/execution.ts +12 -0
- package/src/blob-storage/file-content.ts +106 -0
- package/src/blob-storage/index.ts +1 -0
- package/src/blob-storage/internal.ts +7 -0
- package/src/blob-storage/media-type.ts +29 -0
- package/src/blob-storage/types.ts +13 -1
- package/src/blob-storage/validation.ts +13 -0
- package/src/bootstrap/agent-context.ts +356 -0
- package/src/bootstrap/discovery.ts +100 -33
- package/src/bootstrap/index.ts +1 -1
- package/src/bootstrap/ontology-type-manifest.ts +3 -38
- package/src/datasets/builders.ts +17 -1
- package/src/datasets/execution.ts +110 -2
- package/src/datasets/index.ts +7 -1
- package/src/datasets/types.ts +2 -0
- package/src/datasets/write.ts +21 -2
- package/src/deploy/index.ts +0 -1
- package/src/deploy/services.ts +2 -11
- package/src/deploy/types.ts +6 -6
- package/src/deploy/validation.ts +12 -6
- package/src/edits/properties.ts +3 -0
- package/src/error-reporting/types.ts +2 -10
- package/src/errors/catalog.ts +13 -0
- package/src/events/definitions.ts +0 -17
- package/src/events/execution.ts +15 -16
- package/src/events/index.ts +0 -14
- package/src/events/scope.ts +0 -12
- package/src/events/selectors/builder.ts +0 -51
- package/src/events/selectors/index.ts +0 -6
- package/src/events/selectors/predicate.ts +0 -2
- package/src/events/selectors/types.ts +7 -65
- package/src/events/types/index.ts +0 -11
- package/src/events/types/objects.ts +5 -0
- package/src/execution/agent.ts +27 -0
- package/src/execution/authorization.ts +1 -0
- package/src/execution/authorized-object-reader.ts +96 -34
- package/src/execution/scopes.ts +2 -6
- package/src/http/api-routes.ts +4 -3
- package/src/index.ts +28 -21
- package/src/materialization/model.ts +26 -9
- package/src/materializer/README.md +6 -1
- package/src/materializer/edits/commit.ts +42 -32
- package/src/materializer/shared/normalize.ts +25 -14
- package/src/models/catalog.ts +26 -2
- package/src/models/execution/README.md +4 -3
- package/src/models/execution/binding.ts +6 -0
- package/src/models/execution/model-call-recorder.ts +10 -0
- package/src/models/execution/session.ts +2 -2
- package/src/models/execution.ts +6 -2
- package/src/models/language-model.ts +6 -0
- package/src/objects/action/errors.ts +0 -12
- package/src/objects/action/index.ts +3 -3
- package/src/objects/action/request.ts +2 -29
- package/src/objects/context/index.ts +1 -0
- package/src/objects/context/types.ts +7 -0
- package/src/objects/execution.ts +6 -3
- package/src/objects/materializer-adapter.ts +3 -0
- package/src/objects/object/upsert-batch.ts +4 -1
- package/src/objects/object/upsert.ts +3 -1
- package/src/objects/property-clearance.ts +209 -0
- package/src/objects/query/executor.ts +43 -36
- package/src/objects/query/validate.ts +133 -14
- package/src/objects/sdk/file-handle.ts +77 -0
- package/src/objects/sdk/object-handle.ts +11 -33
- package/src/objects/sdk/object-set.ts +10 -32
- package/src/objects/service/index.ts +0 -1
- package/src/ontology/builders.ts +18 -2
- package/src/ontology/docs-markdown.ts +394 -0
- package/src/ontology/docs.ts +196 -0
- package/src/ontology/inference/index.ts +25 -0
- package/src/ontology/internal.ts +7 -0
- package/src/ontology/tokens.ts +13 -2
- package/src/ontology/types.ts +5 -0
- package/src/ontology/validation/index.ts +1 -0
- package/src/ontology/validation/schema.ts +26 -1
- package/src/queues/in-memory.ts +0 -6
- package/src/queues/index.ts +0 -2
- package/src/queues/types.ts +0 -11
- package/src/runtime/create.ts +34 -4
- package/src/runtime/definitions.ts +3 -1
- package/src/runtime/host.ts +50 -1
- package/src/runtime/index.ts +3 -0
- package/src/runtime/locale.ts +26 -0
- package/src/runtime/resolve-definitions.ts +28 -2
- package/src/runtime/sixb.ts +1 -1
- package/src/runtime/types.ts +55 -48
- package/src/scheduler/runtime.ts +11 -2
- package/src/schedules/builders.ts +1 -4
- package/src/schedules/runtime.ts +0 -41
- package/src/schedules/validation.ts +2 -16
- package/src/security/builders.ts +49 -5
- package/src/security/every.ts +1 -1
- package/src/security/index.ts +6 -1
- package/src/security/markings.ts +313 -0
- package/src/security/redactions.ts +6 -0
- package/src/security/registry.ts +21 -1
- package/src/security/types.ts +26 -0
- package/src/security/validation.ts +59 -2
- package/src/storage/action-runs/idempotency.ts +13 -41
- package/src/storage/action-runs/in-memory.ts +20 -311
- package/src/storage/action-runs/index.ts +1 -16
- package/src/storage/action-runs/record.ts +130 -0
- package/src/storage/action-runs/types.ts +37 -92
- package/src/storage/agents/provider.ts +11 -0
- package/src/storage/agents/types.ts +15 -7
- package/src/storage/index.ts +2 -9
- package/src/storage/internal.ts +1 -7
- package/src/storage/objects/execution-limits.ts +3 -2
- package/src/storage/objects/types.ts +7 -0
- package/src/storage/types.ts +2 -4
- package/src/testing/action-execution.ts +73 -13
- package/src/testing/action-run-storage-contract.ts +335 -0
- package/src/testing/index.ts +8 -1
- package/src/testing/materializer-storage-contract.ts +174 -18
- package/src/testing/queues-contract.ts +0 -18
- package/src/workflows/builders.ts +24 -1
- package/src/workflows/request.ts +3 -0
- package/src/workflows/types.ts +6 -3
- package/src/workflows/validation.ts +32 -4
- package/dist/actions/run-dispatch.d.ts +0 -25
- package/dist/actions/run-dispatch.d.ts.map +0 -1
- package/dist/actions/worker.d.ts +0 -3
- package/dist/actions/worker.d.ts.map +0 -1
- package/dist/actions/worker.js +0 -321
- package/dist/actions/worker.js.map +0 -11
- package/dist/chunk-10styjgk.js +0 -1572
- package/dist/chunk-10styjgk.js.map +0 -20
- package/dist/chunk-1hqwggsn.js.map +0 -12
- package/dist/chunk-52c5zb0z.js +0 -81
- package/dist/chunk-52c5zb0z.js.map +0 -10
- package/dist/chunk-69266efg.js.map +0 -12
- package/dist/chunk-6wbm6ymz.js +0 -4399
- package/dist/chunk-6wbm6ymz.js.map +0 -48
- package/dist/chunk-85cd7e8c.js +0 -51
- package/dist/chunk-85cd7e8c.js.map +0 -10
- package/dist/chunk-91kcnbf0.js.map +0 -10
- package/dist/chunk-98cw09sw.js.map +0 -10
- package/dist/chunk-9g6jz9kk.js +0 -592
- package/dist/chunk-9g6jz9kk.js.map +0 -15
- package/dist/chunk-9vx5e9g1.js.map +0 -11
- package/dist/chunk-aq39q04r.js.map +0 -15
- package/dist/chunk-cd234ba4.js.map +0 -14
- package/dist/chunk-cnb5kv05.js.map +0 -19
- package/dist/chunk-dfm066qg.js.map +0 -11
- package/dist/chunk-dmn70ztd.js.map +0 -11
- package/dist/chunk-fc5zfxy1.js.map +0 -11
- package/dist/chunk-gf7yht60.js.map +0 -12
- package/dist/chunk-h3v76ams.js.map +0 -11
- package/dist/chunk-pja9jfz6.js.map +0 -19
- package/dist/chunk-r2y23egw.js.map +0 -10
- package/dist/chunk-t9shqx3w.js.map +0 -12
- package/dist/chunk-tjjgy3z4.js +0 -1277
- package/dist/chunk-tjjgy3z4.js.map +0 -35
- package/dist/chunk-xcy5ddha.js.map +0 -15
- package/dist/chunk-xyvy73tj.js.map +0 -12
- package/dist/chunk-y2aq6ag9.js.map +0 -11
- package/dist/chunk-z5rnrmz1.js.map +0 -11
- package/dist/chunk-zvx7h87b.js +0 -12
- package/dist/chunk-zvx7h87b.js.map +0 -10
- package/dist/events/types/actions.d.ts +0 -39
- package/dist/events/types/actions.d.ts.map +0 -1
- package/dist/objects/service/action-service.d.ts +0 -13
- package/dist/objects/service/action-service.d.ts.map +0 -1
- package/src/actions/run-dispatch.ts +0 -282
- package/src/actions/worker.ts +0 -2
- package/src/events/types/actions.ts +0 -42
- package/src/objects/service/action-service.ts +0 -43
- /package/dist/{chunk-jjrn5v0p.js.map → chunk-1k89ecfr.js.map} +0 -0
- /package/dist/{chunk-vre348sb.js.map → chunk-52bk93x8.js.map} +0 -0
- /package/dist/{chunk-4gmng3vf.js.map → chunk-5e43w60z.js.map} +0 -0
- /package/dist/{chunk-33saed7g.js.map → chunk-7kg3k1m9.js.map} +0 -0
- /package/dist/{chunk-kkqwzy6h.js.map → chunk-7t429e3f.js.map} +0 -0
- /package/dist/{chunk-2am3db31.js.map → chunk-9gyp8hg1.js.map} +0 -0
- /package/dist/{chunk-4wn7bxxa.js.map → chunk-9ybhtmg4.js.map} +0 -0
- /package/dist/{chunk-rb143ggb.js.map → chunk-bwjcehza.js.map} +0 -0
- /package/dist/{chunk-5thzcb8g.js.map → chunk-c85m1hyj.js.map} +0 -0
- /package/dist/{chunk-e67ynxcr.js.map → chunk-d2ync1v3.js.map} +0 -0
- /package/dist/{chunk-3rrezgyc.js.map → chunk-dnmadg9k.js.map} +0 -0
- /package/dist/{chunk-vjcd8d27.js.map → chunk-fa02jy15.js.map} +0 -0
- /package/dist/{chunk-vp3z1ckh.js.map → chunk-kyzq4wy9.js.map} +0 -0
- /package/dist/{chunk-c2rga5cx.js.map → chunk-mfs23znk.js.map} +0 -0
- /package/dist/{chunk-a7er86jd.js.map → chunk-nre82s12.js.map} +0 -0
- /package/dist/{chunk-f1xh7a32.js.map → chunk-q1vkr2ys.js.map} +0 -0
- /package/dist/{chunk-23xs4qp9.js.map → chunk-rhg02hxq.js.map} +0 -0
- /package/dist/{chunk-k4g51s47.js.map → chunk-t6vq7bff.js.map} +0 -0
- /package/dist/{chunk-sk0hcjsz.js.map → chunk-tjb1mk5t.js.map} +0 -0
- /package/dist/{chunk-rx7h5fdx.js.map → chunk-v9xd5wzd.js.map} +0 -0
- /package/dist/{chunk-2vhg6ysa.js.map → chunk-vyf9kfqf.js.map} +0 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery of the project files the Agent reads: Agent Skills under `skills/`, the conversational
|
|
3
|
+
* Agent's instructions in `SIXB.md`, and the hand-written docs and scripts under `ontology/`.
|
|
4
|
+
*
|
|
5
|
+
* Contents are read here, once, so the Agent receives exactly what was validated. Built projects
|
|
6
|
+
* run from their project root with the committed tree, so the same reads work after `sixb build`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Dirent } from "node:fs"
|
|
10
|
+
import { lstat, readdir, readFile, stat } from "node:fs/promises"
|
|
11
|
+
import { basename, join, relative, sep } from "node:path"
|
|
12
|
+
import type { AgentProjectFile, AgentSkillDefinition } from "../agents/skills"
|
|
13
|
+
import type { OntologyDoc } from "../ontology/docs"
|
|
14
|
+
import { RuntimeError } from "../runtime/errors"
|
|
15
|
+
|
|
16
|
+
/** The project's instructions for the conversational Agent, at the project root. */
|
|
17
|
+
export const PROJECT_INSTRUCTIONS_FILE = "SIXB.md"
|
|
18
|
+
|
|
19
|
+
/** They are part of every conversation's prompt, so they stay short. */
|
|
20
|
+
const MAX_PROJECT_INSTRUCTIONS_BYTES = 32 * 1024
|
|
21
|
+
|
|
22
|
+
/** Every sandbox receives them, and every process holds them in memory. */
|
|
23
|
+
const MAX_AGENT_FILES_BYTES = 16 * 1024 * 1024
|
|
24
|
+
|
|
25
|
+
/** Dependency and cache folders, and dotfiles such as `.env`, `.venv`, or `.DS_Store`. */
|
|
26
|
+
const IGNORED_NAMES = new Set(["node_modules", "venv", "__pycache__"])
|
|
27
|
+
|
|
28
|
+
const SKILL_NAME_RE = /^[a-z0-9][a-z0-9._-]*$/
|
|
29
|
+
const UNQUOTED_COLON_VALUE_RE = /^\s*[\w-]+:\s+[^\s"'|>].*:\s/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Whether a project file, by its POSIX path relative to the project root, is one the Agent reads.
|
|
33
|
+
* `sixb dev` restarts when one changes.
|
|
34
|
+
*/
|
|
35
|
+
export function isAgentContextPath(path: string): boolean {
|
|
36
|
+
const segments = path.split("/")
|
|
37
|
+
if (segments.some(isIgnoredAgentContextName)) return false
|
|
38
|
+
if (path === PROJECT_INSTRUCTIONS_FILE || segments[0] === "skills") return true
|
|
39
|
+
if (segments[0] !== "ontology") return false
|
|
40
|
+
return isMarkdown(path) || segments.slice(1, -1).some(isOntologyScriptsDirectory)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Files and folders the Agent never receives, wherever they appear in its directories. */
|
|
44
|
+
export function isIgnoredAgentContextName(name: string): boolean {
|
|
45
|
+
return name.startsWith(".") || IGNORED_NAMES.has(name)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** A `scripts/` directory anywhere under `ontology/` holds Agent scripts: mounted, never imported. */
|
|
49
|
+
export function isOntologyScriptsDirectory(name: string): boolean {
|
|
50
|
+
return name === "scripts"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface DiscoveredOntologyFiles {
|
|
54
|
+
/** Markdown under `ontology/`, outside `scripts/` directories. */
|
|
55
|
+
readonly docs: readonly OntologyDoc[]
|
|
56
|
+
/** Every file in a `scripts/` directory under `ontology/`. */
|
|
57
|
+
readonly scripts: readonly AgentProjectFile[]
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Read the hand-written docs and scripts under `ontology/`. Paths are relative to `ontology/`. */
|
|
61
|
+
export async function discoverOntologyFiles(projectRoot: string): Promise<DiscoveredOntologyFiles> {
|
|
62
|
+
const ontologyDir = join(projectRoot, "ontology")
|
|
63
|
+
const docs: OntologyDoc[] = []
|
|
64
|
+
const scripts: AgentProjectFile[] = []
|
|
65
|
+
const budget = createFilesBudget("ontology/")
|
|
66
|
+
|
|
67
|
+
async function walk(dir: string, inScripts: boolean): Promise<void> {
|
|
68
|
+
let entries: Dirent[]
|
|
69
|
+
try {
|
|
70
|
+
entries = await readdir(dir, { withFileTypes: true })
|
|
71
|
+
} catch (error) {
|
|
72
|
+
if (isNotFound(error)) return
|
|
73
|
+
throw error
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
77
|
+
if (isIgnoredAgentContextName(entry.name)) continue
|
|
78
|
+
const path = join(dir, entry.name)
|
|
79
|
+
const relativePath = toPosixRelative(ontologyDir, path)
|
|
80
|
+
if (entry.isSymbolicLink()) {
|
|
81
|
+
// Module discovery skips symlinks; a folder, doc, or script the Agent would miss fails.
|
|
82
|
+
const target = await stat(path).catch(() => undefined)
|
|
83
|
+
if (inScripts || isMarkdown(entry.name) || target?.isDirectory()) {
|
|
84
|
+
throw new RuntimeError(
|
|
85
|
+
`[Sixb] Ontology path 'ontology/${relativePath}' must not be a symlink.`
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
continue
|
|
89
|
+
}
|
|
90
|
+
if (entry.isDirectory()) {
|
|
91
|
+
await walk(path, inScripts || isOntologyScriptsDirectory(entry.name))
|
|
92
|
+
continue
|
|
93
|
+
}
|
|
94
|
+
if (!entry.isFile() || !(inScripts || isMarkdown(entry.name))) continue
|
|
95
|
+
|
|
96
|
+
const info = await lstat(path)
|
|
97
|
+
budget(info.size)
|
|
98
|
+
if (inScripts) {
|
|
99
|
+
const mode = info.mode & 0o777
|
|
100
|
+
scripts.push(
|
|
101
|
+
Object.freeze({
|
|
102
|
+
path: relativePath,
|
|
103
|
+
contents: await readFile(path),
|
|
104
|
+
...((mode & 0o111) === 0 ? {} : { mode }),
|
|
105
|
+
})
|
|
106
|
+
)
|
|
107
|
+
} else {
|
|
108
|
+
const contents = decodeUtf8(await readFile(path))
|
|
109
|
+
if (contents === undefined) {
|
|
110
|
+
throw new RuntimeError(
|
|
111
|
+
`[Sixb] Ontology doc 'ontology/${relativePath}' must be UTF-8 text.`
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
docs.push(Object.freeze({ path: relativePath, contents }))
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
await walk(ontologyDir, false)
|
|
120
|
+
return { docs, scripts }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Read and validate every `skills/<name>/` directory. A missing `skills/` has no skills. */
|
|
124
|
+
export async function discoverAgentSkills(
|
|
125
|
+
projectRoot: string
|
|
126
|
+
): Promise<readonly AgentSkillDefinition[]> {
|
|
127
|
+
const skillsDir = join(projectRoot, "skills")
|
|
128
|
+
let entries: string[]
|
|
129
|
+
try {
|
|
130
|
+
entries = await readdir(skillsDir)
|
|
131
|
+
} catch (error) {
|
|
132
|
+
if (isNotFound(error)) return []
|
|
133
|
+
throw error
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const skills: AgentSkillDefinition[] = []
|
|
137
|
+
const budget = createFilesBudget("skills/")
|
|
138
|
+
for (const entry of entries.sort((a, b) => a.localeCompare(b))) {
|
|
139
|
+
if (isIgnoredAgentContextName(entry)) continue
|
|
140
|
+
const skillDir = join(skillsDir, entry)
|
|
141
|
+
const info = await lstat(skillDir)
|
|
142
|
+
if (info.isSymbolicLink()) {
|
|
143
|
+
throw skillError(projectRoot, skillDir, "Skill directories must not be symlinks.")
|
|
144
|
+
}
|
|
145
|
+
if (!info.isDirectory()) continue
|
|
146
|
+
skills.push(await loadAgentSkill(projectRoot, skillDir, budget))
|
|
147
|
+
}
|
|
148
|
+
return skills
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Read `SIXB.md` when the project has one. */
|
|
152
|
+
export async function discoverProjectInstructions(
|
|
153
|
+
projectRoot: string
|
|
154
|
+
): Promise<string | undefined> {
|
|
155
|
+
const path = join(projectRoot, PROJECT_INSTRUCTIONS_FILE)
|
|
156
|
+
let info: Awaited<ReturnType<typeof lstat>>
|
|
157
|
+
try {
|
|
158
|
+
info = await lstat(path)
|
|
159
|
+
} catch (error) {
|
|
160
|
+
if (isNotFound(error)) return undefined
|
|
161
|
+
throw error
|
|
162
|
+
}
|
|
163
|
+
if (!info.isFile()) {
|
|
164
|
+
throw instructionsError("must be a regular file, not a symlink or a directory.")
|
|
165
|
+
}
|
|
166
|
+
if (info.size > MAX_PROJECT_INSTRUCTIONS_BYTES) {
|
|
167
|
+
throw instructionsError(
|
|
168
|
+
`is ${info.size.toLocaleString("en-US")} bytes; the limit is ` +
|
|
169
|
+
`${MAX_PROJECT_INSTRUCTIONS_BYTES.toLocaleString("en-US")}. It is part of every ` +
|
|
170
|
+
"conversation's prompt: keep it to project-wide guidance and move task-specific " +
|
|
171
|
+
"instructions into skills/, which the agent reads only when relevant."
|
|
172
|
+
)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const instructions = decodeUtf8(await readFile(path))
|
|
176
|
+
if (instructions === undefined) throw instructionsError("must be UTF-8 text.")
|
|
177
|
+
if (!instructions.trim()) {
|
|
178
|
+
throw instructionsError("is empty. Write the agent's project instructions or delete the file.")
|
|
179
|
+
}
|
|
180
|
+
return instructions
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function loadAgentSkill(
|
|
184
|
+
projectRoot: string,
|
|
185
|
+
skillDir: string,
|
|
186
|
+
budget: FilesBudget
|
|
187
|
+
): Promise<AgentSkillDefinition> {
|
|
188
|
+
const files = await collectSkillFiles(projectRoot, skillDir, budget)
|
|
189
|
+
const skillFile = files.find((file) => file.path === "SKILL.md")
|
|
190
|
+
if (!skillFile || typeof skillFile.contents !== "string") {
|
|
191
|
+
throw skillError(projectRoot, skillDir, "Missing required regular SKILL.md.")
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const metadata = parseSkillMetadata(projectRoot, skillDir, skillFile.contents)
|
|
195
|
+
validateSkillMetadata(projectRoot, skillDir, metadata)
|
|
196
|
+
return Object.freeze({
|
|
197
|
+
name: metadata.name,
|
|
198
|
+
description: metadata.description,
|
|
199
|
+
files: Object.freeze(files),
|
|
200
|
+
})
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
interface AgentSkillMetadata {
|
|
204
|
+
readonly name?: string
|
|
205
|
+
readonly description?: string
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function validateSkillMetadata(
|
|
209
|
+
projectRoot: string,
|
|
210
|
+
skillDir: string,
|
|
211
|
+
metadata: AgentSkillMetadata
|
|
212
|
+
): asserts metadata is Required<AgentSkillMetadata> {
|
|
213
|
+
const fail = (message: string) => skillError(projectRoot, skillDir, message)
|
|
214
|
+
if (!metadata.name?.trim()) {
|
|
215
|
+
throw fail("SKILL.md frontmatter must include a non-empty string name.")
|
|
216
|
+
}
|
|
217
|
+
if (!metadata.description?.trim()) {
|
|
218
|
+
throw fail("SKILL.md frontmatter must include a non-empty string description.")
|
|
219
|
+
}
|
|
220
|
+
if (!SKILL_NAME_RE.test(metadata.name)) {
|
|
221
|
+
throw fail(`Skill name '${metadata.name}' must match ${String(SKILL_NAME_RE)}.`)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const dirName = basename(skillDir)
|
|
225
|
+
if (metadata.name !== dirName) {
|
|
226
|
+
throw fail(`Skill name '${metadata.name}' must match directory '${dirName}'.`)
|
|
227
|
+
}
|
|
228
|
+
if (metadata.name.startsWith("sixb-")) {
|
|
229
|
+
throw fail(`Skill name '${metadata.name}' uses the reserved 'sixb-' prefix.`)
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
async function collectSkillFiles(
|
|
234
|
+
projectRoot: string,
|
|
235
|
+
skillDir: string,
|
|
236
|
+
budget: FilesBudget,
|
|
237
|
+
currentDir = skillDir
|
|
238
|
+
): Promise<AgentProjectFile[]> {
|
|
239
|
+
const files: AgentProjectFile[] = []
|
|
240
|
+
const entries = await readdir(currentDir)
|
|
241
|
+
for (const entry of entries.sort((a, b) => a.localeCompare(b))) {
|
|
242
|
+
if (isIgnoredAgentContextName(entry)) continue
|
|
243
|
+
const path = join(currentDir, entry)
|
|
244
|
+
const info = await lstat(path)
|
|
245
|
+
const relativePath = toPosixRelative(skillDir, path)
|
|
246
|
+
if (info.isSymbolicLink()) {
|
|
247
|
+
throw skillError(projectRoot, skillDir, `Skill file '${relativePath}' must not be a symlink.`)
|
|
248
|
+
}
|
|
249
|
+
if (info.isDirectory()) {
|
|
250
|
+
files.push(...(await collectSkillFiles(projectRoot, skillDir, budget, path)))
|
|
251
|
+
continue
|
|
252
|
+
}
|
|
253
|
+
if (!info.isFile()) continue
|
|
254
|
+
budget(info.size)
|
|
255
|
+
|
|
256
|
+
const mode = info.mode & 0o777
|
|
257
|
+
files.push(
|
|
258
|
+
Object.freeze({
|
|
259
|
+
path: relativePath,
|
|
260
|
+
contents:
|
|
261
|
+
relativePath === "SKILL.md" ? await readFile(path, "utf-8") : await readFile(path),
|
|
262
|
+
...((mode & 0o111) === 0 ? {} : { mode }),
|
|
263
|
+
})
|
|
264
|
+
)
|
|
265
|
+
}
|
|
266
|
+
return files
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function parseSkillMetadata(
|
|
270
|
+
projectRoot: string,
|
|
271
|
+
skillDir: string,
|
|
272
|
+
markdown: string
|
|
273
|
+
): AgentSkillMetadata {
|
|
274
|
+
const fail = (message: string) => skillError(projectRoot, skillDir, message)
|
|
275
|
+
const lines = markdown.replaceAll("\r\n", "\n").split("\n")
|
|
276
|
+
if (lines[0] !== "---") {
|
|
277
|
+
throw fail("SKILL.md must start with YAML frontmatter delimited by ---.")
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const end = lines.findIndex((line, index) => index > 0 && line === "---")
|
|
281
|
+
if (end < 0) {
|
|
282
|
+
throw fail("SKILL.md frontmatter is missing the closing --- delimiter.")
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const frontmatter = lines.slice(1, end)
|
|
286
|
+
let parsed: unknown
|
|
287
|
+
try {
|
|
288
|
+
parsed = Bun.YAML.parse(frontmatter.join("\n"))
|
|
289
|
+
} catch (error) {
|
|
290
|
+
const message = error instanceof Error ? error.message : String(error)
|
|
291
|
+
// The usual culprit: `description: Use when: ...` reads as a nested mapping.
|
|
292
|
+
const hint = frontmatter.some((line) => UNQUOTED_COLON_VALUE_RE.test(line))
|
|
293
|
+
? ` Quote values that contain ': ', for example description: "Use when: ...".`
|
|
294
|
+
: ""
|
|
295
|
+
throw fail(`SKILL.md frontmatter is not valid YAML: ${message}.${hint}`)
|
|
296
|
+
}
|
|
297
|
+
if (!isRecord(parsed)) {
|
|
298
|
+
throw fail("SKILL.md frontmatter must be a YAML mapping.")
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return {
|
|
302
|
+
...(typeof parsed.name === "string" ? { name: parsed.name.trim() } : {}),
|
|
303
|
+
...(typeof parsed.description === "string" ? { description: parsed.description.trim() } : {}),
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/** Counts the bytes of one family's files and fails once they exceed the limit. */
|
|
308
|
+
type FilesBudget = (size: number) => void
|
|
309
|
+
|
|
310
|
+
function createFilesBudget(directory: string): FilesBudget {
|
|
311
|
+
let total = 0
|
|
312
|
+
return (size) => {
|
|
313
|
+
total += size
|
|
314
|
+
if (total > MAX_AGENT_FILES_BYTES) {
|
|
315
|
+
throw new RuntimeError(
|
|
316
|
+
`[Sixb] The files under ${directory} exceed ${MAX_AGENT_FILES_BYTES / 1024 / 1024} MB. ` +
|
|
317
|
+
"Every agent sandbox receives them: keep large assets out of the project, or have a " +
|
|
318
|
+
"script fetch them when needed."
|
|
319
|
+
)
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function isMarkdown(path: string): boolean {
|
|
325
|
+
return path.toLowerCase().endsWith(".md")
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function decodeUtf8(bytes: Uint8Array): string | undefined {
|
|
329
|
+
try {
|
|
330
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(bytes)
|
|
331
|
+
} catch {
|
|
332
|
+
return undefined
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
337
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function toPosixRelative(from: string, to: string): string {
|
|
341
|
+
return relative(from, to).split(sep).join("/")
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
function isNotFound(error: unknown): boolean {
|
|
345
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT"
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function skillError(projectRoot: string, skillDir: string, message: string): RuntimeError {
|
|
349
|
+
return new RuntimeError(
|
|
350
|
+
`[Sixb] Agent Skill '${toPosixRelative(projectRoot, skillDir)}' is invalid: ${message}`
|
|
351
|
+
)
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
function instructionsError(message: string): RuntimeError {
|
|
355
|
+
return new RuntimeError(`[Sixb] ${PROJECT_INSTRUCTIONS_FILE} ${message}`)
|
|
356
|
+
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import { AsyncLocalStorage } from "node:async_hooks"
|
|
10
10
|
import { readdir } from "node:fs/promises"
|
|
11
|
-
import { join, relative, resolve } from "node:path"
|
|
11
|
+
import { join, relative, resolve, sep } from "node:path"
|
|
12
12
|
import { pathToFileURL } from "node:url"
|
|
13
13
|
import { isActionDefinition } from "../actions"
|
|
14
14
|
import { isConnectorDefinition } from "../connectors"
|
|
@@ -21,36 +21,66 @@ import { isProjectionDefinition } from "../projections/builders"
|
|
|
21
21
|
import { isRuleDefinition } from "../rules"
|
|
22
22
|
import { RuntimeError } from "../runtime/errors"
|
|
23
23
|
import { isScheduleDefinition } from "../schedules"
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
isGroupDefinition,
|
|
26
|
+
isMarkingDefinition,
|
|
27
|
+
isMembershipPolicyDefinition,
|
|
28
|
+
isRoleDefinition,
|
|
29
|
+
} from "../security"
|
|
25
30
|
import { isShareDefinition } from "../shares"
|
|
26
31
|
import { isSyncDefinition } from "../syncs"
|
|
27
32
|
import { isWorkflowDefinition } from "../workflows"
|
|
33
|
+
import { isOntologyScriptsDirectory } from "./agent-context"
|
|
28
34
|
|
|
29
35
|
const moduleExtensions = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"])
|
|
30
36
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
/** An `ontology/` module and the object types it exports, directly or re-exported. */
|
|
38
|
+
export interface DiscoveredOntologyModule {
|
|
39
|
+
/** POSIX path relative to `ontology/`. */
|
|
40
|
+
readonly path: string
|
|
41
|
+
readonly objectTypeIds: readonly string[]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface DiscoveredOntology {
|
|
45
|
+
readonly sources: readonly OntologySource[]
|
|
46
|
+
readonly modules: readonly DiscoveredOntologyModule[]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function discoverOntologySources(projectRoot: string): Promise<DiscoveredOntology> {
|
|
50
|
+
const loadedModules = await loadFamilyModules(projectRoot, "ontology", ["ontology"])
|
|
35
51
|
|
|
36
52
|
const ontologyDocuments: OntologyDocumentInput[] = []
|
|
37
53
|
const objectTypes: ObjectTypeWithPropertyTokens[] = []
|
|
38
54
|
const valueTypes: ValueType[] = []
|
|
55
|
+
const modules: DiscoveredOntologyModule[] = []
|
|
56
|
+
const seen = new Set<unknown>()
|
|
39
57
|
|
|
40
|
-
for (const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
for (const loaded of loadedModules) {
|
|
59
|
+
const objectTypeIds: string[] = []
|
|
60
|
+
for (const candidate of loaded.exports) {
|
|
61
|
+
const first = !seen.has(candidate)
|
|
62
|
+
seen.add(candidate)
|
|
63
|
+
|
|
64
|
+
if (isOntologyDocumentInput(candidate)) {
|
|
65
|
+
objectTypeIds.push(...candidate.objectTypes.map((objectType) => objectType.id))
|
|
66
|
+
if (first) ontologyDocuments.push(candidate)
|
|
67
|
+
continue
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (isObjectTypeWithPropertyTokens(candidate)) {
|
|
71
|
+
objectTypeIds.push(candidate.id)
|
|
72
|
+
if (first) objectTypes.push(candidate)
|
|
73
|
+
continue
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (isValueType(candidate) && first) {
|
|
77
|
+
valueTypes.push(candidate)
|
|
78
|
+
}
|
|
53
79
|
}
|
|
80
|
+
modules.push({
|
|
81
|
+
path: toPosix(relative("ontology", loaded.path)),
|
|
82
|
+
objectTypeIds: [...new Set(objectTypeIds)],
|
|
83
|
+
})
|
|
54
84
|
}
|
|
55
85
|
|
|
56
86
|
const discoveredSources: OntologySource[] = [...ontologyDocuments, ...objectTypes]
|
|
@@ -63,7 +93,7 @@ export async function discoverOntologySources(
|
|
|
63
93
|
})
|
|
64
94
|
}
|
|
65
95
|
|
|
66
|
-
return discoveredSources
|
|
96
|
+
return { sources: discoveredSources, modules }
|
|
67
97
|
}
|
|
68
98
|
|
|
69
99
|
export type DiscoveryModuleKind =
|
|
@@ -71,6 +101,7 @@ export type DiscoveryModuleKind =
|
|
|
71
101
|
| "connector"
|
|
72
102
|
| "dataset"
|
|
73
103
|
| "group"
|
|
104
|
+
| "marking"
|
|
74
105
|
| "membershipPolicy"
|
|
75
106
|
| "ontology"
|
|
76
107
|
| "pipeline"
|
|
@@ -143,6 +174,11 @@ const definitionDiscoveryRegistry = {
|
|
|
143
174
|
kind: "workflow",
|
|
144
175
|
isDefinition: isWorkflowDefinition,
|
|
145
176
|
},
|
|
177
|
+
markings: {
|
|
178
|
+
directory: ["security", "markings"],
|
|
179
|
+
kind: "marking",
|
|
180
|
+
isDefinition: isMarkingDefinition,
|
|
181
|
+
},
|
|
146
182
|
groups: {
|
|
147
183
|
directory: ["security", "groups"],
|
|
148
184
|
kind: "group",
|
|
@@ -202,9 +238,18 @@ async function discoverDefinitionFamily(
|
|
|
202
238
|
projectRoot: string,
|
|
203
239
|
family: DefinitionDiscoveryFamily<unknown>
|
|
204
240
|
): Promise<readonly unknown[]> {
|
|
205
|
-
const
|
|
241
|
+
const loadedModules = await loadFamilyModules(projectRoot, family.kind, family.directory)
|
|
242
|
+
const exportedCandidates = new Set(loadedModules.flatMap((loaded) => loaded.exports))
|
|
243
|
+
|
|
244
|
+
return [...exportedCandidates].filter(family.isDefinition)
|
|
245
|
+
}
|
|
206
246
|
|
|
207
|
-
|
|
247
|
+
/**
|
|
248
|
+
* Every module file of the `ontology/` family, as absolute paths. `scripts/` directories hold the
|
|
249
|
+
* Agent's ontology scripts, not definitions, so they are never imported.
|
|
250
|
+
*/
|
|
251
|
+
export function listOntologyModuleFiles(projectRoot: string): Promise<string[]> {
|
|
252
|
+
return listModuleFiles(join(projectRoot, "ontology"), isOntologyScriptsDirectory)
|
|
208
253
|
}
|
|
209
254
|
|
|
210
255
|
// ── Internal helpers ────────────────────────────────────────
|
|
@@ -214,15 +259,24 @@ async function listFamilyModules(
|
|
|
214
259
|
kind: DiscoveryModuleKind,
|
|
215
260
|
directory: readonly string[]
|
|
216
261
|
): Promise<ProjectModule[]> {
|
|
217
|
-
const paths =
|
|
262
|
+
const paths =
|
|
263
|
+
kind === "ontology"
|
|
264
|
+
? await listOntologyModuleFiles(projectRoot)
|
|
265
|
+
: await listModuleFiles(join(projectRoot, ...directory))
|
|
218
266
|
return paths.map((path) => ({ kind, path: relative(projectRoot, path) }))
|
|
219
267
|
}
|
|
220
268
|
|
|
221
|
-
|
|
269
|
+
interface LoadedProjectModule {
|
|
270
|
+
/** Relative to the project root. */
|
|
271
|
+
readonly path: string
|
|
272
|
+
readonly exports: readonly unknown[]
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
async function loadFamilyModules(
|
|
222
276
|
projectRoot: string,
|
|
223
277
|
kind: DiscoveryModuleKind,
|
|
224
278
|
directory: readonly string[]
|
|
225
|
-
): Promise<
|
|
279
|
+
): Promise<LoadedProjectModule[]> {
|
|
226
280
|
const project = bundledProject.getStore()
|
|
227
281
|
if (project) {
|
|
228
282
|
if (resolve(projectRoot) !== project.projectRoot) {
|
|
@@ -231,11 +285,11 @@ async function loadFamilyExports(
|
|
|
231
285
|
"Run the built entry from the project root and use that root in createSixb()."
|
|
232
286
|
)
|
|
233
287
|
}
|
|
234
|
-
return
|
|
288
|
+
return loadModules(project.modules.filter((module) => module.kind === kind))
|
|
235
289
|
}
|
|
236
290
|
|
|
237
291
|
const modules = await listFamilyModules(projectRoot, kind, directory)
|
|
238
|
-
return
|
|
292
|
+
return loadModules(
|
|
239
293
|
modules.map((module) => ({
|
|
240
294
|
...module,
|
|
241
295
|
load: () => import(pathToFileURL(resolve(projectRoot, module.path)).href),
|
|
@@ -243,9 +297,10 @@ async function loadFamilyExports(
|
|
|
243
297
|
)
|
|
244
298
|
}
|
|
245
299
|
|
|
246
|
-
async function
|
|
247
|
-
|
|
248
|
-
|
|
300
|
+
async function loadModules(
|
|
301
|
+
modules: readonly BundledProjectModule[]
|
|
302
|
+
): Promise<LoadedProjectModule[]> {
|
|
303
|
+
const loaded: LoadedProjectModule[] = []
|
|
249
304
|
|
|
250
305
|
for (const module of modules) {
|
|
251
306
|
let moduleNamespace: Record<string, unknown>
|
|
@@ -256,12 +311,15 @@ async function loadModuleExports(modules: readonly BundledProjectModule[]): Prom
|
|
|
256
311
|
throw new RuntimeError(`Failed to load ${module.kind} module '${module.path}': ${reason}`)
|
|
257
312
|
}
|
|
258
313
|
|
|
314
|
+
const exportedCandidates: unknown[] = []
|
|
315
|
+
const seen = new Set<unknown>()
|
|
259
316
|
for (const exportedValue of Object.values(moduleNamespace)) {
|
|
260
317
|
collectExportedCandidates(exportedValue, exportedCandidates, seen)
|
|
261
318
|
}
|
|
319
|
+
loaded.push({ path: module.path, exports: exportedCandidates })
|
|
262
320
|
}
|
|
263
321
|
|
|
264
|
-
return
|
|
322
|
+
return loaded
|
|
265
323
|
}
|
|
266
324
|
|
|
267
325
|
function collectExportedCandidates(value: unknown, target: unknown[], seen: Set<unknown>): void {
|
|
@@ -286,7 +344,10 @@ function collectExportedCandidates(value: unknown, target: unknown[], seen: Set<
|
|
|
286
344
|
target.push(value)
|
|
287
345
|
}
|
|
288
346
|
|
|
289
|
-
async function listModuleFiles(
|
|
347
|
+
async function listModuleFiles(
|
|
348
|
+
dir: string,
|
|
349
|
+
skipDirectory: (name: string) => boolean = () => false
|
|
350
|
+
): Promise<string[]> {
|
|
290
351
|
let entries: import("node:fs").Dirent[]
|
|
291
352
|
try {
|
|
292
353
|
entries = (await readdir(dir, { withFileTypes: true })) as import("node:fs").Dirent[]
|
|
@@ -303,7 +364,9 @@ async function listModuleFiles(dir: string): Promise<string[]> {
|
|
|
303
364
|
for (const entry of sortedEntries) {
|
|
304
365
|
const fullPath = join(dir, entry.name)
|
|
305
366
|
if (entry.isDirectory()) {
|
|
306
|
-
|
|
367
|
+
if (!skipDirectory(entry.name)) {
|
|
368
|
+
files.push(...(await listModuleFiles(fullPath, skipDirectory)))
|
|
369
|
+
}
|
|
307
370
|
continue
|
|
308
371
|
}
|
|
309
372
|
|
|
@@ -340,6 +403,10 @@ function hasSupportedModuleExtension(fileName: string): boolean {
|
|
|
340
403
|
return false
|
|
341
404
|
}
|
|
342
405
|
|
|
406
|
+
function toPosix(path: string): string {
|
|
407
|
+
return path.split(sep).join("/")
|
|
408
|
+
}
|
|
409
|
+
|
|
343
410
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
344
411
|
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
345
412
|
}
|
package/src/bootstrap/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { isAgentContextPath } from "./agent-context"
|
|
1
2
|
export type {
|
|
2
3
|
BundledProjectModule,
|
|
3
4
|
DiscoveredProjectDefinitions,
|
|
@@ -5,7 +6,6 @@ export type {
|
|
|
5
6
|
ProjectModule,
|
|
6
7
|
} from "./discovery"
|
|
7
8
|
export {
|
|
8
|
-
discoverOntologySources,
|
|
9
9
|
discoverProjectDefinitions,
|
|
10
10
|
listProjectModules,
|
|
11
11
|
withProjectModules,
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { access, mkdir,
|
|
1
|
+
import { access, mkdir, readFile, writeFile } from "node:fs/promises"
|
|
2
2
|
import { dirname, extname, join, relative, resolve, sep } from "node:path"
|
|
3
3
|
import { pathToFileURL } from "node:url"
|
|
4
4
|
import type { OntologyDocumentInput } from "../ontology/registry"
|
|
5
5
|
import type { ObjectTypeWithPropertyTokens } from "../ontology/tokens"
|
|
6
6
|
import type { ValueType } from "../ontology/types"
|
|
7
7
|
import { RuntimeError } from "../runtime/errors"
|
|
8
|
+
import { listOntologyModuleFiles } from "./discovery"
|
|
8
9
|
|
|
9
10
|
const moduleExtensions = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"])
|
|
10
11
|
|
|
@@ -44,8 +45,7 @@ export async function discoverOntologyTypeManifest(
|
|
|
44
45
|
projectRoot: string
|
|
45
46
|
): Promise<OntologyTypeManifestDiscovery> {
|
|
46
47
|
const resolvedProjectRoot = resolve(projectRoot)
|
|
47
|
-
const
|
|
48
|
-
const modulePaths = await listModuleFiles(ontologyDir)
|
|
48
|
+
const modulePaths = await listOntologyModuleFiles(resolvedProjectRoot)
|
|
49
49
|
const entries = new Map<string, OntologyTypeManifestEntry>()
|
|
50
50
|
const valueTypeEntries = new Map<string, OntologyValueTypeManifestEntry>()
|
|
51
51
|
const seen = new Set<unknown>()
|
|
@@ -271,37 +271,6 @@ async function loadOntologyModule(input: {
|
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
async function listModuleFiles(dir: string): Promise<string[]> {
|
|
275
|
-
let entries: import("node:fs").Dirent[]
|
|
276
|
-
try {
|
|
277
|
-
entries = (await readdir(dir, { withFileTypes: true })) as import("node:fs").Dirent[]
|
|
278
|
-
} catch (error) {
|
|
279
|
-
if (isNotFoundError(error)) {
|
|
280
|
-
return []
|
|
281
|
-
}
|
|
282
|
-
throw error
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const files: string[] = []
|
|
286
|
-
const sortedEntries = [...entries].sort((a, b) => a.name.localeCompare(b.name))
|
|
287
|
-
|
|
288
|
-
for (const entry of sortedEntries) {
|
|
289
|
-
const fullPath = join(dir, entry.name)
|
|
290
|
-
if (entry.isDirectory()) {
|
|
291
|
-
files.push(...(await listModuleFiles(fullPath)))
|
|
292
|
-
continue
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
if (!entry.isFile() || !hasSupportedModuleExtension(entry.name)) {
|
|
296
|
-
continue
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
files.push(fullPath)
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
return files
|
|
303
|
-
}
|
|
304
|
-
|
|
305
274
|
function toGeneratedModuleSpecifier(input: {
|
|
306
275
|
readonly fromDir: string
|
|
307
276
|
readonly modulePath: string
|
|
@@ -316,10 +285,6 @@ function stripSupportedModuleExtension(path: string): string {
|
|
|
316
285
|
return moduleExtensions.has(extension) ? path.slice(0, -extension.length) : path
|
|
317
286
|
}
|
|
318
287
|
|
|
319
|
-
function hasSupportedModuleExtension(fileName: string): boolean {
|
|
320
|
-
return moduleExtensions.has(extname(fileName).toLowerCase())
|
|
321
|
-
}
|
|
322
|
-
|
|
323
288
|
function isNotFoundError(error: unknown): boolean {
|
|
324
289
|
if (!(error instanceof Error)) {
|
|
325
290
|
return false
|