@orkastery/cli 0.5.3 → 0.5.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.
Files changed (212) hide show
  1. package/adapters/claude-code/README.md +158 -0
  2. package/adapters/claude-code/mods/autoridade.json +56 -0
  3. package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
  4. package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
  5. package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
  6. package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
  7. package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
  8. package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
  9. package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
  10. package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
  11. package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
  12. package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
  13. package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
  14. package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
  15. package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
  16. package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
  17. package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
  18. package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
  19. package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
  20. package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
  21. package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
  22. package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
  23. package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
  24. package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
  25. package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
  26. package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
  27. package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
  28. package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
  29. package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +117 -0
  30. package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
  31. package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
  32. package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
  33. package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
  34. package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
  35. package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
  36. package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
  37. package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
  38. package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
  39. package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
  40. package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
  41. package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
  42. package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
  43. package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
  44. package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
  45. package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
  46. package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
  47. package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
  48. package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
  49. package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
  50. package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
  51. package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
  52. package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
  53. package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
  54. package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
  55. package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
  56. package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
  57. package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
  58. package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
  59. package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
  60. package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
  61. package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
  62. package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
  63. package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
  64. package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
  65. package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
  66. package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
  67. package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
  68. package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
  69. package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
  70. package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
  71. package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
  72. package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
  73. package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
  74. package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
  75. package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
  76. package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
  77. package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
  78. package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
  79. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +1 -1
  80. package/adapters/openclaw/README.md +2 -1
  81. package/adapters/openclaw/openclaw.plugin.json +1 -1
  82. package/adapters/openclaw/package.json +1 -1
  83. package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
  84. package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
  85. package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
  86. package/assets/docs-en/produto/README.md +14 -0
  87. package/assets/docs-en/produto/_modelo-feature.md +62 -0
  88. package/assets/docs-en/roadmap/README.md +14 -0
  89. package/assets/docs-en/roadmap/_modelo-item.md +75 -0
  90. package/dist/adapters/claude-bg.js +77 -13
  91. package/dist/adapters/codex.js +10 -1
  92. package/dist/agents-md.js +24 -15
  93. package/dist/auditrun.js +17 -2
  94. package/dist/board.js +4 -3
  95. package/dist/branch-de-estado.js +23 -1
  96. package/dist/catalogo.js +33 -0
  97. package/dist/ci.js +13 -7
  98. package/dist/claims-conferir.js +342 -0
  99. package/dist/claims.js +3 -1
  100. package/dist/company-brain-client.js +36 -1
  101. package/dist/company-brain-journal.js +2 -1
  102. package/dist/company-brain-migration.js +36 -1
  103. package/dist/conducao-sentinela.js +388 -0
  104. package/dist/conducao-texto.js +12 -18
  105. package/dist/conducao.js +122 -30
  106. package/dist/conhecimento.js +490 -0
  107. package/dist/docs.js +22 -8
  108. package/dist/doctor-pulse-cron.js +182 -27
  109. package/dist/doctor-rede.js +18 -17
  110. package/dist/doctor.js +115 -111
  111. package/dist/entrega-pr.js +22 -21
  112. package/dist/escopo-escrita.js +10 -1
  113. package/dist/estado-thread.js +23 -1
  114. package/dist/experiencia-instalacao.js +45 -25
  115. package/dist/fabrica-batida.js +310 -0
  116. package/dist/fabrica-estado.js +38 -8
  117. package/dist/fabrica-publicar.js +3 -1
  118. package/dist/fila-pesada.js +444 -0
  119. package/dist/fix.js +3 -2
  120. package/dist/forja.js +1 -1
  121. package/dist/gates.js +3 -28
  122. package/dist/handoff.js +10 -6
  123. package/dist/hitl-local-receipt.js +2 -0
  124. package/dist/hitl-resumo.js +29 -3
  125. package/dist/hitl-tempo-parado.js +4 -4
  126. package/dist/hitl.js +29 -33
  127. package/dist/horario.js +14 -7
  128. package/dist/hosts.js +52 -1
  129. package/dist/impedimento.js +108 -14
  130. package/dist/index.js +623 -521
  131. package/dist/indice.js +7 -1
  132. package/dist/init.js +43 -47
  133. package/dist/instabilidade.js +144 -0
  134. package/dist/integracoes-locais.js +2 -0
  135. package/dist/intelligence-graph-cli.js +92 -21
  136. package/dist/intelligence-graph-contexto.js +56 -17
  137. package/dist/intelligence-graph-contract.js +2 -1
  138. package/dist/intelligence-graph-extract-md.js +56 -4
  139. package/dist/intelligence-graph-extract-ts.js +71 -3
  140. package/dist/intelligence-graph-query.js +66 -19
  141. package/dist/ledger.js +15 -1
  142. package/dist/liveness.js +6 -3
  143. package/dist/locale-ajuda.js +761 -0
  144. package/dist/locale-gerados.js +160 -0
  145. package/dist/locale-master.js +99 -0
  146. package/dist/locale-onboarding.js +92 -0
  147. package/dist/locale-phase.js +151 -0
  148. package/dist/locale-pulse.js +211 -0
  149. package/dist/locale-retry.js +385 -0
  150. package/dist/locale-roadmap.js +102 -0
  151. package/dist/locale-ship.js +494 -0
  152. package/dist/locale-thread.js +277 -0
  153. package/dist/locale-verify.js +125 -0
  154. package/dist/locale.js +714 -0
  155. package/dist/manifest.js +129 -3
  156. package/dist/maquina.js +23 -4
  157. package/dist/master-digest.js +6 -1
  158. package/dist/master-nota.js +4 -6
  159. package/dist/master.js +21 -24
  160. package/dist/mcp-artifacts.js +11 -2
  161. package/dist/mcp-git.js +23 -6
  162. package/dist/mcp-grafo.js +7 -4
  163. package/dist/mcp-server.js +8 -2
  164. package/dist/mcp-ship.js +3 -1
  165. package/dist/mcp-verify.js +6 -1
  166. package/dist/modos.js +3 -6
  167. package/dist/network-roadmap.js +5 -2
  168. package/dist/noctum-arco.js +911 -0
  169. package/dist/noctum-capacidade.js +141 -0
  170. package/dist/noctum-envelope.js +810 -0
  171. package/dist/noctum-execucao.js +304 -0
  172. package/dist/noctum-fila.js +280 -0
  173. package/dist/ocupacao.js +29 -2
  174. package/dist/onboarding.js +40 -21
  175. package/dist/orkmind.js +9 -2
  176. package/dist/orquestracao.js +13 -12
  177. package/dist/parado-no-condutor.js +34 -9
  178. package/dist/phase.js +94 -39
  179. package/dist/policies.js +4 -4
  180. package/dist/portfolio.js +4 -2
  181. package/dist/postura-local.js +234 -0
  182. package/dist/preflight.js +11 -10
  183. package/dist/procedencia.js +225 -0
  184. package/dist/projeto-alvo.js +127 -4
  185. package/dist/prompts.js +6 -2
  186. package/dist/pulse-delivery.js +13 -2
  187. package/dist/pulse.js +52 -19
  188. package/dist/ratelimit.js +4 -2
  189. package/dist/redacao-saida.js +63 -0
  190. package/dist/rede-status.js +3 -2
  191. package/dist/retry.js +232 -148
  192. package/dist/roadmap-reservas.js +20 -3
  193. package/dist/roadmap-status.js +129 -33
  194. package/dist/runtime-context.js +181 -3
  195. package/dist/runtimes.js +2 -1
  196. package/dist/session-events.js +7 -3
  197. package/dist/session-watcher-claude.js +7 -1
  198. package/dist/session-watcher.js +185 -33
  199. package/dist/sessoes-contas.js +1 -1
  200. package/dist/ship-publicar.js +800 -0
  201. package/dist/ship.js +84 -81
  202. package/dist/steal.js +77 -0
  203. package/dist/thread-close.js +3 -2
  204. package/dist/thread.js +153 -82
  205. package/dist/util.js +8 -1
  206. package/dist/verify.js +141 -52
  207. package/dist/vida-da-thread.js +254 -0
  208. package/dist/worktree-local.js +165 -0
  209. package/dist/worktree.js +20 -0
  210. package/dist/yaml.js +27 -8
  211. package/package.json +1 -1
  212. package/schemas/code-artifact-graph.v1.schema.json +2 -1
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.COMANDO_CONFIRMAR_WORKTREE = exports.ARQUIVO_WORKTREE_LOCAL = exports.CONTRATO_WORKTREE_LOCAL = void 0;
37
+ exports.caminhoRealPrevisto = caminhoRealPrevisto;
38
+ exports.pastaDasWorktreesPedida = pastaDasWorktreesPedida;
39
+ exports.lerWorktreeLocal = lerWorktreeLocal;
40
+ exports.recusaDePastaDasWorktrees = recusaDePastaDasWorktrees;
41
+ exports.exigirPastaDasWorktrees = exigirPastaDasWorktrees;
42
+ exports.confirmarWorktreeLocal = confirmarWorktreeLocal;
43
+ exports.revogarWorktreeLocal = revogarWorktreeLocal;
44
+ /**
45
+ * RM-047 (fronteira de confiança, P3): a pasta das worktrees fora da raiz vale só com a confirmação
46
+ * desta máquina.
47
+ *
48
+ * O `worktree.dir` mora no `orkastery.yaml`, que vem com o repositório, e o `git worktree add` cria o
49
+ * checkout (e o `.gitignore` da pasta) onde ele apontar. Dentro da raiz do projeto, pelo caminho real,
50
+ * nada muda. Fora dela (`..`, caminho absoluto ou um link versionado que leva para fora), a criação
51
+ * recusa com `worktree.dir-fora-da-raiz` até a máquina confirmar a mesma pasta com
52
+ * `ork setup worktree confirmar`. A confirmação fica em `.orkastery/private/worktree-local.json`, com
53
+ * as mesmas regras da postura de sandbox (P1): pasta 0700, arquivo 0600, nunca link, nunca rastreado
54
+ * pelo git, e só para este checkout e esta pasta.
55
+ */
56
+ const fs = __importStar(require("node:fs"));
57
+ const path = __importStar(require("node:path"));
58
+ const estado_thread_1 = require("./estado-thread");
59
+ const postura_local_1 = require("./postura-local");
60
+ const util_1 = require("./util");
61
+ exports.CONTRATO_WORKTREE_LOCAL = 'ork.worktree-local/v1';
62
+ exports.ARQUIVO_WORKTREE_LOCAL = 'worktree-local.json';
63
+ /**
64
+ * Caminho real de um caminho que talvez ainda não exista: o real do ancestral mais próximo que existe,
65
+ * mais o resto. Um link no caminho (inclusive versionado no clone) é resolvido aqui.
66
+ */
67
+ function caminhoRealPrevisto(alvo) {
68
+ let atual = path.resolve(alvo);
69
+ const resto = [];
70
+ for (;;) {
71
+ try {
72
+ return path.join(fs.realpathSync(atual), ...resto.reverse());
73
+ }
74
+ catch { /* sobe */ }
75
+ const pai = path.dirname(atual);
76
+ if (pai === atual)
77
+ return path.resolve(alvo);
78
+ resto.push(path.basename(atual));
79
+ atual = pai;
80
+ }
81
+ }
82
+ /** A pasta das worktrees que o manifesto pede, pelo caminho real, e se ela fica dentro da raiz. */
83
+ function pastaDasWorktreesPedida(raiz, manifesto) {
84
+ let principal;
85
+ try {
86
+ principal = (0, estado_thread_1.raizDoEstado)(raiz);
87
+ }
88
+ catch {
89
+ principal = path.resolve(raiz);
90
+ }
91
+ const raizReal = caminhoRealPrevisto(principal);
92
+ const dir = caminhoRealPrevisto(path.resolve(principal, manifesto.worktree.dir));
93
+ const rel = path.relative(raizReal, dir);
94
+ const primeiro = rel.split(path.sep)[0];
95
+ const dentro = !rel.startsWith('..') && !path.isAbsolute(rel) && primeiro !== '.git';
96
+ return { dir, dentro };
97
+ }
98
+ /** Lê a confirmação local; `null` com o motivo quando ela não existe ou não vale. */
99
+ function lerWorktreeLocal(raiz) {
100
+ const { bruto: o, motivo } = (0, postura_local_1.lerArquivoPrivado)(raiz, exports.ARQUIVO_WORKTREE_LOCAL);
101
+ if (!o)
102
+ return { local: null, motivo };
103
+ if (o.contrato !== exports.CONTRATO_WORKTREE_LOCAL || typeof o.dir !== 'string' || typeof o.raiz !== 'string' ||
104
+ typeof o.confirmadoEm !== 'string' || typeof o.por !== 'string') {
105
+ return { local: null, motivo: `${exports.ARQUIVO_WORKTREE_LOCAL} fora do contrato ${exports.CONTRATO_WORKTREE_LOCAL}` };
106
+ }
107
+ if (o.raiz !== (0, postura_local_1.raizRealDoEstado)(raiz))
108
+ return { local: null, motivo: 'a confirmação local é de outro checkout' };
109
+ return { local: o, motivo: null };
110
+ }
111
+ /** Comando que confirma a pasta nesta máquina; vai em toda recusa. */
112
+ exports.COMANDO_CONFIRMAR_WORKTREE = 'ork setup worktree confirmar';
113
+ /**
114
+ * A recusa da criação de worktree: `null` quando a pasta do manifesto fica dentro da raiz, ou quando
115
+ * a máquina confirmou exatamente essa pasta; senão o erro tipado com o comando que confirma.
116
+ */
117
+ function recusaDePastaDasWorktrees(raiz, manifesto) {
118
+ const { dir, dentro } = pastaDasWorktreesPedida(raiz, manifesto);
119
+ if (dentro)
120
+ return null;
121
+ const { local, motivo } = lerWorktreeLocal(raiz);
122
+ if (local && local.dir === dir)
123
+ return null;
124
+ const porque = local ? `a máquina confirmou ${local.dir}` : motivo ?? 'sem confirmação local';
125
+ return `worktree.dir-fora-da-raiz: o orkastery.yaml pede worktree.dir: ${JSON.stringify(manifesto.worktree.dir).slice(0, 200)}, ` +
126
+ `que leva a ${dir}, fora da raiz do projeto (pelo caminho real), e esta máquina não confirmou essa pasta (${porque}). ` +
127
+ 'Nenhuma worktree foi criada. O manifesto vem com o repositório; quem decide criar checkout fora da raiz é a ' +
128
+ `máquina. Para aceitar nesta máquina: ${exports.COMANDO_CONFIRMAR_WORKTREE} (ou volte worktree.dir para dentro do projeto, ` +
129
+ 'como .claude/worktrees).';
130
+ }
131
+ /** Lança a recusa, quando houver. */
132
+ function exigirPastaDasWorktrees(raiz, manifesto) {
133
+ const recusa = recusaDePastaDasWorktrees(raiz, manifesto);
134
+ if (recusa)
135
+ throw new Error(recusa);
136
+ }
137
+ /**
138
+ * Grava a confirmação local da pasta que o manifesto pede hoje. Com `esperado`, ele precisa levar à
139
+ * mesma pasta: a máquina confirma o que leu, não o que o manifesto pode passar a dizer depois.
140
+ */
141
+ function confirmarWorktreeLocal(raiz, manifesto, por, esperado) {
142
+ const { dir, dentro } = pastaDasWorktreesPedida(raiz, manifesto);
143
+ if (esperado !== undefined) {
144
+ let principal;
145
+ try {
146
+ principal = (0, estado_thread_1.raizDoEstado)(raiz);
147
+ }
148
+ catch {
149
+ principal = path.resolve(raiz);
150
+ }
151
+ const pedido = caminhoRealPrevisto(path.resolve(principal, esperado));
152
+ if (pedido !== dir) {
153
+ throw new Error(`worktree.dir-divergente: o orkastery.yaml leva a ${dir}, não a ${pedido}; nada foi confirmado`);
154
+ }
155
+ }
156
+ if (dentro)
157
+ throw new Error(`worktree.dir-dentro-da-raiz: ${dir} fica dentro do projeto e não precisa de confirmação`);
158
+ const local = { contrato: exports.CONTRATO_WORKTREE_LOCAL, dir, raiz: (0, postura_local_1.raizRealDoEstado)(raiz), confirmadoEm: (0, util_1.agora)(), por };
159
+ (0, postura_local_1.gravarArquivoPrivado)(raiz, exports.ARQUIVO_WORKTREE_LOCAL, local);
160
+ return local;
161
+ }
162
+ /** Apaga a confirmação local; devolve se havia uma. */
163
+ function revogarWorktreeLocal(raiz) {
164
+ return (0, postura_local_1.revogarArquivoPrivado)(raiz, exports.ARQUIVO_WORKTREE_LOCAL);
165
+ }
package/dist/worktree.js CHANGED
@@ -64,6 +64,7 @@ const leases_1 = require("./leases");
64
64
  const thread_1 = require("./thread");
65
65
  const util_1 = require("./util");
66
66
  const estado_thread_1 = require("./estado-thread");
67
+ const procedencia_1 = require("./procedencia");
67
68
  /**
68
69
  * Diretorio canonico da worktree de uma thread, resolvido pelo `ork` na arvore principal: o mesmo que a criacao usa,
69
70
  * tambem quando o comando roda de dentro de outra worktree (P4 do ensaio da 0.5.0).
@@ -520,7 +521,18 @@ function auditarWorktree(carregado, id) {
520
521
  correcao: `git -C ${dir} switch ${branchEsperada}`,
521
522
  });
522
523
  }
524
+ // RM-047 (P2): git so roda na worktree registrada e com o thread.json local.
525
+ let procedencia = null;
523
526
  if (existe) {
527
+ try {
528
+ (0, procedencia_1.exigirCwdLocal)(raiz, id, dir, 'thread');
529
+ }
530
+ catch (e) {
531
+ procedencia = e.message;
532
+ checks.push({ nome: 'procedencia', nivel: 'fail', detalhe: procedencia, correcao: `ork worktree ensure ${id}` });
533
+ }
534
+ }
535
+ if (existe && procedencia === null) {
524
536
  const limpa = arvoreLimpa(dir);
525
537
  checks.push(limpa === true
526
538
  ? { nome: 'arvore', nivel: 'ok', detalhe: 'sem alteracao nao commitada' }
@@ -641,6 +653,14 @@ function liberarWorktree(carregado, id, opcoes = {}) {
641
653
  correcao: '',
642
654
  };
643
655
  }
656
+ // RM-047 (P2): nada de git num diretorio que o thread.json escolheu e o git nao registra.
657
+ try {
658
+ (0, procedencia_1.exigirCwdLocal)(raiz, id, dir, 'thread');
659
+ }
660
+ catch (e) {
661
+ return { ok: false, removida: false, dir, branch, leasesLiberados: [], motivo: 'tree.blocked',
662
+ detalhe: e.message, correcao: `confira o diretorio e o thread.json da thread ${id}` };
663
+ }
644
664
  const limpa = arvoreLimpa(dir);
645
665
  if (limpa === false && !opcoes.forcar) {
646
666
  return {
package/dist/yaml.js CHANGED
@@ -55,10 +55,16 @@ function escalar(bruto) {
55
55
  }
56
56
  return t;
57
57
  }
58
- function preparar(texto) {
58
+ function preparar(texto, estrito) {
59
59
  const linhas = [];
60
60
  texto.split('\n').forEach((original, i) => {
61
- const semComentario = tirarComentario(original).replace(/\s+$/, '');
61
+ const cortada = tirarComentario(original);
62
+ // D9: no modo estrito, o `#` depois do valor nao corta o valor calado (`titulo: Decisao #42`); com o `#`
63
+ // no texto, o valor vai entre aspas. Comentario na linha inteira segue valendo.
64
+ if (estrito && cortada !== original && cortada.trim() !== '') {
65
+ throw new Error(`YAML invalido na linha ${i + 1}: comentario depois do valor (com # no texto, use aspas)`);
66
+ }
67
+ const semComentario = cortada.replace(/\s+$/, '');
62
68
  if (semComentario.trim() === '')
63
69
  return;
64
70
  if (semComentario.trim() === '---')
@@ -68,7 +74,7 @@ function preparar(texto) {
68
74
  });
69
75
  return linhas;
70
76
  }
71
- function parseBloco(linhas, inicio, indent) {
77
+ function parseBloco(linhas, inicio, indent, estrito) {
72
78
  let i = inicio;
73
79
  if (i >= linhas.length)
74
80
  return [null, i];
@@ -89,6 +95,9 @@ function parseBloco(linhas, inicio, indent) {
89
95
  throw new Error(`YAML invalido na linha ${linha.numero}: esperado "chave: valor"`);
90
96
  }
91
97
  const chave = linha.conteudo.slice(0, sep).trim().replace(/^["']|["']$/g, '');
98
+ if (estrito && (chave === '__proto__' || Object.hasOwn(mapa, chave))) {
99
+ throw new Error(`YAML invalido na linha ${linha.numero}: chave ${chave === '__proto__' ? 'reservada' : 'repetida'}`);
100
+ }
92
101
  const resto = linha.conteudo.slice(sep + 1).trim();
93
102
  i++;
94
103
  if (resto !== '') {
@@ -96,7 +105,7 @@ function parseBloco(linhas, inicio, indent) {
96
105
  continue;
97
106
  }
98
107
  if (i < linhas.length && linhas[i].indent > indent) {
99
- const [filho, proximo] = parseBloco(linhas, i, linhas[i].indent);
108
+ const [filho, proximo] = parseBloco(linhas, i, linhas[i].indent, estrito);
100
109
  mapa[chave] = filho;
101
110
  i = proximo;
102
111
  }
@@ -106,11 +115,21 @@ function parseBloco(linhas, inicio, indent) {
106
115
  }
107
116
  return [mapa, i];
108
117
  }
109
- /** Le um documento YAML do subconjunto suportado. */
110
- function lerYaml(texto) {
111
- const linhas = preparar(texto);
118
+ /**
119
+ * Le um documento YAML do subconjunto suportado.
120
+ *
121
+ * RM-026 K7 (D9): `estrito` serve a quem le texto que nao e do `ork` (o frontmatter do conhecimento). Chave
122
+ * repetida no mesmo mapa, `__proto__`, comentario depois do valor e linha que sobra (indentacao fora do bloco)
123
+ * recusam, em vez de sumir calados como no modo padrao, que o `orkastery.yaml` e as paginas de docs seguem usando.
124
+ */
125
+ function lerYaml(texto, opcoes = {}) {
126
+ const estrito = opcoes.estrito === true;
127
+ const linhas = preparar(texto, estrito);
112
128
  if (linhas.length === 0)
113
129
  return {};
114
- const [valor] = parseBloco(linhas, 0, linhas[0].indent);
130
+ const [valor, proximo] = parseBloco(linhas, 0, linhas[0].indent, estrito);
131
+ if (estrito && proximo < linhas.length) {
132
+ throw new Error(`YAML invalido na linha ${linhas[proximo].numero}: indentacao fora do bloco`);
133
+ }
115
134
  return valor;
116
135
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orkastery/cli",
3
- "version": "0.5.3",
3
+ "version": "0.5.6",
4
4
  "description": "A software factory of AI agents that proves its work: parallel threads, verified results, and short decisions only when they matter.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/orkastery/orkastery#readme",
@@ -258,7 +258,8 @@
258
258
  "imports",
259
259
  "calls",
260
260
  "references",
261
- "derived_from"
261
+ "derived_from",
262
+ "cites"
262
263
  ]
263
264
  },
264
265
  "snapshot_id": {